Elastic Beanstalk で Blue / Green デプロイする
この記事は mob Advent Calendar 15日目の記事です。
Elastic Beanstalk での Blue / Green デプロイする方法を試してみたので記事にします。大きな流れば下記の通りなのですが、Elastic Beanstalk に関しては EB CLIを使いたかったので今回その方法を記事にしました。
準備する
RDS を立ち上げる
まずは AWS Console で RDS を立ち上げます。
今回は Posgress を選びました。
Security Group を作る
EC2 のメニューを選び、 セキュリティーグループを選びます。
「セキュリティーグループを作成」を押します。
今回は eb-db-connect
という名前にしました。
それ以外は特に何も設定しなくて良いです。(下記を参考にしました)
RDS 側の Security Group のインバウンドに設定する
その後、 先ほど作成した RDS の Security Group を開き、そのインバウンドに eb-db-connect
を設定します。
Elasitc Beanstalk アプリと環境を作る
まずは eb init します。
$ eb init
Select a default region
1) us-east-1 : US East (N. Virginia)
...
10) ap-northeast-2 : Asia Pacific (Seoul)
...
(default is 3): 9
...
Select a platform.
1) .NET Core on Linux
...
5) Java
...
(make a selection): 5
...
.ebextentions
ディレクトリを作成して、 sg.config
を作成します。
option_settings:
- namespace: aws:autoscaling:launchconfiguration
option_name: SecurityGroups
value: eb-db-connect
これで、 eb-db-connect
が設定されるようになります。
このあと eb create します。
$ eb create
これでアプリケーションと環境ができました。
DBを接続する
環境が作られたら、 EC2 に ssh して psql してみましょう。やり方は下記にあります。
psql \
--host={{RDSのエンドポイント}} \
--port=5432 \
--username={{DBのユーザー名}}
現時点での内容を見る
eb open
で開けるので、現状を見ておきます。
今回の場合は http://blue-green-test-dev.ap-northeast-1.elasticbeanstalk.com/
このURLになります。
新しい環境を用意する
新しい環境を clone で用意する
$ eb clone
完了後、二つの環境があることを確認しましょう。 my-cloned-env
が新しい環境です。
$ eb list
* blue-green-test-dev
my-cloned-env
ソースコードを修正する
わかりやすく修正します。
<div class="textColumn">
- <h1>Congratulations</h1>
+ <h1>New! Congratulations</h1>
<p>Your first AWS Elastic Beanstalk Corretto application is now running on your own dedicated environment in the AWS Cloud</p>
<p>This environment is launched with Elastic Beanstalk Corretto Platform</p>
</div>
新しい環境でも RDS に接続できるか確認します
また、新しい環境のEC2 に ssh して問題なくRDSに接続できるかを確認します。
psql \
--host={{RDSのエンドポイント}} \
--port=5432 \
--username={{DBのユーザー名}}
新しい環境に修正をデプロイします
環境を指定して deploy します。
$ eb deploy my-cloned-env
eb openすると、修正できていることが確認できました。ここで動作確認をします。
新環境と旧環境を入れ替える
新環境に問題ないことがわかったので、旧環境と入れ替えます。コマンドは下記です。
$ eb swap
eb open my-cloned-env
をすると、修正できていることが確認できます。また AWS Console の my-cloned-env 環境を見ると、 ドメインが 旧環境だったものを引き継いでいることがわかります。
今回は環境が2つきりだったので、自動で選択されましたが、それ以上ある場合は下記のようにどれと入れ替えるかを選ぶことができます。
$ eb swap
Select an environment to swap with.
1) staging-dev
2) live-env
(default is 1): 2
旧環境を terminate する
コマンドは下記です。
$ eb terminate blue-green-test-dev
The environment "blue-green-test-dev" and all associated instances will be terminated.
To confirm, type the environment name: blue-green-test-dev
これで一通りの流れが終了です。
まとめ
Elastic Beanstalk での Blue/Green デプロイまとめ
- RDS は Elsatic Beanstalk 外で立ち上げる
- 修正したら eb clone して、新環境で動作確認する
- 新環境が問題なければ eb swap する
- 不要なタイミングで 旧環境を eb terminate する
Discussion