More Related Content Similar to AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk (20) More from Amazon Web Services Japan (20) AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk1. 【AWS Black Belt Online Seminar】
AWS Elastic Beanstalk
アマゾンウェブサービスジャパン株式会社
ソリューションアーキテクト 江川大地
2017.01.11
Easy to begin, Impossible to outgrow
2. Who am I ?
• 名前:江川 大地
• 所属
• アマゾン ウェブ サービス ジャパン株式会社
• ソリューションアーキテクト
• 経歴
• データベースエンジニア
• AWS テクニカルトレーナー
• 好きなサービス
• AWS サポート
• 好きなデータベース
• PostgreSQL
2
5. 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"
6. 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
8. Elastic Beanstalk vs. Do It Yourself
On-instance configuration
Your code
HTTP Server
Application Server
Language Interpreter
Operating System
Host
8
11. AWS Elastic Beanstalk の構成要素(1/3)
11
アプリケーション
環境(Environment)
URL 環境設定
環境(Environment)
URL 環境設定
環境(Environment)
URL 環境設定
Version
Repository
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
12. AWS Elastic Beanstalk の構成要素(2/3)
• アプリケーション
トップレベルの論理単位
バージョン、環境、環境設定が含まれている入れ物
• バージョン(Application Version)
デプロイ可能なコード
Amazon S3 上でのバージョン管理
異なる環境に異なるバージョンをデプロイ可能
12
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.components.html
13. 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
14. 環境のタイプ
• ロードバランシング, 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
16. ウェブサーバー環境(Web Server Tier)
• スケーラブルなウェブアプリケーションを実行
ELB+ Auto Scalingでスケーラブルな環境
- ホストマネージャー(HM)がデプロイ/監視などを自動的に実施
環境ごとに DNS 名を付与
詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.concepts.architecture.html
16
17. ワーカー環境(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.html
17
18. ワーカー環境(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
19. ワーカー環境(Worker Tier)
• 定期的なタスク実行
cron.yaml
- 例) 12時間ごとにbackupジョブを実行
毎日午後11時にauditジョブを実行
version: 1
cron:
- name: "backup"
url: "/backup"
schedule: "0 */12 * * *"
- name: "audit"
url: "/audit"
schedule: "0 23 * * *"
19
21. アプリケーション、環境を構築する方法
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
22. EB CLI による環境構築のウォークスルー
• Node.js + Express な会員登録アプリケーション
ソースコードは↓から入手可能
https://github.com/awslabs/eb-node-express-sample
22
23. サンプルコードのデプロイ手順
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
24. eb init によるアプリケーション作成とデフォルト環境設定の定義
• eb initのプロンプト: リージョンの選択
Select a default region
1) 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
25. • 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): y
Do you want to set up SSH for your instances?
(y/n): y
Select a keypair.
1) mykey
2) [ Create new KeyPair ]
(default is 2): 1
25
eb init によるアプリケーション作成とデフォルト環境設定の定義
26. • eb initのプロンプト: スタック
Select a platform.
1) Node.js
2) PHP
3) Python
4) Ruby
5) Tomcat
6) IIS
7) Docker
8) Multi-container Docker
9) GlassFish
10) Go
11) Java
26
eb init によるアプリケーション作成とデフォルト環境設定の定義
27. 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-sample
Application name: eb-node-express-sample
Region: us-west-2
Deployed Version: 5529
Environment ID: e-ufxx79fmkc27
32. デプロイメントに関する用語
• 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 ではどちらの方式も
簡単に実現可能
33. 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
34. デプロイポリシーを理解する(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
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
35. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
36. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
37. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
38. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
39. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
40. デプロイポリシーを理解する(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台
【凡例】
ヘルスチェックが成功し、
リクエストを処理可能
ヘルスチェックを実行中
デプロイメント実行中
41. デプロイに関する設定
• バッチタイプ: 一度にデプロイを反映させる台数(バッチ)をどう決めるかを設定
割合(%): 現在起動中のインスタンスの合計数に対する割合で構成
固定: 決まった台数を絶対値で指定
• バッチサイズ: 各バッチにデプロイするインスタンスの数または割合
• 例)バッチタイプ、割合(%), バッチサイズ 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 のときのみ設定可能
42. 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
43. 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
44. 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
45. 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
46. 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
47. 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
48. 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
加重ラウンドロビンの利用により、新バージョンのコードを少しずつ試すことが可能
49. デプロイ方式まとめ
方式 失敗時の影響 時間 ダウンタイム ELB 暖気 DNS切替 ロールバック デプロイ先
All at once
ダウンタイ
ム発生
🕐
ダウンタイ
ム発生
不要 無し 再デプロイ 既存
Rolling
1バッチ分
だけサービ
スアウト
🕐🕐
(バッチサイ
ズに依存)
無し 不要 無し 再デプロイ 既存
Rolling with
additional
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
53. プラットフォームの更新
• 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
54. マネージドプラットフォーム更新
• 自動的に最新のバージョンに更新するよう設定可能
メンテナンスウィンドウの指定
- 更新を行う時間帯を週次で設定(例:毎週火曜日の6:00 UTC 〜)
更新対象のバージョン選択
- [マイナー&パッチ] or [パッチのみ]
更新方式
- Immutable 方式で実施
54 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-platform-update-managed.html
※ 本機能は Windows (.Net)環境ではサポートされていません
56. 環境設定
• 環境設定
その環境に関連するリソースの動作を定義する設定パラメータ
例)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
57. 環境設定のカスタマイズ
• 各リソースに対してデフォルトの環境設定が定義
• 以下のいずれかの方法でカスタマイズ可能
環境作成時に直接設定
- 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
58. 保存済み設定
• 起動中の環境で使用している環境設定を保存可能
Amazon S3 に設定ファイルとして保存
• 保存した環境設定を再利用可能
環境作成時に指定
起動中の環境に適用
58 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-configuration-savedconfig.html
ステージング環境で
使用している環境設定を
本番環境でも使用したい
$ eb config save
60. .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
61. • 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
63. .ebextensions Tips
• セクション毎にファイルを分割するのを推奨
大きいファイルはメンテナンスが大変
※ 設定ファイルはアルファベット順に処理される
• インストールするパッケージのバージョンを明記
インスタンスによって異なるバージョンになることを防止
• カスタム AMI とのトレードオフを検討
AWS Elastic Beanstalk 用のカスタム AMI :
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/u
sing-features.customenv.html
63
66. 拡張ヘルスレポート - 主なメトリクス
• 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
69. 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
70. 提供される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
73. 対応プラットフォームごとの参考情報
• 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
74. 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
75. 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
77. 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 は 1
Multi は 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
78. 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
79. 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",
80. ローカルでのDockerコンテナの実行
• EB CLI で実行可能
$ eb local run
- 開発時に便利なコマンド群
$ eb local status
$ eb local open
$ eb local logs
$ eb local run
Creating elasticbeanstalk_phpapp_1...
Creating elasticbeanstalk_nginxproxy_1...
Attaching to elasticbeanstalk_phpapp_1, elasticbeanstalk_nginxproxy_1
phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: fpm is running, pid 1
phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: ready to handle connections
80
82. 設計上の考慮事項
• ステートレス
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
84. 時間指定のスケーリング
• Time-based Scaling
時間設定でスケールアウト/インを制御
本番運用の際はバージョンを明記しま
しょう
84 詳細:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.managing.as.html
86. 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
87. 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
89. トラブルシューティングの参考情報
• 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
91. まとめ – 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!