本連載では、マイクロサービスアーキテクチャでの継続的デリバリ(CD:Continuous Delivery:CD)を以下のようなパイプラインで実装する方法について、解説を進めています。
今回は、前回イメージをビルドしてDockerHubへプッシュしたコンテナをステージング環境へデプロイするパイプラインを構築します。
Webアプリケーション(BFF)のステージング環境へのデプロイ
- ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します。
- ECSエージェントが前回プッシュしたコンテナをECSクラスタ上にプルします。
- ECSクラスタ上でアプリケーションコンテナが実行されます。
事前準備:ステージング環境の構築
パイプラインの設定を行う前に、BFFアプリケーションのデプロイ先であるステージング環境のアプリケーションロードバランサ、ECSクラスタ、タスク定義、サービスの構築を行います。それぞれの作成方法は、本連載の各回で紹介した手順と同様です。
また、それぞれを設定するにあたっては、第14回で解説したマイクロサービスにおけるステージング環境の構築の際と同様に、タスクのメモリ、CPU、コンテナ名、イメージ設定に留意する必要があります。
加えて、BFFアプリケーションはマイクロサービスを呼び出すため、バックエンドサブネットのロードバランサのDNSを「applicaiton.yml」で環境変数から取得するよう定義しています。このDNSをBFFアプリケーションコンテナの実行時に環境変数として渡すように、下記の要領に従って設定します。
設定箇所 | 設定内容 | 説明 |
---|---|---|
ECSタスク定義:コンテナの追加 | 環境:環境変数 | バックエンドマイクロサービスへパスルーティングするアプリケーションロードバランサのDNSを、環境変数SERVICE_DNSとして設定します。ステージング環境での具体的な設定値は、SystemsManagerParameterStoreで定義した"SERVICE_DNS_STAGING"から取得するよう、ValueFromフィールドを設定します |
コンテナ実行時に参照する環境変数は、ECSタスク定義で設定しておくことが可能です。ここではさらに、SystemsManager ParameterStoreを経由して環境変数を取得するものとし、ECSサービスを実行するサービスロールにSSMのアクセス権限を付与しておきましょう。
このように設定しておくことで、ステージング/プロダクションともに同一のコンテナイメージを使えます。つまり、コンテナ実行時の環境変数を切り替えることで、テストが完了したステージング環境のコンテナイメージをそのままプロダクション環境で利用できるようになるのです。
環境変数の定義とECSサービスロールへのアクセス権限の付与
CodePipelineの設定を行う前に、前節のECSで使用する環境変数を定義しておきます。設定方法については、第10回で解説しているのでそちらをご参照ください。今回は、以下のパラメータを定義します。
- “SERVICE_DNS_STAGING”:前節で作成したアプリケーションロードバランサーのDNS
また、前節で設定したECSのタスク実行IAMロールにSystemsManagerParameterStoreのアクセス権限を付与しておきましょう。
Web(BFF)アプリケーションのステージング環境へのデプロイ
これまで作成してきたCodePipelineを編集して、BFFアプリケーションのコンテナイメージをデプロイ設定します。AWSコンソールの「CodePipeline」サービスを選択し、パイプラインを選択して、「編集する」ボタンを押下します。
「ステージを追加する」ボタンを押下し、新たなステージを追加します。
任意のステージ名を設定します。
任意のステージ名を設定 |
コンテナイメージをデプロイするための設定を行います。以下の要領でアクションを設定し、「完了」ボタンを押下します。
- アクション名:任意のアクション名を追加します。
- アクションプロバイダー:「Amazon ECS」を選択します。
- リージョン:ステージング環境があるリージョンを選択します。
- 入力アーティファクト:前回のコンテナをビルドするパイプラインで出力アーティファクトとなっている「BuildArtifact-BFF」を選択します。なお、この実体は「imagedefinition.json」であり、S3に保存されています。
- クラスタ名:前節で作成したECSクラスタを選択します。
- サービス名:前節で作成したECSサービスを選択します。
- イメージ定義ファイル:前回のパイプライン処理で「buildspec.yml」で出力した「imagedefition.json」を設定します。
設定完了後、「変更をリリースする」ボタンを押下し、デプロイが問題なく完了するか確認します。
これで、BFFアプリケーションをステージング環境へデプロイするパイプラインが作成できました。
次回は、AmazonSNSへのトピックの作成とパイプラインの一時停止を行い、ステージング環境で実行したテスト結果を確認して、プロダクション環境へのリリースを承認するプロセスを実行するパイプラインを作成します。
著者紹介
川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理
金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。
Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。
本連載の内容に対するご意見・ご質問は Facebook まで。