113
Application Deployment on AWS Amazon Web Services Japan 篠原英治 2015128

Application Deployment on AWS

Embed Size (px)

Citation preview

Page 1: Application Deployment on AWS

Application Deployment on AWS Amazon Web Services Japan 篠原英治

2015年年12月8日

Name 篠原英治 Twitter shinodogg Blog httpshinodoggcom Profile Role Solutions Architect Market Startup Subject Matter Expert [ Amazon CloudSearch Amazon Elasticsearch Service Amazon Simple Workflow Service AWS Elastic Beanstalk ]

Agendabull  AWSのデプロイメントサービス

ndash  AWS CodeDeployndash  AWS Elastic Beanstalkndash  AWS OpsWorksndash  AWS CloudFormation

bull  Accelerating Software Delivery on AWSndash  AWS CodePipeline

Deploy

bull  アプリケーションやアセットの更更新をサーバに反映させること

bull  実際には更更新されたファイル群を対象のサーバ群に配布する

Availability Zone13 Availability Zone13

v2

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 2: Application Deployment on AWS

Name 篠原英治 Twitter shinodogg Blog httpshinodoggcom Profile Role Solutions Architect Market Startup Subject Matter Expert [ Amazon CloudSearch Amazon Elasticsearch Service Amazon Simple Workflow Service AWS Elastic Beanstalk ]

Agendabull  AWSのデプロイメントサービス

ndash  AWS CodeDeployndash  AWS Elastic Beanstalkndash  AWS OpsWorksndash  AWS CloudFormation

bull  Accelerating Software Delivery on AWSndash  AWS CodePipeline

Deploy

bull  アプリケーションやアセットの更更新をサーバに反映させること

bull  実際には更更新されたファイル群を対象のサーバ群に配布する

Availability Zone13 Availability Zone13

v2

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 3: Application Deployment on AWS

Agendabull  AWSのデプロイメントサービス

ndash  AWS CodeDeployndash  AWS Elastic Beanstalkndash  AWS OpsWorksndash  AWS CloudFormation

bull  Accelerating Software Delivery on AWSndash  AWS CodePipeline

Deploy

bull  アプリケーションやアセットの更更新をサーバに反映させること

bull  実際には更更新されたファイル群を対象のサーバ群に配布する

Availability Zone13 Availability Zone13

v2

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 4: Application Deployment on AWS

Deploy

bull  アプリケーションやアセットの更更新をサーバに反映させること

bull  実際には更更新されたファイル群を対象のサーバ群に配布する

Availability Zone13 Availability Zone13

v2

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 5: Application Deployment on AWS

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 6: Application Deployment on AWS

デプロイとビルドプロビジョニングの違い

bull  ビルドndash  ソースコードから配布すべき成果物を生成する

bull  プロビジョニングndash  サーバにソフトウェアをインストールamp設定

bull  オーケストレーションndash  DBやLBとのつなぎ込み

bull  デプロイndash  アセットの更更新をサーバに反映

ソースコード

ビルドex mvn bundle

プロビジョニングex chef puppet

オーケストレーション

デプロイ

Apache NginxRuby JDKConfig etcWEB LB

DB

Amazon Linux

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 7: Application Deployment on AWS

よくあるデプロイ手法と課題

bull  Push型 ndash デプロイ元からデプロイ先へndash  FTP rsync git pullndash  Capistrano Fabric

bull  課題ndash  自動化できていない

bull  人間がサーバにログインしてコマンドを手動で実行行しているndash  デプロイサーバの負荷シングルポイントndash  新規サーバ構築時にデプロイ対象がわからないndash  複数人でデプロイがぶつからない様に管理理するのが面倒

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 8: Application Deployment on AWS

デプロイの効率率率化安定化

bull  質の高いリリースのためには必要不不可欠bull  効率率率的で安定している仕組みがあるならそれを使わない手はない

AWS CodeDeployが選択肢

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 9: Application Deployment on AWS

AWS CodeDeploy

bull  1台も数千台も同じやり方でbull  開発環境もステージング環境もプロダクションも同じやり方でbull  ダウンタイム無くデプロイbull  中央でデプロイをコントロールモニタリング

Staging

