はじめに
AWS
のドキュメントやAWS
の試験対策本を見ると、アプリケーションのデプロイ方式としてよく紹介されているブルーグリーンデプロイメントですが、実際に構成を作って試そうと思ってもハマりどころが色々あり、簡単にはできない場合が多いと思います。
私も検証でゼロから作成する場合に毎回どこかでつまづいて、すんなりいかないことが多いので、ECS
(Fargate
)でブルーグリーンデプロイメントを行う際の手順をまとめてみようと思います。
ブルーグリーンデプロイメントとは
アプリケーションをデプロイする際、例えばオンプレミスな物理サーバ上で動作するアプリケーションの場合、メンテナンス日を設けて一時的にサービス停止させたりしてサーバ上で動作するアプリケーションを入れ替えたりすることが多いかと思います。
ブルーグリーンデプロイメントはアプリケーションをデプロイする際のデプロイ方式の1つでAWS
等のクラウドサービスでアプリケーションをデプロイする場合、クラウドのメリットの1つとなるサービス作成・廃棄することが簡単にできることを活かして、もう1セットのサービスを用意して、テストしてから切り替えることで安全に、ダウンタイムもほぼ無いリリースができる技術となります。
AWS
の場合、アプリケーションデプロイを行うサービスとなるCodeDeploy
サービスを利用することで、ブルーグリーンデプロイの構成を作成することができますが、AWS
の様々なサービスが連携する構成となるため、仕組みをきちんと理解できていない初見の状態ではハードルが高いサービスになるかと思います。
今回は、複雑なブルーグリーンデプロイメントの構成を紐解きつつ、ハンズオン的に構成を作っていきたいと思います。
ブルーグリーンデプロイメントの仕組みについて
ブルーグリーンデプロイメントと言うと、実際には色々とパターンが存在しますが、今回はCodeDeploy
のブルーグリーンデプロイ設定で作成できる構成について説明します。
もし他のブルーグリーンデプロイの構成についても知りたい場合は以下を参照してください。
実際にCodeDeploy
を利用したブルーグリーンデプロイはどのような仕組みで行われるのかをざっくりと説明した図が以下です。
デプロイの制御はCodeDeploy
で行われ、新しいサービスの作成やELB
のターゲットグループの紐づけ、ドメインの紐づけの切り替え等を行います。(上図1、2)
また、CodeDeploy
でブルーグリーンデプロイの設定を行った場合は、ELB
に開発者アクセス用のリスナールールを作成する必要があり、開発者アクセス用ルールのターゲットとして、新しく作成されたサービスを指定することで、開発者のみアクセスできる構成が作られます。(上図3)
※技術的には開発者アクセス用の待受ポート番号を設定したリスナールールをELB
に追加することで、一般ユーザと開発者のアクセスを分ける方法となります。
開発者から新しいサービスへのアクセスを行って、動作に問題が無いようであれば、一般ユーザ用リスナールールに紐づいているターゲットグループをBlue Group側からGreen Group側に切り替えることで一般ユーザも新しいサービスにアクセスできるようになります。(上図4、5)
最終的に不要となったBlue Group(に紐づいているサービス)を削除することでブルーグリーンデプロイメントの一連の操作は完了となります(上図6)
次回、更に新しいサービスをデプロイする際には、Blue Group側にデプロイを行って、Green GroupからBlue Groupに切り替える操作となります。
今回作成する構成
今回から数回にわたり、以下の構成を作成していこうと思います。
ネットワークの設定
今回はゼロから始めるため、VPC
から作成を行います。
AWSマネジメントコンソールより、VPCダッシュボードに移動し、「VPC dashboard」の「VPCを作成」より一通りのネットワーク設定を行います。
上図左側の設定は以下で設定を行いました。
項目 | 設定 | 備考 |
---|---|---|
作成するリソース | 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を有効にする必要があるため、チェック(デフォルト設定) |
追加のタグ | ー | 今回はタグの追加はしない |
上記のようにまとめて作成を行うと、以下のように基本的なネットワーク設定がまとめて行われます。
以前は1つ1つ設定する必要がありましたが、一度にまとめて作成することができ、作成後も、「Your VPCs」の「リソースマップ」タブから各リソースの紐づけが確認できるので、AWS
のネットワーク構成が分かりやすくなりました。
おわりに
今回はブルーグリーンデプロイメントの仕組みと、ネットワークの設定まで行いました。
次回はブルーグリーンデプロイメントとは若干外れますが、今後の通信確認等で必要なサービスとなるRoute53
やECR
といった付帯サービスの設定を行っていきます。