【AWS Black Belt Online Seminar】
AWS Elastic Beanstalk
アマゾンウェブサービスジャパン株式会社
ソリューションアーキテクト 江川大地
2017.01.11
Easy to begin, Impossible to outgrow
Who am I ?
• 名前:江川 大地
• 所属• アマゾン ウェブ サービス ジャパン株式会社• ソリューションアーキテクト
• 経歴• データベースエンジニア• AWS テクニカルトレーナー
• 好きなサービス• AWS サポート
• 好きなデータベース• PostgreSQL
2
本資料では2017年1月11日時点のサービス内容および価格についてご説明しています。最新の情報はAWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。
資料作成には十分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に相違があった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。
内容についての注意点
AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided.
価格は税抜表記となっています。日本居住者のお客様が東京リージョンを使用する場合、別途消費税をご請求させていただきます。
3
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
AWS Elastic Beanstalk の読み方
http://en.hatsuon.info/word/beanstalk
http://ejje.weblio.jp/content/beanstalk
• 読み方• ビーンストーク• ビーンスターク
5
$ aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text "AWS Elastic Beanstalk"
AWS Elastic Beanstalk とは
• 特徴 (http://aws.amazon.com/jp/elasticbeanstalk/)
速く簡単にアプリケーションをデプロイ可能 インフラストラクチャの準備&運営からアプリ
ケーションスタックの管理まで自動化 Auto Scaling によりコストを抑えながらスケー
ラビリティを確保 Java, PHP, Ruby, Python, Node.js, .NET,
Docker, Goに対応
• 価格体系 (http://aws.amazon.com/jp/elasticbeanstalk/pricing/)
追加料金なし アプリケーションの保存、実行に必要なAWSリ
ソース (EC2, S3, RDS, ELB など) に対してのみ課金
定番構成の構築・アプリデプロイの自動化サービス
6
ウェブサーバー環境
Elastic Beanstalk が構築する定番構成と対応プラットフォーム
ワーカー環境
7
Auto scaling Group Auto scaling Group
Amazon S3
Your Code(war/zip)
Ruby
Python
Node.js
.NET
PHP
Java
Go
yourenv.elasticbeanstalk.com
Elastic Beanstalk vs. Do It Yourself
On-instance configuration
Your code
HTTP Server
Application Server
Language Interpreter
Operating System
Host
8
On-instance configuration
Your code
HTTP Server
Application Server
Language Interpreter
Operating System
Host
アプリケーションの開発”だけ”にフォーカス
Elastic Beanstalkにお任せ!
Elastic Beanstalk vs. Do It Yourself
9
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
AWS Elastic Beanstalk の構成要素(1/3)
11
アプリケーション
環境(Environment)
URL 環境設定
環境(Environment)
URL 環境設定
環境(Environment)
URL 環境設定
VersionRepository
Your code(War/Zip)
Your code(War/Zip)
Your code(War/Zip)
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.components.html
AWS Elastic Beanstalk の構成要素(2/3)
• アプリケーション
トップレベルの論理単位
バージョン、環境、環境設定が含まれている入れ物
• バージョン(Application Version)
デプロイ可能なコード
Amazon S3 上でのバージョン管理
異なる環境に異なるバージョンをデプロイ可能
12詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.components.html
AWS Elastic Beanstalk の構成要素(3/3)
• 環境
各環境(ウェブサーバ、ワーカー) に応じて構築されるインフラ環境
バージョン(ソースコード)をデプロイ
例)Webサーバ環境:ELB + EC2(コードがデプロイされる)
• 環境設定
その環境に関連するリソースの動作を定義する設定パラメータ
例)EC2 のインスタンスタイプ、Auto Scaling の設定など
13詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.components.html
環境のタイプ
• ロードバランシング, Auto Scaling 環境
高い可用性と伸縮自在性を兼ね備えた構成
ウェブサーバ環境:ELB + Auto Scaling
ワーカー環境:SQS + Auto Scaling
• シングルインスタンス環境
EC2 1台構成(Auto Scaling で max, min が1に設定されている )
開発環境などの構築のために低コストで構築可能
14詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features-managing-env-types.html
EIP
ウェブサーバー環境
環境の種類(Tier)
ワーカー環境
15
Auto scaling Group Auto scaling Group
Amazon S3
Your Code(war/zip)
Ruby
Python
Node.js
.NET
PHP
Java
Go
yourenv.elasticbeanstalk.com
ウェブサーバー環境(Web Server Tier)
• スケーラブルなウェブアプリケーションを実行 ELB+ Auto Scalingでスケーラブルな環境- ホストマネージャー(HM)がデプロイ/監視などを自動的に実施
環境ごとに DNS 名を付与
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.concepts.architecture.html16
ワーカー環境(Worker Tier)
• バッチアプリケーションをElastic Beanstalkで SQS + Auto Scalingでスケーラブルなバッチ処理基盤- Scale-InしてもメッセージはSQSに残るため後から処理
Sqsd(deamon
)
Elastic Beanstalk
Application
http://localhost:80/xxx
EC2 Instance
Auto Scaling group
CloudWatch
Auto Scaling
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html17
ワーカー環境(Worker Tier)
• Workerホスト内でWebアプリケーションが動作 Sqsd- Workerホスト内で動作するデーモン- Webアプリからの応答
200 OKの場合→SQSからメッセージを削除(DeleteMessage) 200 OK以外の場合→VisibilityTimeout(SQSの設定)後にSQS
からメッセージが取得可能(リトライ) 応答無し→Inactivity Timeout(Elastic Beanstalkの設定)後
にSQSからメッセージが取得可能(リトライ)- Dead Letter Queue
何度実行しても200 OK以外でSQSのキューに残り続けてしまうメッセージを別のキュー(Dead Letter Queue)に移動
18
ワーカー環境(Worker Tier)
• 定期的なタスク実行 cron.yaml- 例) 12時間ごとにbackupジョブを実行
毎日午後11時にauditジョブを実行
version: 1cron:- name: "backup"
url: "/backup" schedule: "0 */12 * * *"
- name: "audit"url: "/audit"schedule: "0 23 * * *"
19
複数環境を利用する例
20
V1.1
アプリケーション
開発環境 ステージング環境 本番環境
Python 3.4
AMI ID ami-abcd2222
Python 2.7
AMI ID
ami-abcd1111
Python 2.7
AMI ID
ami-abcd1111
V1.2
アプリケーション、環境を構築する方法
1. AWS Management Console
2. 各種 IDE ツール AWS Toolkit for Eclipse(Java アプリケーションの構築に対応)
- http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/java-eclipsetoolkit.html
AWS Toolkit for Visual Studio(.Net アプリケーションの構築に対応)- http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/dotnet-toolkit.html
3. 各種 SDK, AWS CLI API と一対一な操作が可能
- http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/ (AWS CLI)
4. EB Command Line Interface(EB CLI) ハイレベルな操作が可能なコマンドラインツール
頻繁にデプロイが繰り返される環境下での自動化に便利- http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3.html21
EB CLI による環境構築のウォークスルー
• Node.js + Express な会員登録アプリケーション
ソースコードは↓から入手可能
https://github.com/awslabs/eb-node-express-sample
22
サンプルコードのデプロイ手順
1. EB CLIのインストール:$ pip install --upgrade awsebcli
2. サンプルコードのダウンロード:$ git clone https://github.com/awslabs/eb-node-express-sample.git
3. Elastic Beanstalk アプリケーションの作成:$ eb init
4. プロンプトに従って設定(利用するリージョンなど)
5. 環境作成、コードのデプロイ:$ eb create
23
eb init によるアプリケーション作成とデフォルト環境設定の定義
• 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):
24
• eb initのプロンプト: アプリ名/スタック/SSH/Keypair
Enter Application Name(default is "eb-node-express-sample"):
It appears you are using Node.js. Is this correct?(y/n): yDo you want to set up SSH for your instances?(y/n): y
Select a keypair.1) mykey2) [ Create new KeyPair ](default is 2): 1
25
eb init によるアプリケーション作成とデフォルト環境設定の定義
• eb initのプロンプト: スタック
Select a platform.1) Node.js2) PHP3) Python4) Ruby5) Tomcat6) IIS7) Docker8) Multi-container Docker9) GlassFish10) Go11) Java
26
eb init によるアプリケーション作成とデフォルト環境設定の定義
eb create による環境作成
• eb createのプロンプト: Environment/CNAME/Deploy
Enter Environment Name(default is eb-node-express-sample): Enter DNS CNAME prefix(default is eb-node-express-sample):
Creating application version archive "5529".Uploading eb-node-express-sample/5529.zip to S3. This may take a while.Upload Complete.Environment details for: eb-node-express-sampleApplication name: eb-node-express-sampleRegion: us-west-2Deployed Version: 5529Environment ID: e-ufxx79fmkc27
作成した環境の確認
• EB CLIを使ってブラウザで表示$ eb open
28
コードの改修とデプロイ
• UIを変更$ vim views/index.ejs$ git commit –am “modify UI”$ eb deploy$ eb open
29
改修結果の確認
• サンプルアプリケーションを動かす
30
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
デプロイメントに関する用語
• In Place Deployment(Rolling Deploy) インスタンスは現行環境のものをそのまま利用し、
新しいリビジョンのコードをその場で反映させる
• Blue/Green Deployment(Red/Black Deployment) 新しいリビジョンのコードを、新しいインスタンスに反映させ、
インスタンスごと入れ替える
32 参考:http://aws.typepad.com/sajp/2015/12/what-is-blue-green-deployment.html
Elastic Beanstalk ではどちらの方式も簡単に実現可能
Elastic Beanstalkにおけるデプロイの選択肢
• デプロイポリシー に従った既存環境へのデプロイ All at once Rolling Rolling with additional batch Immutable
• URL Swap による既存環境と新環境の切替
• Amazon Route 53 を利用した既存環境と新環境の切替
33
In Place
In Place & Blue/Green
Blue/Green
参考:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html
デプロイポリシーを理解する(1/7)
All at once Rolling
Rolling with additional batch Immutable
現 現 現
現 現 現 現 現 現
バッチタイプ:固定バッチサイズ:2台
34
現 現 現
バッチタイプ*:固定バッチサイズ*:2台
*バッチタイプ、バッチサイズについては後述
参考:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(2/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新 現
現 現 現 現 現 現新
35
新新
$ eb deploy
$ eb deploy
$ eb deploy $ eb deploy
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(3/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新 現
現 現 現 現 現 現新
36
新新
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(4/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新
新 現 現 現 現 現
37
新 新 新新 新
新
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(5/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新 新
新 現 現 現 現 現
38
新 新 新新 新
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(6/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新 新
新 現 現 現
39
新 新 新新 新
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイポリシーを理解する(7/7)
All at once Rolling
Rolling with additional batch Immutable
新 新 新 新 新 新
新
40
新 新 新新 新
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
バッチタイプ:固定バッチサイズ:2台
バッチタイプ*:固定バッチサイズ*:2台
【凡例】
ヘルスチェックが成功し、リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
デプロイに関する設定
• バッチタイプ: 一度にデプロイを反映させる台数(バッチ)をどう決めるかを設定
割合(%): 現在起動中のインスタンスの合計数に対する割合で構成 固定: 決まった台数を絶対値で指定
• バッチサイズ: 各バッチにデプロイするインスタンスの数または割合
• 例)バッチタイプ、割合(%), バッチサイズ 25% で設定
41詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html#environments-cfg-rollingdeployments-console
* バッチタイプ、バッチサイズは Rolling, Rolling with additional batch のときのみ設定可能
URL Swap, Route 53 による環境切替を理解する(1/6)
42
URL Swap Amazon Route 53
現 現 現現 現 現
Elastic Beanstalk Environment(環境)
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com xxx.elasticbeanstalk.com
Name Type Value
example.com Alias xxx.elastcbeanstalk.com
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
URL Swap, Route 53 による環境切替を理解する(2/6)
43
URL Swap Amazon Route 53
現 現 現現 現 現
Elastic Beanstalk Environment(環境)
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
Name Type Value
example.com Alias xxx.elastcbeanstalk.com
$ eb create $ eb create
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
URL Swap, Route 53 による環境切替を理解する(3/6)
44
URL Swap Amazon Route 53
現 現 現現 現 現
Elastic Beanstalk Environment(環境)
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
Name Type Value
example.com Alias xxx.elastcbeanstalk.com
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
URL Swap, Route 53 による環境切替を理解する(4/6)
45
URL Swap Amazon Route 53
現 現 現現 現 現
Elastic Beanstalk Environment(環境)
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
Name Type Value
example.com Alias xxx.elastcbeanstalk.com
example.com Alias yyy.elastcbeanstalk.com
$ eb swap
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
URL Swap, Route 53 による環境切替を理解する(5/6)
46
URL Swap Amazon Route 53
現 現 現現 現 現
Elastic Beanstalk Environment(環境)
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
Name Type Value
example.com Alias yyy.elastcbeanstalk.com
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
URL Swap, Route 53 による環境切替を理解する(6/6)
47
URL Swap Amazon Route 53
新 新 新
Elastic Beanstalk Environment(環境)
xxx.elasticbeanstalk.com
新 新 新
Elastic Beanstalk Environment(環境)
yyy.elasticbeanstalk.com
Name Type Value
example.com Alias yyy.elastcbeanstalk.com
$ eb terminate $ eb terminate
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
v1.1 v1.1
v1.1 v1.1
v1.1 v1.1
v1.1 v1.1
v1.2
v1.2
v1.2.1
v1.2.1
v1.2.2
v1.2.2
DNS(Amazon route 53)
Webサーバー群(Amazon EC2)
データベースサーバ群(Amazon RDS)
ロードバランサー
90% 5% 3% 2%
Route 53 の加重ラウンドロビンの利用
48詳細:http://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-weighted
加重ラウンドロビンの利用により、新バージョンのコードを少しずつ試すことが可能
デプロイ方式まとめ
方式 失敗時の影響 時間 ダウンタイム ELB 暖気 DNS切替 ロールバック デプロイ先
All at onceダウンタイム発生
🕐ダウンタイム発生
不要 無し 再デプロイ 既存
Rolling1バッチ分だけサービスアウト
🕐🕐(バッチサイズに依存)
無し 不要 無し 再デプロイ 既存
Rolling withadditional
batch
最初のバッチであれば最小
🕐🕐🕐(バッチサイズに依存)
無し 不要 無し 再デプロイ 新規+既存
Immutable 最小 🕐🕐🕐🕐 無し 不要 無し 再デプロイ 新規
URL swap 最小 🕐🕐🕐🕐 無し 必要 有り URL swap 新規
Route53 による切替
最小 🕐🕐🕐🕐 無し 必要 有り URL swap 新規
49 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html
デプロイ戦略
• デプロイ対象について考える メジャーバージョンが変更となるような大きな改修なのか 軽微なバグフィックスなのか
• 各方式のトレードオフを考える デプロイにかかる時間 既存環境への影響- ダウンタイムの有無- 一時的に利用可能な台数
ELB 暖気の要否 DNS キャッシュ Rollback がどの程度容易にできるか
50
環境に対する設定変更(1/2)
• 環境設定の変更: 環境とその環境に関連付けられているリソースの設定変更も可能
例)- インスタンスタイプの変更- ELB のヘルスチェック設定変更- デプロイポリシーの変更 etc
51
環境に対する設定変更(2/2)• 環境設定の変更によりインスタンスの置換が必要な場合も
様々な方式から選択可能 無効:All at Once でアップデート ヘルスにもとづくローリング:ヘルスチェックの結果が正常なら
次のバッチをアップデート 時間にもとづくローリング:指定した時間が経過したら
次のバッチをアップデート Immutable: 新規インスタンスを作成して入替
52 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environments-updating.html
プラットフォームの更新• Beanstalk では定期的なプラットフォームの更新がリリース
例) 新バージョンの AMI の採用 OS, Web, App Server のマイナーアップグレード バグフィックス etc
53 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.platform.upgrade.html
2:メジャーバージョン1:マイナーバージョン7:パッチバージョン
AWS Elastic Beanstalk - Release Note
マネージドプラットフォーム更新
• 自動的に最新のバージョンに更新するよう設定可能
メンテナンスウィンドウの指定
- 更新を行う時間帯を週次で設定(例:毎週火曜日の6:00 UTC 〜)
更新対象のバージョン選択- [マイナー&パッチ] or [パッチのみ]
更新方式- Immutable 方式で実施
54 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-platform-update-managed.html
※ 本機能は Windows (.Net)環境ではサポートされていません
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
環境設定
• 環境設定
その環境に関連するリソースの動作を定義する設定パラメータ
例)EC2 のインスタンスタイプ、Auto Scaling の設定など
56
$ eb config
::
settings:AWSEBAutoScalingScaleDownPolicy.aws:autoscaling:trigger:
LowerBreachScaleIncrement: ’-2'AWSEBAutoScalingScaleUpPolicy.aws:autoscaling:trigger:UpperBreachScaleIncrement: ‘2'
AWSEBCloudwatchAlarmHigh.aws:autoscaling:trigger:UpperThreshold: '6000000’
AWSEBCloudwatchAlarmLow.aws:autoscaling:trigger:BreachDuration: '5’::
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers.html
環境設定のカスタマイズ
• 各リソースに対してデフォルトの環境設定が定義
• 以下のいずれかの方法でカスタマイズ可能
環境作成時に直接設定
- EB CLI: eb create コマンドのオプションを参照http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb3-create.html#eb3-createoptions
- マネジメントコンソール:図を参照
保存済み設定
.ebextensions
57 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/command-options.html
保存済み設定
• 起動中の環境で使用している環境設定を保存可能
Amazon S3 に設定ファイルとして保存
• 保存した環境設定を再利用可能
環境作成時に指定
起動中の環境に適用
58 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-configuration-savedconfig.html
ステージング環境で使用している環境設定を本番環境でも使用したい
$ eb config save
.ebextensions
• 環境で使用しているリソースの高度なカスタマイズが可能
• 環境に対する様々な操作を自動化&集約可能
• ユースケース
カスタム環境変数の指定
ソフトウェアインストール
インストールしたソフトウェアの実行
デフォルトの環境には用意されていないAWS リソース(e.g. DynamoDB など)の作成
59 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/ebextensions.html
デフォルトの環境設定にはないカスタマイズを
行いたい
.ebextensions の設定方法
• ソースルートで .ebextensions フォルダに設定ファイルを追加 設定ファイルは複数配置可能
60 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/ebextensions.html
~/workspace/my-app/|-- .ebextensions| |-- environmentvariables.config| `-- healthcheckurl.config|-- .elasticbeanstalk| `-- config.yml|-- index.php
• packages: yumやrpmを利用したパッケージのインストール
• sources: 外部からのアーカイブ(tarなど)をダウンロードして指定した場所に展開
• files: 指定した場所にファイルを作成
• services: serviceを起動したり、起動設定を変更したりする
• users/groups: 任意のユーザー/グループを作成
• commands: デプロイ処理前に実行すべきコマンドやスクリプトを指定
例)OSやミドルウェアの設定変更
• container_commands:新バージョンの展開後に実行すべきコマンドやスクリプトを指定
例)アプリ内のリソースや設定の環境に応じた変更など
• option_settings: 環境変数の設定
• Resources: 追加のリソースを定義
例) SQSのキュー、DynamoDBのテーブル、CloudWatchのアラーム
.ebextensions で実行可能な操作
61 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/ebextensions.html
パッケージインストールとコマンド実行の例
• 例:サーバ監視のためにNew Relicエージェントをインストール
packages:yum:newrelic-sysmond: []
rpm:newrelic:
http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
commands:configure_new_relic:command: nrsysmond-config --set license_key=XXXXX
.ebextensions/01newrelic.config
62
.ebextensions Tips
• セクション毎にファイルを分割するのを推奨 大きいファイルはメンテナンスが大変
※ 設定ファイルはアルファベット順に処理される
• インストールするパッケージのバージョンを明記 インスタンスによって異なるバージョンになることを防止
• カスタム AMI とのトレードオフを検討 AWS Elastic Beanstalk 用のカスタム AMI :
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.customenv.html
63
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
Elastic Beanstalkにおけるモニタリング
• 基本(ベーシック)ヘルスレポート 環境のヘルスステータス ELB のヘルスチェック CloudWatch メトリクス
• 拡張ヘルスレポート OS レベルのメトリクス アプリケーションレベルの
メトリクス
65 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environments-health.html
拡張ヘルスレポート - 主なメトリクス
• EnvironmentHealth• インスタンスの状態• リクエスト総数および各レスポンスコード毎の数• xパーセントの完了にかかった平均時間• LoadAverage1min: 1分間のLoad値の平均値• InstanceHealth: 現在のインスタンスのヘルスステータス• RootFilesystemUtil: 使用ディスク容量の割合• CPU使用状況詳細
66
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/health-enhanced-cloudwatch.html#health-enhanced-cloudwatch-metrics
Elastic Beanstalkにおけるモニタリング
• EB CLIでモニタリング$ eb health --refresh
67 詳細:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-health.html
Elastic Beanstalkにおけるモニタリング
• マネージメントコンソール上でモニタリング
68 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-health-console.html
CloudWatch Logsを使ってログ監視
CloudWatch Logs Agentを追加する設定ファイル- Tomcat (Java)向け- Apache (PHP and Python)向け- Nginx (Ruby, Node.js, and Docker)向けCloudWatch Logsへの書き込み権限はIAM Roleで
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html69
提供されるCloudWatch Logs Agent設定ファイル
• cwl-setup.config CloudWatch Logs agentを各EC2インスタンスにインストール 設定ファイルgeneral.confを作成 修正なしで利用可能
• cwl-webrequest-metrics.config どのファイルを監視するかを設定 CloudWatch Logs Agentが適用するMetrics Filterを指定 Alarmの条件や通知先Amazon SNSのTopicなどを指定 カスタムログや追加のAlarm設定などがあれば必要に応じて修正して利用
• eb-logs.config CloudWatch Logs Agentが出力するログファイルのローテーションなどの設定 修正なしで利用可能
70
Elastic Beanstalkの便利機能
• SSH接続が必要な場合もEB CLIで$ eb ssh –i xxxx
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
対応プラットフォームごとの参考情報• Java:
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_Java.html
• NET:• http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_NET.html
• PHP:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_PHP_eb.html
• Python:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create-deploy-
python-apps.html
• Ruby:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_Ruby.html
• Node.js:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_nodejs.html
• Go:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_go.html
• Docker:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker.html73
Elastic BeanstalkのDockerサポート
• Single Container EC2インスタンスの中で単一のDockerコンテナを実行 Elastic Beanstalkの標準的であらかじめ定義された設定の活用
Environment
Host Manager
AutoScaling
Nginx (tcp:80)
Docker(tcp: xxxx)
コンテナの起動・終了
Nginxとコンテナとの接続ポートの更新
コマンド
74 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html
Elastic BeanstalkのDockerサポート
• Multi Container EC2 Container Service(ECS)を使用 Dockerrun.aws.jsonを使ったより柔軟な構成が可能に
75 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html
Dockerrun.aws.json による定義(1/3)• 作成したい構成
76
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun
Dockerrun.aws.json による定義(2/3)• Dockerrun.aws.json の記載
{"AWSEBDockerrunVersion": 2,"volumes": [{
"name": "php-app","host": {
"sourcePath": "/var/app/current/php-app"}
},{
"name": "nginx-proxy-conf","host": {
"sourcePath": "/var/app/current/proxy/conf.d"}
} ],
"containerDefinitions": [{
"name": "php-app","image": "php:fpm","essential": true,"memory": 128,"mountPoints": [
{"sourceVolume": "php-app","containerPath": "/var/www/html","readOnly": true
}]
},
Single は 1Multi は 2
PHPアプリ用コンテナとProxyのNginx用コンテナのボリューム(マウントポイント)
PHPアプリ用コンテナのインフラ設定Dockerイメージ指定、メモリ設定、Sourceボリュームからコンテナへのファイルコピー
77
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun
Dockerrun.aws.json による定義(3/3)
"mountPoints": [{
"sourceVolume": "php-app","containerPath": "/var/www/html","readOnly": true
},{
"sourceVolume": "nginx-proxy-conf","containerPath": "/etc/nginx/conf.d","readOnly": true
},{
"sourceVolume": "awseb-logs-nginx-proxy","containerPath": "/var/log/nginx"
}]
}]
}
{"name": "nginx-proxy","image": "nginx","essential": true,"memory": 128,"portMappings": [
{"hostPort": 80,"containerPort": 80
}],"links": [
"php-app"],
Proxy用コンテナのインフラ設定ホスト側の80版ポートとコンテナ側の80版ポートをマッピングして裏のPHPアプリへルーティング
78
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun
Amazon ECR リポジトリのイメージを利用
• Amazon EC2 Container Registryに格納しているDockerイメージもデプロイ可能 Single Container の場合- Dockerrun.aws.json
Multi Container の場合- Dockerrun.aws.json
79 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-images
"Image": {"Name": "account-id.dkr.ecr.us-east-1.amazonaws.com/repository-name:latest","Update": "true"
},
"containerDefinitions": [{"name": "my-image","image": "account-id.dkr.ecr.us-east-1.amazonaws.com/repository-name:latest",
ローカルでのDockerコンテナの実行
• EB CLI で実行可能$ eb local run
- 開発時に便利なコマンド群
$ eb local status
$ eb local open
$ eb local logs
$ eb local runCreating elasticbeanstalk_phpapp_1...Creating elasticbeanstalk_nginxproxy_1...Attaching to elasticbeanstalk_phpapp_1, elasticbeanstalk_nginxproxy_1phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: fpm is running, pid 1phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: ready to handle connections
80
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
設計上の考慮事項
• ステートレス Auto Scaling を利用していることを意識 スケールアウト/インしやすいように構築
• 永続データの格納場所 基本的には Beanstalk 環境外に配置 AWS のマネージドサービスを利用- Amazon S3 - Amazon DynamoDB- Amazon RDS
• 参考資料 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
- http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016
本番運用の際はバージョンを明記しましょう
82 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.concepts.design.html
Environment間リンク機能
• SQSのキューを介して疎結合なアーキテクチャを実現 Environment Manifest (env.yaml)
本番運用の際はバージョンを明記しましょう
AWSConfigurationTemplateVersion: 1.1.0.0EnvironmentLinks:
"WORKERQUEUE": "worker"
83 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-cfg-links.html
時間指定のスケーリング
• Time-based Scaling 時間設定でスケールアウト/インを制御
本番運用の際はバージョンを明記しましょう
84 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.managing.as.html
各種ログの有効活用
• インスタンスログhttp://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.logging.html
85
Tomcatに複数のwarをデプロイ
• warファイルと.ebextensionsを一つのzipに MyApplication.zip- .ebextensions- foo.war -> http://MyApplication.elasticbeanstalk.com/foo- bar.war -> http://MyApplication.elasticbeanstalk.com/bar- ROOT.war -> http://MyApplication.elasticbeanstalk.com/
注意点- ELBのヘルスチェックは一つのwarにしか行われない- 解決策: ヘルスチェック用のwarをデプロイ
各warにアクセスし想定通りのレスポンスが返ってくるかチェック
86 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/java-tomcat-multiple-war-files.html
Alias レコードの利用
• AWS Elastic Beanstalk:Route53 Alias レコードサポート
Elastic Beanstalk環境のURLに対し、Aliasレコードで名前解決可能に
• Amazon Route 53 Alias レコード
Route 53固有の仮想リソースレコード
AWSサービスのエンドポイントのIPアドレスを直接返却(通常はCNAMEを利用)
ALIASレコードを使うメリット
- DNSクエリに対するレスポンスが高速
- Zone Apexが利用可能
本番運用の際はバージョンを明記しましょう
87 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customdomains.html
Release Notes
• 更新情報はリリースノートでチェック https://aws.amazon.com/releasenotes/AWS-Elastic-Beanstalk
88
トラブルシューティングの参考情報
• Developer Guide – トラブルシューティング http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/troubl
eshooting.html
• Beanstalk に関連するリソースのトラーブルシューティング ナリッジセンター
https://aws.amazon.com/jp/premiumsupport/knowledge-center/
89
Agenda
• はじめに
• 構成要素
• デプロイメント
• 環境設定のカスタマイズ
• モニタリング
• Docker Support
• Tips
• まとめ
まとめ – AWS Elastic Beanstalk
• 特徴 (http://aws.amazon.com/jp/elasticbeanstalk/)
速く簡単にアプリケーションをデプロイ可能 インフラストラクチャの準備&運営からアプリ
ケーションスタックの管理まで自動化 Auto Scaling によりコストを抑えながらスケー
ラビリティを確保 Java, PHP, Ruby, Python, Node.js, .NET,
Docker, Goに対応
• 価格体系 (http://aws.amazon.com/jp/elasticbeanstalk/pricing/)
追加料金なし アプリケーションの保存、実行に必要なAWSリ
ソース に対してのみ課金
定番構成の構築・アプリデプロイの自動化サービス
91
環境構築やデプロイメントは eb に任せてHappy Coding!
Webinar資料の配置場所
• AWS クラウドサービス活用資料集 http://aws.amazon.com/jp/aws-jp-introduction/
• AWS Solutions Architect ブログ 最新の情報、セミナー中のQ&A等が掲載されています
http://aws.typepad.com/sajp/
92
公式Twitter/FacebookAWSの最新情報をお届けします
@awscloud_jp
検索
最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを日々更新しています!
もしくはhttp://on.fb.me/1vR8yWm
93
AWSの導入、お問い合わせのご相談
• AWSクラウド導入に関するご質問、お見積り、資料請求をご希望のお客様は、以下のリンクよりお気軽にご相談くださいhttps://aws.amazon.com/jp/contact-us/aws-sales/
※「AWS 問い合わせ」で検索してください