LoginSignup
3
3

ECSブルーグリーンデプロイメントをゼロから構築する。(その1:ネットワークの設定)

Last updated at Posted at 2023-10-22

はじめに

AWSのドキュメントやAWSの試験対策本を見ると、アプリケーションのデプロイ方式としてよく紹介されているブルーグリーンデプロイメントですが、実際に構成を作って試そうと思ってもハマりどころが色々あり、簡単にはできない場合が多いと思います。

私も検証でゼロから作成する場合に毎回どこかでつまづいて、すんなりいかないことが多いので、ECSFargate)でブルーグリーンデプロイメントを行う際の手順をまとめてみようと思います。

ブルーグリーンデプロイメントとは

アプリケーションをデプロイする際、例えばオンプレミスな物理サーバ上で動作するアプリケーションの場合、メンテナンス日を設けて一時的にサービス停止させたりしてサーバ上で動作するアプリケーションを入れ替えたりすることが多いかと思います。

ブルーグリーンデプロイメントはアプリケーションをデプロイする際のデプロイ方式の1つでAWS等のクラウドサービスでアプリケーションをデプロイする場合、クラウドのメリットの1つとなるサービス作成・廃棄することが簡単にできることを活かして、もう1セットのサービスを用意して、テストしてから切り替えることで安全に、ダウンタイムもほぼ無いリリースができる技術となります。

AWSの場合、アプリケーションデプロイを行うサービスとなるCodeDeployサービスを利用することで、ブルーグリーンデプロイの構成を作成することができますが、AWSの様々なサービスが連携する構成となるため、仕組みをきちんと理解できていない初見の状態ではハードルが高いサービスになるかと思います。

今回は、複雑なブルーグリーンデプロイメントの構成を紐解きつつ、ハンズオン的に構成を作っていきたいと思います。

ブルーグリーンデプロイメントの仕組みについて

ブルーグリーンデプロイメントと言うと、実際には色々とパターンが存在しますが、今回はCodeDeployのブルーグリーンデプロイ設定で作成できる構成について説明します。

もし他のブルーグリーンデプロイの構成についても知りたい場合は以下を参照してください。

実際にCodeDeployを利用したブルーグリーンデプロイはどのような仕組みで行われるのかをざっくりと説明した図が以下です。

blue_green_deploy.png

デプロイの制御はCodeDeployで行われ、新しいサービスの作成やELBのターゲットグループの紐づけ、ドメインの紐づけの切り替え等を行います。(上図1、2)

また、CodeDeployでブルーグリーンデプロイの設定を行った場合は、ELBに開発者アクセス用のリスナールールを作成する必要があり、開発者アクセス用ルールのターゲットとして、新しく作成されたサービスを指定することで、開発者のみアクセスできる構成が作られます。(上図3)
※技術的には開発者アクセス用の待受ポート番号を設定したリスナールールをELBに追加することで、一般ユーザと開発者のアクセスを分ける方法となります。

開発者から新しいサービスへのアクセスを行って、動作に問題が無いようであれば、一般ユーザ用リスナールールに紐づいているターゲットグループをBlue Group側からGreen Group側に切り替えることで一般ユーザも新しいサービスにアクセスできるようになります。(上図4、5)

最終的に不要となったBlue Group(に紐づいているサービス)を削除することでブルーグリーンデプロイメントの一連の操作は完了となります(上図6)

次回、更に新しいサービスをデプロイする際には、Blue Group側にデプロイを行って、Green GroupからBlue Groupに切り替える操作となります。

今回作成する構成

今回から数回にわたり、以下の構成を作成していこうと思います。

blue_green_deploy_全体構成.png

ネットワークの設定

今回はゼロから始めるため、VPCから作成を行います。

AWSマネジメントコンソールより、VPCダッシュボードに移動し、「VPC dashboard」の「VPCを作成」より一通りのネットワーク設定を行います。

Monosnap_20231022_163220.png

上図左側の設定は以下で設定を行いました。

項目 設定 備考
作成するリソース VPCなど まとめて作成するため、VPCなどを選択
名前タグの自動生成 自動生成にチェック
名前タグ blue-green 任意の名前を指定
IPv4 CIDRブロック 10.0.0.0/16 任意のブロックを指定
IPv6 CIDRブロック IPv6 CIDRブロックなし
テナンシー デフォルト
アベイラビリティゾーン(AZ)の数 2 今回はテストのため2を指定
AZのカスタマイズ 今回はカスタマイズはしない
パブリックサブネットの数 2 NATゲートウェイを使うため、2つ作成
プライベートサブネットの数 2 ECSを配置するプライベートサブネットを2つ作成
サブネットCIDRブロックをカスタマイズ 今回はカスタマイズはしない
NATゲートウェイ 1AZ内 インターネットへのアウトバウンド通信を通すため1AZのみ設定
VPCエンドポイント S3ゲートウェイ 今回は使わないがデフォルトのまま進める
DNSホスト名を有効化 チェック DNSを有効にする必要があるため、チェック(デフォルト設定)
DNS解決を有効化 チェック DNSを有効にする必要があるため、チェック(デフォルト設定)
追加のタグ 今回はタグの追加はしない

上記のようにまとめて作成を行うと、以下のように基本的なネットワーク設定がまとめて行われます。

Monosnap_20231022_164734.png

以前は1つ1つ設定する必要がありましたが、一度にまとめて作成することができ、作成後も、「Your VPCs」の「リソースマップ」タブから各リソースの紐づけが確認できるので、AWSのネットワーク構成が分かりやすくなりました。

Monosnap_20231022_165122.png

おわりに

今回はブルーグリーンデプロイメントの仕組みと、ネットワークの設定まで行いました。

次回はブルーグリーンデプロイメントとは若干外れますが、今後の通信確認等で必要なサービスとなるRoute53ECRといった付帯サービスの設定を行っていきます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3