AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk

Preview:

Citation preview

【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 問い合わせ」で検索してください

Recommended