AWS CodeDeployv1 v2 v3

Production

Dev

自動デプロイのコーディネートをAmazonの様に

Applicationrevisions

Deployment groups

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 10: Application Deployment on AWS

AWS CodeDeploy概要bull  デプロイに特化したサービス

ndash  指定したグループに指定したファイルを指定した割合ずつ

ndash  TagやAuto Scaling Groupでグループ指定

bull  エージェントを入れれば利利用可能ndash  Pull型のデプロイEC2以外でもndash  Linux amp Windows対応

bull  関連する処理理をフックで実行行可能ndash  アプリ再起動なども自動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1 v2 v3

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 11: Application Deployment on AWS

AWS CodeDeployの動作

1  配布物をアップロードndash  Amazon S3 GitHub

2  デプロイを指示ndash 配布物ダウンロードndash  files 所定の場所に配置ndash  hooks 任意の処理理実行行

Deployment group

AgentAgent Agent

hellip

orAmazon S3

Application

1 Upload

files

hooksdst

2 DeployDownload

Polling

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 12: Application Deployment on AWS

Deployment config ndash デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て一度度に)任意の割合のconfigも作成可能

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 13: Application Deployment on AWS

AppSpec File ndash デプロイの手順書

bull  filesndash どのファイルをどこに配置するか指定

bull  hooksndash 以下の黄色のEventで実行行する処理理を指定

version 00os linuxfiles - source config destination etcapp - source targethellowar destination varlibtomcat6webappshooks ApplicationStop - location deploy_hooksstop-tomcatsh ApplicationStart - location deploy_hooksstart-tomcatsh

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 14: Application Deployment on AWS

Application ndash 成果物 + AppSpec File

bull  フォルダ構成ndash  appspecyml (必須)ndash  ビルド済の成果物ndash  その他配布物ndash  hookスクリプト

bull  アップロードndash  Amazon S3のObject

bull  ziptartgz形式対応ndash  GitHubのRepository

bull  zip形式でダウンロードされる

appspecyml config configxml deploy_hooks start-tomcatsh stop-tomcatsh target hellowar

orAmazon S3

注 ソースコードではなくmavenやbundle後のファイル群をputpushすることをオススメ

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 15: Application Deployment on AWS

AWS CodeDeployでやることやらないこと

やることbull  ファイルをサーバに配るbull  hookスクリプトの実行行

ndash  アプリ再起動ndash  オーケストレーション

bull  ELB付け外し等bull  これらの実行行を中央管理理

ndash  進捗やエラーログがブラウザやAPIで確認可能

やらないことbull  ビルドbull  プロビジョニング

いずれもhookスクリプトで実行行できなくはないが効率率率や安定性の面でオススメしない

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 16: Application Deployment on AWS

AWS CodeDeployとAuto Scaling Group(ASG)

bull  スケールアウト時に最新のリビジョンが自動でデプロイされるndash  ASGのLifecycle Hookを利利用ndash  追加インスタンスのみにデプロイ

bull  Deployment GroupにASGを指定するだけで利利用可能 デプロイに成功した最新の

リビジョンが自動でデプロイ

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 17: Application Deployment on AWS

AWS ElasticBeanstalk

bull  特徴 (httpawsamazoncomjpelasticbeanstalk)ndash  速く簡単にアプリケーションをデプロイ可能ndash  インフラストラクチャの準備運営からアプリケーションスタックの管理理まで自動化

ndash  Auto Scaling によりコストを抑えながらスケーラビリティを確保

ndash  Java PHP Ruby Python Nodejs NET Docker などに対応

bull  価格体系 (httpawsamazoncomjpelasticbeanstalkpricing)ndash  追加料料金金なしndash  アプリケーションの保存実行行に必要なAWSリソース (EC2 S3 RDS DynamoDB など) に対してのみ課金金

インフラ構成の構築アプリデプロイの自動化サービス

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 18: Application Deployment on AWS

Elastic Beanstalk vs Do It YourselfOn-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 19: Application Deployment on AWS

On-‐‑‒instance configuration

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

アプリケーションの開発rdquoだけrdquoにフォーカス

Elastic Beanstalkにお任せ

