Application Deployment on AWS
-
Upload
eiji-shinohara -
Category
Technology
-
view
2.255 -
download
1
Transcript of 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
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
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
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
デプロイとビルドプロビジョニングの違い
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
デプロイとビルドプロビジョニングの違い
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
よくあるデプロイ手法と課題
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
デプロイの効率率率化安定化
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
サンプルアプリケーション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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
サンプルアプリケーションのデプロイ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
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
デプロイしたサンプルアプリケーションの詳細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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
時間指定のスケーリング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
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
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
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
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
なぜ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
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
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
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
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
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
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
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
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
スタックとは
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
レイヤーとは
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
ビルトインレイヤーの種類
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
インスタンスとは
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
インスタンスのスケーリングタイプ
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
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
スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行行可能
スタックコマンド 内容
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
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
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
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
スタック
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
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
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
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
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
ではどういう時に何を使えば良良いの
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
ではどういう時に何を使えば良良いの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
ではどういう時に何を使えば良良いの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
ではどういう時に何を使えば良良いの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
ではどういう時に何を使えば良良いの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
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
開発のスタイルにあったワークフローを自由に例例えば
ソースコード
ビルド ユニットテスト
ステージデプロイ
本番デプロイ
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
開発のスタイルにあったワークフローを自由に
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
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
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
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
AWS CodePipelinebull Load Testing w Apica
AWS CodePipelineとの連携bull Elastic Beanstalk
ndash ビルトインサポートndash プロビジョニングも含めてお任せ
bull CodeDeployndash ビルトインサポートndash プロビジョニングは自分で
bull OpsWorksndash EBのスタックに合わない場合などndash ビルトインサポート無いのでcustom action
AWS CodePipelineとの連携bull Elastic Beanstalk
ndash ビルトインサポートndash プロビジョニングも含めてお任せ
bull CodeDeployndash ビルトインサポートndash プロビジョニングは自分で
bull OpsWorksndash EBのスタックに合わない場合などndash ビルトインサポート無いのでcustom action