Successfully reported this slideshow.
Your SlideShare is downloading. ×

AWS Black Belt Techシリーズ AWS Elastic Beanstalk

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 51 Ad

More Related Content

Slideshows for you (20)

Similar to AWS Black Belt Techシリーズ AWS Elastic Beanstalk (20)

Advertisement

More from Amazon Web Services Japan (20)

Recently uploaded (20)

Advertisement

AWS Black Belt Techシリーズ AWS Elastic Beanstalk

  1. 1. AWS  Elastic  Beanstalk AWS  Black  Belt  Tech  Webinar  2014  (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 技術本部  エマージングソリューション部 シニアソリューションアーキテクト  安川  健太
  2. 2. Agenda •  AWS  Elastic  Beanstalkとは? –  Elastic  Beanstalkの概要 •  前回のWebinar以降降の重要なアップデート –  Docker対応 –  Worker  Tierの追加 –  CloudWatch  Logsとのインテグレーション –  環境設定のRolling  Update •  Black  Belt  Tips –  CLIツールebでの開発&運⽤用 –  設定ファイルによるコンテナカスタマイズ –  他サービスのリソース追加 •  まとめ
  3. 3. Agenda •  AWS  Elastic  Beanstalkとは? –  Elastic  Beanstalkの概要 •  前回のWebinar以降降の重要なアップデート –  Docker対応 –  Worker  Tierの追加 –  CloudWatch  Logsとのインテグレーション –  環境設定のRolling  Update •  Black  Belt  Tips –  CLIツールebでの開発&運⽤用 –  設定ファイルによるコンテナカスタマイズ –  他サービスのリソース追加 •  まとめ
  4. 4. AWSの構築・デプロイ⾃自動化サービスの中での位置づけ Elastic Beanstalk OpsWorks CloudFormation フレキシビリティ 導入の容易さ
  5. 5. Elastic  Beanstalk 5 定番構成の構築・デプロイの ⾃自動化サービス
  6. 6. •  ELB  +  Web+(DB)の 定番構成で利利⽤用 •  Auto  Scaling利利⽤用可能 •  ログやアプリはS3に •  単純な構成を容易易に管 理理 •  VPC内でも利利⽤用可能 •  システム全体ではなく ⼀一部での利利⽤用も可能 6
  7. 7. •  アプリケーションを簡単にデ プロイ •  複数環境を切切り替え可能 (ブルーグリーンデプロイ) 7
  8. 8. 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% ブルーグリーンデプロイも容易易
  9. 9. 対応している構成と⾔言語環境 Elastic   Load Balancing Web  Tier deploy! WAR Java Python PHP .NET Ruby nodeJS Docker Amazon   RDS Auto  scaling  Group … Auto  scaling  GroupQueue Async   Tasks Worker  Tier …
  10. 10. Agenda •  AWS  Elastic  Beanstalkとは? –  Elastic  Beanstalkの概要 •  前回のWebinar以降降の重要なアップデート –  Docker対応 –  Worker  Tierの追加 –  CloudWatch  Logsとのインテグレーション –  環境設定のRolling  Update •  Black  Belt  Tips –  CLIツールebでの開発&運⽤用 –  設定ファイルによるコンテナカスタマイズ –  他サービスのリソース追加 •  まとめ
  11. 11. アップデート -‐‑‒  Docker環境のサポート  -‐‑‒
  12. 12. ElasticBeanstalkのDockerサポート •  ElasticBeanstalkで任意のDockerコンテナを実⾏行行可能に –  Dockerコンテナとして構築できれば任意のDistribution・任意の⾔言語で構築 した実⾏行行環境をElasticBeanstalkにデプロイ出来る •  下記のような運⽤用が可能 –  ローカルのコンテナ上でコードを開発&テスト –  同じコンテナをElasticBeanstalk上の本番環境にデプロイ meets
  13. 13.  Environment 各インスタンスの中には EC2 HM AutoScaling Nginx (tcp:80) Docker (tcp: xxxx) コンテナの上げ下げ コンテナとの 接続ポートの更新 コマンド 各インスタンス ・マネージされたコンテナ が1つ ・Host Manager (HM)が コマンドを実行
  14. 14. コンテナの設定記述の仕⽅方 •  次の2種類の記述⽅方式を利利⽤用可能 –  Dockerfile •  ⼀一般的なコンテナの構築に使われるDockerfile •  AWS特有ではないため、どこでも作成・編集・構築が可能 •  コンテナの構築⽅方法を指⽰示するファイルなのでコンテナ起動オプショ ンを指定したい場合は不不⼗十分 –  Dockerrun.aws.json •  ElasticBeanstalk独⾃自の形式 •  使⽤用するコンテナイメージ、コンテナから参照するボリュームなどを 指定 •  コンテナの構築⽅方法⾃自体は指定できない(要Dockerfileと併⽤用)
  15. 15. Dockerfileの例例 •  いわゆる普通のDockerfile –  EXPOSEで指定したポートがnginxとの接続に使われる 注:nginx経由で外部に開けるポートは1つだけ •  その他注意点 –  FROMとEXPOSEは必須 –  CMDとENTRYPOINTのどちらかは必須
  16. 16. Dockerrun.aws.jsonの例例    プライベートレポジトリを使用する際に必要 S3バケット上に置いた認証情報ファイルを指定 使用すべきイメージ コンテナがEXPOSEするポートを指定 (ElasticBeanstalkが使用するのはContainerPortのみ) コンテナにマウントすべき EC2インスタンスのディレクトリを指定 コンテナ内のログディレクトリを指定
  17. 17. デプロイの仕⽅方 •  デプロイ時のファイル形式も2種類 –  単⼀一ファイル •  Dockerfile  /  Dockerrun.aws.jsonのみのデプロイの場合 •  Pros:  アーカイブを作る必要がなく簡便便 •  Cons:  ElasticBeanstalkの環境カスタマイズやリソースファイルのデプロ イ等は出来ない –  ZIPアーカイブ  /  gitでデプロイ •  Dockerfile  /  Dockerrun.aws.jsonあるいは両⽅方を含むアーカイブ •  Pros:  Dockerfileでイメージを構築して起動オプションを指定して起動した り、環境カスタマイズを⾏行行ったりすることが可能 •  Cons:  アーカイブを作らないといけない 柔軟性とコンテナ記述ファイルのバージョン管理も考慮すると gitで管理してeb push / git aws.pushでデプロイがおすすめ
  18. 18. アップデート -‐‑‒  Worker  Tierの追加  -‐‑‒
  19. 19. Worker  Tier •  SQSに登録されたタスクを ⾮非同期処理理するTier •  SQSメッセージは⾃自動的に HTTPエンドポイントにPOST –  200  OKならDelete  Message –  エラー応答ならリトライ à  Webアプリを実装するだけで SQSを使った⾮非同期処理理Workerを実現可 Worker 1.1はSQS Dead Letter Queueに対応
  20. 20. Worker  Tier利利⽤用時の主な設定項⽬目 •  Worker  queue –  Workerが監視するQueue –  既存のQueueを選ぶことも⾃自動作成させることも可 •  Dead  Letter  Queueも⾃自動で作成  (Worker  1.1の場合) •  HTTP  Path –  sqsdがメッセージをPOSTする先のパス –  /async  なら  http://localhost:80/async  にPOST •  Max  Retries –  エラー応答が返った際にRetryする最⼤大数
  21. 21. Worker  Tier利利⽤用時の注意点 •  Retention  Periodの設定の⼀一貫性 –  ElasticBeanstalkとSQS  Queueで設定が異異なる場合、期待と異異 なる動作になる可能性あり •  If  SQS  >  ElasticBeanstalk:   –  Worker  tierのsqsdが先にメッセージを無効と判断 •  If  SQS  <  ElasticBeanstalk:   –  SQSが先にメッセージを無効と判断 •  Visibility  Timeoutについてはsqsdの設定が優先 –  SQS側の設定によらず、ElasticBeanstalk側の設定が反映
  22. 22. アップデート -‐‑‒  CloudWatch  Logsとのインテグレーション  -‐‑‒
  23. 23. CloudWatch  Logsを使ってログ監視 CloudWatch Logs Agentを追加する設定ファイル -  Tomcat (Java)向け -  Apache (PHP and Python)向け -  Nginx (Ruby, Node.js, and Docker)向け CloudWatch Logsへの書き込み権限はIAM Roleで
  24. 24. 提供される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が出⼒力力するログファイルのローテーションなどの設定 –  修正なしで利利⽤用可能
  25. 25. アップデート -‐‑‒  環境設定のRolling  Update  -‐‑‒
  26. 26. 環境設定のRolling  Update •  インスタンスの置換えを伴う操作を⼀一部ずつ実⾏行行(*) –  内部的にはCloudFormationのUpdate  Policyを利利⽤用 一度に入れ替えるインスタンスの最大数 最低限維持すべきインスタンス数 各Update操作間のPause時間 (*) デプロイには適用されません
  27. 27. Agenda •  AWS  Elastic  Beanstalkとは? –  Elastic  Beanstalkの概要 •  前回のWebinar以降降の重要なアップデート –  Docker対応 –  Worker  Tierの追加 –  CloudWatch  Logsとのインテグレーション –  環境設定のRolling  Update •  Black  Belt  Tips –  CLIツールebでの開発&運⽤用 –  設定ファイルによるコンテナカスタマイズ –  他サービスのリソース追加 •  まとめ
  28. 28. Black  Belt  Tips -‐‑‒  CLI  ebによる開発・デプロイ  -‐‑‒
  29. 29. Elastic  Beanstalk環境の作成や操作の⽅方法 •  マネージメントコンソール •  各種IDE –  Eclipse   à  Javaアプリのデプロイに対応 –  VisualStudio à  .Netアプリのデプロイに対応 •  AWS  SDK –  Java,  PHP,  Ruby,  Python,  .Net  …   •  AWS  CLI $  aws  elasticbeanstalk  … •  コマンドラインツール  eb マネージメントコンソール Eclipse
  30. 30. eb:  CLIでElasticBeanstalk環境を操作 "    eb  init §  環境の初期設定 "    eb  start §  環境の作成を開始 "    eb  status §  環境のステータス確認 "    eb  update §  環境の設定更更新 "    eb  stop §  環境の停⽌止 "    eb  delete §  環境の削除 "    eb  logs §  環境のログを表⽰示 "    eb  events §  環境に関連するイベントを表⽰示 "    eb  branch §  git  branchに環境を紐紐付け "    eb  push §  新しいバージョンをデプロイ
  31. 31. eb  +  gitでコマンドラインのみで開発 •  ElasticBeanstalkのCLIツールをダウンロード –  下記URLから最新版のURLを取得 •  http://aws.amazon.com/code/6752709412171743 –  ダウンロードと解凍(下記例例ではVersion  2.6.3) –  適切切なディレクトリにパスを通せば実⾏行行可能に $ wget https://s3.amazonaws.com/elasticbeanstalk/cli/AWS-ElasticBeanstalk-CLI-2.6.3.zip $ unzip AWS-ElasticBeanstalk-CLI-2.6.3.zip
  32. 32. eb  +  gitでコマンドラインのみで開発 " ElasticBeanstalk⽤用CLIであるebとGitを⽤用いるとコマンドラインのみで開発から デプロイまで実⾏行行可 §  プロジェクトディレクトリの作成と初期化 §  アプリケーションの開始 §  アプリケーション環境の状態確認 §  コードをデプロイ $ mkdir project && cd project $ git init $ eb init # AWSのCredential、リージョン、コンテナ等を設定 $ eb start #  設定内容に従ってアプリケーション環境が起動 $ eb status # StatusがReadyになれば起動完了了 $ eb push #  コンテナのカスタマイズ、コードのデプロイが実⾏行行される
  33. 33. eb  +  gitでコマンドラインのみで開発 " eb  branchコマンドでgitブランチごとにデプロイ先環境を設定 §  新しいgitブランチを作成 §  new_̲branch⽤用の環境を作成(環境設定を引き継ぎ) §  new_̲branch⽤用の新環境をスタート $ git checkout –b new_branch Switched to a new branch 'new_branch' $ eb branch The current branch is "new_branch". Enter an AWS Elastic Beanstalk environment name (auto-generated value is “sample-newbranch- env"): Do you want to copy the settings from environment "nodesample-env" for the new branch? [y/n]: y $ eb start Starting application "sample". Waiting for environment "sample-newbranch-env" to launch. 2013-10-08 08:12:59 INFO createEnvironment is starting. …
  34. 34. 参考:既存のプロジェクトにデプロイ設定のみ追加 •  プロジェクトを作成して初期化 •  AWS  Dev  Toolを使ってデプロイに関するコンフィグ –  スクリプトを⾛走らせてgit  の拡張コマンドをインストール –  aws.configコマンドでデプロイに関するコンフィグを設定してaws.pushでデプロイ $ mkdir ebapp # rails なら rails new ebapp $ cd ebapp $ git init $ ~/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/Linux/AWSDevTools-RepositorySetup.sh $ git aws.config AWS Access Key: AKIXXXXXXXXXXXXXXXX AWS Secret Key: zGt9B9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AWS Region [default to us-east-1]: ap-northeast-1 $ git aws.push
  35. 35. Black  Belt  Tips -‐‑‒設定ファイルによる環境カスタマイズ-‐‑‒
  36. 36. コンフィグファイルによるカスタマイズ •  アプリケーションコンテナをカスタマイズ –  独⾃自AMIを⽤用いなくても必要なコンポーネントの追加が可能に •  アプリケーションリポジトリ内に下記の形式で配置 –  /.ebextensions/*.config –  ファイルは複数配置可能 –  ファイル名順に処理理 –  プロジェクト内に配置するので git等での管理理も容易易 packages: yum: git: [] commands: 01prepare: command: “scripts/prepare.sh” yumでgitをインストールしつつ、 特定のシェルスクリプトを実行する例
  37. 37. コンフィグファイルで実⾏行行可能な操作 •  packages –  yumやrpmを利利⽤用したパッケージのインストール •  sources –  外部からのアーカイブ(tarなど)をダウンロードして指定した場所に展開 •  files –  指定した場所にファイルを作成 –  外部からのダウンロードしたファイルの配置も可 •  services –  serviceを起動したり、起動設定を変更更したりする •  users/groups –  任意のユーザー/グループを作成 詳細情報: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-‐‑‒containers.html
  38. 38. コンフィグファイルで実⾏行行可能な操作 •  commands –  デプロイ処理理前に実⾏行行すべきコマンドやスクリプトを指定 •  例例:OSやミドルウェアの設定変更更 •  container_̲commands –  新バージョンの展開後に実⾏行行すべきコマンドやスクリプトを指定 •  例例:アプリ内のリソースや設定の環境に応じた変更更など •  option_̲settings –  環境変数の設定 •  Resources –  追加のリソースを定義 –  例例:  SQSのキュー、DynamoDBのテーブル、CloudWatchのアラーム
  39. 39. パッケージインストールとコマンド実⾏行行の例例 •  例例:サーバ監視のために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
  40. 40. コマンド実⾏行行の設定に関する詳細 •  CommandsとContainer  Commandsの違い Commands Container Commands 実行タイミング デプロイ直後、バージョン更新前 更新バージョンのセットアップ後、 切り替え直前 コンテナ環境変数の自動 読み込み 無し 有り leader_onlyフラグのサ ポート 無し 有り container_commands: leader_only_command: command: <command to run> leader_only: true every_node_command: command: <command to run> every_node_command Leader leader_only_command
  41. 41. デプロイ時のコマンド実⾏行行順序 1.  コンフィグファイルの”commands” 2.  /opt/elasticbeanstalk/hooks/appdeploy/pre/* à新バージョン有効化に先⽴立立って⾏行行う処理理 (アセットのコンパイルやDBのマイグレーションなど) 3.  コンフィグファイルの”container_̲commands” 4.  /opt/elasticbeanstalk/hooks/appdeploy/enact/* à新バージョン有効化時に⾏行行うべき処理理 (バージョンの差し替えとアプリケーションサーバの再起動など) 5.  /opt/elasticbeanstalk/hooks/appdeploy/post/* àデプロイ後に⾏行行うべき処理理 (バックグラウンドワーカーの起動など)
  42. 42. Pre  Deployフックの使⽤用例例 •  例例:コンパイル済みアセットをダウンロードしてデプロ イ時間を短縮 files: "/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_bootstraup.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash cd /var/app/ondeck/public s3cmd get s3://mybucket/assets.tgz tar xvzf assets.tgz
  43. 43. Post  Deployフックの使⽤用例例 •  例例:デプロイ後に実⾏行行されるフックを利利⽤用してバックグ ラウンドワーカーを動かす files: "/opt/elasticbeanstalk/hooks/appdeploy/post/99_start_resque_worker.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash . /opt/elasticbeanstalk/support/envvars cd $EB_CONFIG_APP_CURRENT if [ -e /var/run/resque.pid ]; then kill `cat /var/run/resque.pid` fi chown $EB_CONFIG_APP_USER /var/run/resque.pid su -c "PIDFILE=/var/run/resque.pid BACKGROUND=yes RAILS_ENV=production QUEUE=default bundle exec rake environment resque:work" $EB_CONFIG_APP_USER
  44. 44. Pre&Post  Deployフックの応⽤用例例:   Amazon  S3をDockerプライベートレポジトリとして利利⽤用 Developer 1. docker push4. docker pull 2. deploy registry registry registry registry Docker registry container with AWS credentials Region app app app registry app 3. docker run registry 5. docker stop registry 詳細: http://aws.typepad.com/sajp/2014/06/eb-docker-private-repo.html
  45. 45. Black  Belt  Tips -‐‑‒他サービスのリソースを環境ごとに作成-‐‑‒
  46. 46. 他サービスのリソースを定義する例例 •  コンフィグファイルのResourcesセクションに定義 Resources:      <name  of  resource>:          Type:  <resource  type  identifier>          Properties:                <property  name>:  <value>   •  サポートするサービス –  DynamoDB –  ElastiCache –  SQS –  SNS –  CloudWatch 注:デプロイするユーザに各サービスを     操作する権限が必要
  47. 47. 例例:DynamoDBのテーブルの作成と参照 .ebextensions/sessiontable.config Resources:    SessionTable:        Type:  AWS::DynamoDB::Table        Properties:            KeySchema:                HashKeyElement:                    AttributeName:  "username"                    AttributeType:  "S"            ProvisionedThroughput:                ReadCapacityUnits:  1                WriteCapacityUnits:  1 files:    "/var/app/support/sessiontable":        mode:  "000444"        content:  |            `̀{"Ref"  :  "SessionTable"}`̀            `̀{"Ref"  :  "AWS::Region"}`̀ リソースタイプ識別子 Ref演算子を使った参照 リソースのプロパティを設定 (リソースタイプごとにプロパティは異なる) Fn::GetAtt, Fn::Joinなどの演算子や、 CloudFormationで定義された変数も利用可
  48. 48. Agenda •  AWS  Elastic  Beanstalkとは? –  Elastic  Beanstalkの概要 •  前回のWebinar以降降の重要なアップデート –  Docker対応 –  Worker  Tierの追加 –  CloudWatch  Logsとのインテグレーション –  環境設定のRolling  Update •  Black  Belt  Tips –  CLIツールebでの開発&運⽤用 –  設定ファイルによるコンテナカスタマイズ –  他サービスのリソース追加 •  まとめ
  49. 49. まとめ •  ElasticBeanstalkを使えばアプリケーション環境の構 築やデプロイを⾃自動化可能 •  Docker対応によりローカル環境との親和性向上 •  Worker  Tierの利利⽤用で⾮非同期処理理の追加 •  設定ファイルを⽤用いれば柔軟な環境カスタマイズも可 環境構築やデプロイはElasticBeanstalkに任せて Happy Coding!
  50. 50. Webinar資料料の配置場所 •  AWS  クラウドサービス活⽤用資料料集 –  http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/
  51. 51. Q&A

×