Elastic Beanstalk vs Do It Yourself

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 20: Application Deployment on AWS

bull  あらかじめ定義されたインフラストラクチャbull  Single instance (開発環境 ローコスト)bull  Load balancing Auto Scaling (本番環境)

bull  Web Tier と Worker Tierbull  リソースのプロビジョニング

bull  Load Balancerbull  Auto Scaling groupbull  Security groupsbull  Database (optional)

bull  ユニークなドメイン名の提供bull  例例) yourappelasticbeanstalkcom

Infrastructure stackElastic Beanstalk vs Do It Yourself

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 21: Application Deployment on AWS

bull  アプリケーションを簡単にデプロイbull  複数バージョンの切切り替えbull  複数環境の切切り替え

Easy DeploymentElastic Beanstalk vs Do It Yourself

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 22: Application Deployment on AWS

Elastic Beanstalkでアプリケーションをデプロイするのに必要なこと

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your codeSupported Platforms

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 23: Application Deployment on AWS

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

Elastic Beanstalkでのデプロイ

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 24: Application Deployment on AWS

Elastic Beanstalkでのデプロイ

1

2

3

4

Region

Stack (container) type

Single-‐‑‒Instance Load Balanced w Autoscalingor

Database (RDS) optional

Your code

デプロイを行行う方法1  AWS Management Console を使う2  AWS Toolkit for EclipseVisual Studio IDEを使う3  EB Command Line Interface(EB CLI) を使う$ eb deploy

今回は上記3のEB CLIを使ったデプロイ方法をご紹介します

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 25: Application Deployment on AWS

サンプルアプリケーションbull  Nodejs + Expressな会員登録アプリケーション

ndash  ソースコードはdarrから入手可能ndash  httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒sample

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 26: Application Deployment on AWS

サンプルアプリケーションのデプロイ1   EB CLIのインストール$ pip install -‐‑‒-‐‑‒upgrade awsebcli

2   サンプルアプリケーションのダウンロード$ git clone httpsgithubcomawslabseb-‐‑‒node-‐‑‒express-‐‑‒samplegit

3   Elastic Beanstalk applicationの作成$ eb init

4   プロンプトに従って環境の設定5   リソースの作成およびアプリケーションのローンチ$ eb create

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 27: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  eb initのプロンプト リージョンの選択Select a default region1) us-‐‑‒east-‐‑‒1 US East (N Virginia)2) us-‐‑‒west-‐‑‒1 US West (N California)3) us-‐‑‒west-‐‑‒2 US West (Oregon)4) eu-‐‑‒west-‐‑‒1 EU (Ireland)5) eu-‐‑‒central-‐‑‒1 EU (Frankfurt)6) ap-‐‑‒southeast-‐‑‒1 Asia Pacific (Singapore)7) ap-‐‑‒southeast-‐‑‒2 Asia Pacific (Sydney)8) ap-‐‑‒northeast-‐‑‒1 Asia Pacific (Tokyo)9) sa-‐‑‒east-‐‑‒1 South America (Sao Paulo)10) cn-‐‑‒north-‐‑‒1 China (Beijing)(default is 3)

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 28: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  eb initのプロンプト アプリ名スタックSSHKeypairEnter Application Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

It appears you are using Nodejs Is this correct(yn) yDo you want to set up SSH for your instances(yn) y

Select a keypair1) oregon2) [ Create new KeyPair ](default is 2) 1

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 29: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  eb initのプロンプト スタックSelect a platform1) Nodejs2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-‐‑‒container Docker9) GlassFish10) Go11) Java

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 30: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  eb createのプロンプト EnvironmentCNAMEDeployEnter Environment Name(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample) Enter DNS CNAME prefix(default is eb-‐‑‒node-‐‑‒express-‐‑‒sample)

Creating application version archive 5529Uploading eb-‐‑‒node-‐‑‒express-‐‑‒sample5529zip to S3 This may take a whileUpload CompleteEnvironment details for eb-‐‑‒node-‐‑‒express-‐‑‒sample Application name eb-‐‑‒node-‐‑‒express-‐‑‒sample Region us-‐‑‒west-‐‑‒2 Deployed Version 5529 Environment ID e-‐‑‒ufxx79fmkc

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 31: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  EB CLIを使ってブラウザで表示$ eb open

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 32: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  UIを変更更$ vim viewsindexejs$ git commit ndasham ldquomodify UIrdquo$ eb deploy$ eb open

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 33: Application Deployment on AWS

