🙄

Elastic Beanstalk で Blue / Green デプロイする

2023/12/15に公開

この記事は mob Advent Calendar 15日目の記事です。

Elastic Beanstalk での Blue / Green デプロイする方法を試してみたので記事にします。大きな流れば下記の通りなのですが、Elastic Beanstalk に関しては EB CLIを使いたかったので今回その方法を記事にしました。

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html

準備する

RDS を立ち上げる

まずは AWS Console で RDS を立ち上げます。

今回は Posgress を選びました。

Security Group を作る

EC2 のメニューを選び、 セキュリティーグループを選びます。
「セキュリティーグループを作成」を押します。

今回は eb-db-connect という名前にしました。
それ以外は特に何も設定しなくて良いです。(下記を参考にしました)

https://repost.aws/ja/knowledge-center/elastic-beanstalk-add-security-group

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 してみましょう。やり方は下記にあります。

https://zenn.dev/mobdev/articles/c86186ac698f7e

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

ソースコードを修正する

わかりやすく修正します。

index.html
    <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