Blog
Elastic Beanstalk の Multi-Container Docker Environment は便利①
はじめまして、アドテクスタジオのオペレーションテクノロジー事業部(通称オペテク)の杉澤です。
私の担当しているプロダクトで使っている AWS の Elastic Beanstalk が便利なのでご紹介させて頂きます。
Elastic Beanstalk とは
AWS のプロダクトで、Elastic Beanstalk の部分は「ビーンスターク」と読むらしいです。
アプリケーション実行環境を自動構築でき、 CloudFomation ライクな記述で設定ファイルをコード管理できるプロダクトです。
Go, Java, Ruby…など様々な言語に対応しており、 Docker コンテナにも対応しています。
今回は Docker コンテナでの利用についてご紹介させて頂きます。
何ができるものなの?
結局何ができるのかが気になりますよね。
プロダクト内で Elastic Beanstalk を利用してやっていることを箇条書きでご紹介します。
- ELB・EC2 インスタンス作成
- セキュリティーグループ作成
- オートスケーリンググループの作成
- Route53 のレコード登録
- インスタンスの監視エージェント設定
- Docker コンテナの pull/起動
- ローリングデプロイ
- ブルーグリーンデプロイ
などなど行っています。
環境構築を全てコード管理できるため非常に便利で、諸々初期設定は必要ですが、基本的に1コマンドでこれらが行える環境が作成できます。
AWS 関係の操作が大体行える他、Elastic Beanstalk の管理内にあるインスタンスの起動時に独自シェルスクリプトを実行させるなど柔軟性もバッチリです。
使いこなせるととても便利です。
どんな感じになるのか
1 2 |
eb create web-dev-01 --service-role elasticbeanstalk-service-role --instance_type t2.medium |
例えば、上記のようなコマンドで Elastic Beanstalk で環境構築を行うと、アプリケーションという単位の中の1環境として、web-dev-01
という環境が作成されます。
実際の画面
私が携わっているプロダクトの管理画面のGUIを見て頂くと分かりやすいので、以下に載せておきます。
(※公開できない箇所については一部加工してあります)
ここでは下2つが batch
アプリケーションと web
アプリケーションとして存在していて、 batch
は1つ、web
は3つの環境があります。
同じものが簡単に複製可能
さらに、環境名を変更して作成すれば同じ物が作成できます。
1 2 |
eb create web-dev-02 --service-role elasticbeanstalk-service-role --instance_type t2.medium |
これを用いて、現在プロダクト内には以下4つの環境が存在します。(先ほどのスクショとは異なります。すみません)
- web-dev-01
- web-dev-02
- web-stg
- web-prd
裏側どうなってんの?
Elastic Beanstalk の裏側では AWS の複数のプロダクトが動いています。
たとえば「 Multi-Container Docker Environment 」の場合、AWS で Docker を動かすプロダクトである ECS ( EC2 ContainerService ) が裏で動いています。
更に設定によっては RDS や ElastiCache が動いています。 Elastic Beanstalk は CloudFormation を使って、これらを構築しています。
そのため Elastic Beanstalk で環境を構築すると、マネジメントコンソールの CloudFormation に以下のように awseb
から始まるスタックが自動的に作成されます。
どんなふうに使ってるの?
- 紫の枠内が、Elastic Beanstalk で管理している範囲です。
主に以下のようにWebサーバーとして使用しています。
また、現在構築中ではりますが以下のようにバッチサーバーとしても使用しています。
Jenkins から実行するので、バッチの実行結果とログが一箇所に集まるようにするため ssh でコンテナにアクセスしてバッチを実行しています。
デプロイってどうなるの?
- デプロイは
eb deploy
コマンドを使って、インスタンスの中のコンテナをまるごと入替えてデプロイが可能です。 - ローリングデプロイがマネージドの機能として存在しています。そのため設定次第では無停止でデプロイすることもできます。
また、一度にデプロイする割合なども調整可能です。 - ブルーグリーンデプロイも簡単に行えます。 Elastic Beanstalk は環境の作成・削除が簡単なので、ブルーグリーンデプロイととても相性が良いと思います。実際に私のプロダクトでは、インフラに大きな変更があった場合にはブルーグリーンデプロイを実施しています。
実際にプロダクトに導入してみて
Elastic Beanstalk はとても便利で、デプロイが非常に安全になりました。
構成をコード管理できるところ、1コマンドで作成・削除できるところから強固な環境を作成できます。
アプリケーションのデプロイはコンテナを入れ替えるだけで良いので環境が汚れにくい綺麗なインフラを構築できます。
環境を大きく変えたい場合でも、プロダクション環境にしたい Elastic Beanstalk の環境を作ってブルーグリーンデプロイして前の環境を削除するだけなので、安心感がとてもあります。
まとめ
Elastic Beanstalk の Multi-Container Docker Environment を使う事で、多くのメリットが得られることがわかりました。
次回は Elastic Beanstalk に実際にどのように設定しているのかを説明していきたいと思います。
Author