サンプルアプリケーションのデプロイbull  サンプルアプリケーションを動かす

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 34: Application Deployment on AWS

ebextensions を活用した環境のカスタマイズndash  Elastic Beanstalkの定義されたテンプレートのカスタマイズndash  例例えばrdquoサーバー監視のサービスをインストールしたいrdquo

本番運用の際はバージョンを明記しましょう

httpwwwslidesharenetshotaumeda1aws-‐‑‒startuptechsummer201515

Retty 梅田さんのスライドebextensionsでMackerelの自動インストールを実現

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 35: Application Deployment on AWS

デプロイしたサンプルアプリケーションの詳細bull  resourcesconfig ndash 追加のリソース定義

本番運用の際はバージョンを明記しましょう

Resources StartupSignupsTable Type AWSDynamoDBTable Properties KeySchema HashKeyElement AttributeName email AttributeType S ProvisionedThroughput ReadCapacityUnits 1 WriteCapacityUnits 1 NewSignupQueue Type AWSSQSQueue NewSignupTopic Type AWSSNSTopic Properties Subscription -‐‑‒ Endpoint FnGetOptionSetting DefaultValue xxxxxxcom OptionName NewSignupEmail Protocol email -‐‑‒ Endpoint FnGetAtt [NewSignupQueue Arn] Protocol sqs

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 36: Application Deployment on AWS

ebextensionsbull  ebextensions を活用してElastic Beanstalkに集約

ndash  option_settings セクションbull  環境内のAWSリソースアプリケーションを実行行するソフトウエアの設定

ndash  resources セクションbull  CloudFormationがサポートするあらゆるリソースの追加および設定

ndash 環境を起動する際に使うCloudFormationテンプレートに追加ndash  その他のセクション

bull  packagessourcesfilesusersgroupscommandscontainer_commandsservices

bull  起動されるEC2インスタンスの設定

bull  セクション毎にファイルを分割するのを推奨 設定ファイルはアルファベット順に処理理される

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 37: Application Deployment on AWS

bull  packagesndash  yumrpmrubygems等を利利用したパッケージのインストールndash  例例) yumから最新rpmでURL指定rubygemsでchef 0102

ebextensions

packages yum libmemcached [] ruby-‐‑‒devel [] gcc [] rpm epel httpdownloadfedoraprojectorgpubepel5i386epel-‐‑‒release-‐‑‒5-‐‑‒4noarchrpm rubygems chef 0102

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 38: Application Deployment on AWS

bull  sourcesndash  外部からのアーカイブをダウンロードして指定した場所に展開

bull  tartar+gziptar+bz2zip をサポートndash  例例) S3にあるアーカイブファイルを指定したディレクトリに展開

ebextensions

sources etcmyapp https3amazonawscommybucketmytgz

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 39: Application Deployment on AWS

bull  filesndash  EC2上にファイルを作成外部からファイルを取得することも可能ndash  例例) ファイルをコピーしてrootだけ書き込める権限で配置

ndash  例例) シンボリックリンク myfile1txt を参照する myfile2txt

ebextensions

files homeec2-‐‑‒usermyfile mode 000755 owner root group root source httpfoobarmyfile

files tmpmyfile2txt mode 120400 content tmpmyfile1txt

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 40: Application Deployment on AWS

bull  groupsndash  グループを作成ndash  例例) groupOneはグループIDなしgroupTwoのグループIDは45

ebextensions

groups groupOne groupTwo gid 45

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 41: Application Deployment on AWS

bull  usersndash  ユーザーを作成ndash  例例) ユーザーIDグループ名ホームディレクトリの設定

ebextensions

users myuser groups -‐‑‒ group1 -‐‑‒ group2 uid 50 homeDir homemyuser

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 42: Application Deployment on AWS

bull  commandsndash  サーバー設定後バージョンファイルが抽出される前に実行行されるコマンドndash  例例) pythonスクリプトを実行行

ebextensions

commands python_install command myscriptpy cwd homeec2-‐‑‒user env myvarname myvarvalue test [ usrbinpython ] ampamp echo python not installed

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 43: Application Deployment on AWS

bull  container_commandsndash  サーバー設定後バージョンファイルが抽出された後に実行行されるコマンド

bull  AWSセキュリティ認証情報などの環境変数にもアクセス可能bull  leader_only(option) AutoScalingグループのリーダーにするインスタンスのみ

ndash  例例) Djangoの管理理タスクを実行行

ebextensions

container_commands 01collectstatic command django-‐‑‒adminpy collectstatic -‐‑‒-‐‑‒noinputrdquo 02syncdb command django-‐‑‒adminpy syncdb -‐‑‒-‐‑‒noinput leader_only true 03migrate command django-‐‑‒adminpy migrate leader_only true

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 44: Application Deployment on AWS

bull  servicesndash  インスタンス起動時に開始停止する必要のあるサービスを定義ndash  例例) 起動時にサービスサービスが自動的に開始される

ebextensions

services sysvinit myservice enabled true

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 45: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

現 現 現 現

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 46: Application Deployment on AWS

bull  Rolling Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 47: Application Deployment on AWS

bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 48: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 49: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 50: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 51: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 52: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 53: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

新 新 新 現

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 54: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy

ndash  Batch type Auto Scaling グループ内のインスタンスの割合もしくは一定数ndash  Batch size 割合()もしくはインスタンス数(AutoScaling設定の最大数まで)ndash  2台ずつデプロイする場合の設定は Batch type Fixed Batch size 2ndash  例例) 30ずつRolling Deploy

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 55: Application Deployment on AWS

Elastic Beanstalkにおけるインスタンス置換えbull  Rolling Updates

ndash  アプリケーションデプロイではなくインスタンスの置換えbull  内部的にはCloudFromationのUpdate Policyを利利用

ndash  VPC設定やAuto ScalingのLaunch Configurationの設定変更更

一度度に入れ替えるインスタンスの最大数

最低限維持すべきインスタンス数

各Update操作間のPause時間

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 56: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 57: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 58: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

現 現 現 現 新 新 新 新

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 59: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  BlueGreen Deploy

新 新 新 新

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 60: Application Deployment on AWS

v11 v11

v11 v11

v11 v11

v11 v11

v12

v12

v121

v121

v122

v122

DNS(Amazon route 53)

Webサーバー群(Amazon EC2)

データベースサーバ群(Amazon RDS)

ロードバランサー

90 5 3 2

Elastic Beanstalkにおけるデプロイの選択肢

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 61: Application Deployment on AWS

Elastic Beanstalkにおけるデプロイの選択肢bull  Rolling Deploy BlueGreen Deploy

ndash  Rolling Deploybull  新しくサーバーを立立てるわけではないのでデプロイにかかる時間が短い

bull  新しいバージョンにバグ等があった場合にRollbackに手間がかかる

ndash  BlueGreenbull  新しくサーバーを立立てるので環境作成に時間がかかるbull  Rollbackが容易易bull  Elastic BeanstalkのDNSのTTLはデフォルト60秒であるが接続元のデバイスによってDNSがキャッシュされてしまうような場合デプロイが反映されない場合がある

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 62: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  EB CLIでモニタリング$ eb health -‐‑‒-‐‑‒refresh

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 63: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 64: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソール上でモニタリング

カスタマイズ可能

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 65: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 66: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  EnvironmentHealth

ndash OKndash Warningndash Degradedndash  Severendash  Infondash Pendingndash Unknown

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 67: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 該当のインスタンスの数を表示bull  InstancesSeverebull  InstancesDegradedbull  InstancesWarningbull  InstancesInfobull  InstancesOkbull  InstancesPendingbull  InstancesUnknownbull  InstancesNoData

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 68: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス リクエスト総数および各レスポンスコード毎の数bull  ApplicationRequestsTotalbull  ApplicationRequests5xxbull  ApplicationRequests4xxbull  ApplicationRequests3xxbull  ApplicationRequests2xx

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 69: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス xパーセントの完了了にかかった平均時間bull  ApplicationLatencyP10bull  ApplicationLatencyP50bull  ApplicationLatencyP75bull  ApplicationLatencyP85bull  ApplicationLatencyP90bull  ApplicationLatencyP95bull  ApplicationLatencyP99bull  ApplicationLatencyP999

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 70: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクスbull  LoadAverage1min 1分間のLoad値の平均値bull  InstanceHealth 現在のインスタンスのヘルスステータスbull  RootFilesystemUtil 使用ディスク容量量の割合

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 71: Application Deployment on AWS

Elastic Beanstalkにおけるモニタリングbull  マネージメントコンソールでの拡張ヘルスレポート

ndash  メトリクス 過去1分間のCPU使用状況bull  CPUIrqbull  CPUUserbull  CPUIdlebull  CPUSystembull  CPUSoftirqbull  CPUIowaitbull  CPUNice

httpdocsawsamazoncomja_jpelasticbeanstalklatestdghealth-‐‑‒enhanced-‐‑‒cloudwatchhtmlhealth-‐‑‒enhanced-‐‑‒cloudwatch-‐‑‒metrics

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 72: Application Deployment on AWS

時間指定のスケーリングbull  Time-‐‑‒based Scaling

ndash  時間設定でスケールアウトインを制御

本番運用の際はバージョンを明記しましょう

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 73: Application Deployment on AWS

Environment間リンク機能bull  SQSのキューを介して疎結合なアーキテクチャを実現

ndash  Environment Manifest (envyaml)

本番運用の際はバージョンを明記しましょう

AWSConfigurationTemplateVersion 1100EnvironmentLinks WORKERQUEUE worker

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 74: Application Deployment on AWS

AWS OpsWorks

bull  特徴 (httpawsamazoncomjpopsworks)ndash  Chefのレシピを使ってデプロイや運用タスクを自動化可能

ndash  ライフサイクルイベントにより動的な構成変更更への対応が可能

ndash  継続的な構成管理理bull  価格体系 (httpawsamazoncomjpelasticloadbalancingpricing)

ndash  AWS OpsWorks自体の利利用は無料料ndash  (OpsWorksエージェントをオンプレミスサーバで利利用する場合はその起動時間)

アプリケーションのデプロイ管理理サービス

AWS OpsWorks13

スタック

LBレイヤー

Webレイヤー

DBレイヤー

EC2インスタンス上のOpsWorksエージェント

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 75: Application Deployment on AWS

AWS OpsWorkssect アプリケーションのライフサイクル管理理サービスsect  デプロイを頻繁に早くセキュアに実行行可能sect  スケーラブルで複雑なインフラストラクチャの構成を管理理モデル化自動化することが可能

sect  ビルトイン構成を使って簡単に開始可能sect  追加コストは不不要

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 76: Application Deployment on AWS

OpsWorksインスタンスの構築例例

インスタンス起動

ソフトウェアインストール構成用のChefレシピを実行行

アプリケーションのデプロイ用のChefレシピを実行行

OpsWorksのAPIで自動化が可能

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 77: Application Deployment on AWS

なぜOpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行行可能か

OpsWorksインスタンス内でOpsWorksエージェントがインストール動作しているため

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 78: Application Deployment on AWS

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 79: Application Deployment on AWS

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行行された一連のコマンドを取得AgentがChef Clientのローカルモードでレシピを実行行

EC2インスタンス上のOpsWorks Agent

インスタンスにSSH RDPログインも可能Chef Server Chef Clientの構築は不不要お客様はChefのレシピの作成に集中可能

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 80: Application Deployment on AWS

OpsWorks利利用の流流れ

User AWS Management Console

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 81: Application Deployment on AWS

Stack

OpsWorks利利用の流流れ

User AWS Management Console

構成情報(JSON)

①スタックの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 82: Application Deployment on AWS

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

構成情報(JSON)

①スタックの作成

②レイヤーの作成

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 83: Application Deployment on AWS

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 84: Application Deployment on AWS

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ

構成情報(JSON)

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 85: Application Deployment on AWS

Stack

OpsWorks利利用の流流れ

User AWS Management Console

Load Balancerレイヤー

App Serverレイヤー

Databaseレイヤー

レシピ

レシピ

レシピ DB

WebApp

LB

①スタックの作成

②レイヤーの作成

③レシピの設定(Appの設定)④レイヤーにemsp インスタンス追加起動

⑤ライフサイクルイベントによりレシピが自動実行行される

構成情報(JSON)

WebApp

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 86: Application Deployment on AWS

スタックとは

bull  OpsWorksのトップエンティティbull  属する全インスタンスの構成を管理理

ndash  OSの種類リージョンインスタンスのIPアドレスなどbull  カスタムレシピを保存する任意のリポジトリを指定可能bull  VPC内部に作成可能bull  スタックごとに構成情報をJSON形式で保持

ndash  構成変更更のたびにJSONが更更新されるndash  ChefレシピからJSON内の変数を読み込み可能

bull  スタックをコピー可能ndash  リージョン間でも可能

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 87: Application Deployment on AWS

レイヤーとは

bull  インスタンス構築のための青写真(設計図)

レシピを指定してパッケージインストールなどの必要な処理理を定義

カスタムレシピも定義可能

追加のEBSボリュームの指定RAID指定も可能

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 88: Application Deployment on AWS

ビルトインレイヤーの種類

bull  Load Balancerndash  HAProxy(ELBは各レイヤーに個別にアタッチ可能)

bull  App Serverndash  Static Web Serverndash  Rails App Serverndash  PHP App Serverndash  Nodejs App Serverndash  Java App Serverndash  AWS Flow (Ruby)

bull  DBndash  MySQLndash  RDS

bull  ECS(EC2 Container Service) Cluster

bull  Otherndash  Memcachedndash  Gangliandash  Custom

ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)

NEW

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 89: Application Deployment on AWS

インスタンスとは

bull  アプリケーションを提供するためのEC2インスタンスのこと

bull  起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定

bull  インスタンス内部にOpsWorks Agentが動作している

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 90: Application Deployment on AWS

インスタンスのスケーリングタイプ

bull  インスタンスを(自動)追加起動終了了する方法として以下の3パターンがあるndash  247 インスタンス

bull  常時稼働ndash  負荷ベースのインスタンス

ndash  時間ベースのインスタンス

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 91: Application Deployment on AWS

Appとはbull  アプリケーションサーバーにデプロイするアプリケーションのこと

bull  利利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)ndash  Ruby on Rails PHP Nodejs(JavaScript) Static(HTML) Java AWS Flow(Ruby) Other

bull  サポートするリポジトリndash  Git Subversion HTTP archive S3 Archive Otherndash  GithubやBitBucketも使用可能

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 92: Application Deployment on AWS

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行行する

Setup Setupのレシピを実行行する(Setupを実行行するとDeployもその後で実行行される)

Configure Configureのレシピを実行行する

AWS Management Console

管理理者 AWS OpsWorks InstancesExecute Recipesコマンド等を実行行

OpsWorksエージェントがChefレシピを実行行

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 93: Application Deployment on AWS

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 94: Application Deployment on AWS

OpsWorksemsp Auroraの接続先をClusterエンドポイントへ

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 95: Application Deployment on AWS

AWS CloudFormationbull  EC2やELBといったAWSリソースの環境構築を設定ファイル(テンプレート)を元に自動化できるサービス

bull  テンプレートを自由に作成できるため自分好みのシステム構成を自動的に構築できる

bull  テンプレートには起動すべきリソースの情報をJSONフォーマットのテキスト形式で記述する

テンプレートベースのプロビジョニング

インフラをコード化

宣言柔軟性 簡単に利利用可能

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 96: Application Deployment on AWS

スタック

S3

CloudWatch

Elastic Load Balancing

EC2 EC2Auto Scaling

SNS

テンプレート

CloudFormation

テンプレートに基づき各リソースが起動

AWS CloudFormationのイメージ

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 97: Application Deployment on AWS

AWS CloudFormationがサポートする主なサービス

Oslash Amazon EC2Oslash Amazon EC2 Container ServiceOslash AWS Lambda (including event sources ndash New)Oslash Auto Scaling (including Spot Fleet -‐‑‒ New)

Oslash Amazon VPCOslash  Elastic Load BalancingOslash Amazon Route 53Oslash Amazon CloudFront

Oslash Amazon RDSOslash Amazon RedshiftOslash Amazon DynamoDBOslash Amazon ElastiCacheOslash Amazon RDS for Aurora (New)Oslash Amazon S3

Oslash AWS IAM (including managed policies)Oslash  Simple AD (New)

Oslash Amazon KinesisOslash Amazon SNSOslash Amazon SQS

Oslash AWS CloudFormationOslash AWS CloudTrailOslash Amazon CloudWatch

Oslash AWS Data PipelineOslash AWS Elastic Beanstalk Oslash AWS OpsWorks Oslash AWS CodeDeploy (New)

Oslash Amazon WorkSpaces (New)

httpdocsawsamazoncomja_jpAWSCloudFormationlatestUserGuideaws-template-resource-type-refhtml

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 98: Application Deployment on AWS

AWS CloudFormationテンプレートの例例①

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket

HelloBucketというAmazon S3バケットを作るテンプレート

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 99: Application Deployment on AWS

AWS CloudFormationテンプレートの例例②

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 100: Application Deployment on AWS

AWS CloudFormationテンプレートの例例③

AWSTemplateFormatVersion 2010-‐‑‒09-‐‑‒09 Resources HelloBucket Type AWSS3Bucket Properties AccessControl PublicRead WebsiteConfiguration IndexDocument indexhtml ErrorDocument errorhtml

HelloBucketというAmazon S3バケットを作るテンプレートemsp emsp darrAccessControlに「PublicRead」を指定emsp emsp darrWebサイトとして公開するためにindexhtmlとErrorDocumentの設定を行行う

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 101: Application Deployment on AWS

ではどういう時に何を使えば良良いの

bull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 102: Application Deployment on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 103: Application Deployment on AWS

ではどういう時に何を使えば良良いのbull  Accelerating Software Delivery on AWS

Lean Startupメソッドにおいて鍵となるのは適切切な機能を持った適切切なプロダクトをbuild-‐‑‒measure-‐‑‒learnフィードバックループと共にイテレーティブなプロセスで開発し続けることでこのプロセスの中心はminimum viable product(MVP)である

限られた機能しかもたいなプロダクトでもそれをShipすることでアーリーアダプターの元に届き少なくとも何人かのユーザーからは共鳴を受けユーザーはお金金を払いユーザーからのフィードバックを受け取れるようになる

自動化+素早いデリバリ

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 104: Application Deployment on AWS

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 105: Application Deployment on AWS

ではどういう時に何を使えば良良いのbull  パイプラインの自動化

ndash  Githubにコミットされたらパイプラインをキック

ndash  Jenkinsを使ってビルド

ndash  Staging環境にデプロイしてUATStressテスト

ndash  Production環境へRolling Deploy

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 106: Application Deployment on AWS

AWS CodePipeline

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 107: Application Deployment on AWS

開発のスタイルにあったワークフローを自由に例例えば

ソースコード

ビルド ユニットテスト

ステージデプロイ

本番デプロイ

A機能画面テスト

CodePipeline

ステージデプロイ

B機能画面テスト

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 108: Application Deployment on AWS

開発のスタイルにあったワークフローを自由に

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 109: Application Deployment on AWS

AWS CodePipeline パートナー連携

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 110: Application Deployment on AWS

Custom Action

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1 エージェントでポーリング2 ジョブの詳細

4 ビルドの実行行

3 ジョブのAck

5 ジョブの成功

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 111: Application Deployment on AWS

AWS CodePipelinebull  Source -‐‑‒gt Build -‐‑‒gt Load Testing

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 112: Application Deployment on AWS

AWS CodePipelinebull  Load Testing w Apica

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action

Page 113: Application Deployment on AWS

AWS CodePipelineとの連携bull  Elastic Beanstalk

ndash  ビルトインサポートndash  プロビジョニングも含めてお任せ

bull  CodeDeployndash  ビルトインサポートndash  プロビジョニングは自分で

bull  OpsWorksndash  EBのスタックに合わない場合などndash  ビルトインサポート無いのでcustom action