本連載では、マイクロサービスアーキテクチャでの継続的デリバリ(CD:Continuous Delivery:CD)を以下のようなパイプラインで実装する方法について、解説を進めています。

本連載で実装を進めている継続的デリバリのパイプライン

今回は、前回イメージをビルドしてDockerHubへプッシュしたコンテナをステージング環境へデプロイするパイプラインを構築します。

Webアプリケーション(BFF)のステージング環境へのデプロイ

  1. ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します。
  2. ECSエージェントが前回プッシュしたコンテナをECSクラスタ上にプルします。
  3. ECSクラスタ上でアプリケーションコンテナが実行されます。

Webアプリケーション(BFF)のステージング環境へのデプロイ

事前準備:ステージング環境の構築

パイプラインの設定を行う前に、BFFアプリケーションのデプロイ先であるステージング環境のアプリケーションロードバランサ、ECSクラスタ、タスク定義、サービスの構築を行います。それぞれの作成方法は、本連載の各回で紹介した手順と同様です。

  • アプリケーションロードバランサ: 第5回
  • ECSクラスタ: 第8回
  • ECSタスク定義: 第9回
  • ECSサービス実行: 第10回

また、それぞれを設定するにあたっては、第14回で解説したマイクロサービスにおけるステージング環境の構築の際と同様に、タスクのメモリ、CPU、コンテナ名、イメージ設定に留意する必要があります。

加えて、BFFアプリケーションはマイクロサービスを呼び出すため、バックエンドサブネットのロードバランサのDNSを「applicaiton.yml」で環境変数から取得するよう定義しています。このDNSをBFFアプリケーションコンテナの実行時に環境変数として渡すように、下記の要領に従って設定します。

設定箇所 設定内容 説明
ECSタスク定義:コンテナの追加 環境:環境変数 バックエンドマイクロサービスへパスルーティングするアプリケーションロードバランサのDNSを、環境変数SERVICE_DNSとして設定します。ステージング環境での具体的な設定値は、SystemsManagerParameterStoreで定義した"SERVICE_DNS_STAGING"から取得するよう、ValueFromフィールドを設定します

アプリケーションロードバランサのDNSを、環境変数SERVICE_DNSとして設定

コンテナ実行時に参照する環境変数は、ECSタスク定義で設定しておくことが可能です。ここではさらに、SystemsManager ParameterStoreを経由して環境変数を取得するものとし、ECSサービスを実行するサービスロールにSSMのアクセス権限を付与しておきましょう。

このように設定しておくことで、ステージング/プロダクションともに同一のコンテナイメージを使えます。つまり、コンテナ実行時の環境変数を切り替えることで、テストが完了したステージング環境のコンテナイメージをそのままプロダクション環境で利用できるようになるのです。

環境変数の定義とECSサービスロールへのアクセス権限の付与

CodePipelineの設定を行う前に、前節のECSで使用する環境変数を定義しておきます。設定方法については、第10回で解説しているのでそちらをご参照ください。今回は、以下のパラメータを定義します。

  • “SERVICE_DNS_STAGING”:前節で作成したアプリケーションロードバランサーのDNS

また、前節で設定したECSのタスク実行IAMロールにSystemsManagerParameterStoreのアクセス権限を付与しておきましょう。

ECSのタスク実行IAMロールにアクセス権限を付与

Web(BFF)アプリケーションのステージング環境へのデプロイ

これまで作成してきたCodePipelineを編集して、BFFアプリケーションのコンテナイメージをデプロイ設定します。AWSコンソールの「CodePipeline」サービスを選択し、パイプラインを選択して、「編集する」ボタンを押下します。

BFFアプリケーションのコンテナイメージをデプロイ設定

「ステージを追加する」ボタンを押下し、新たなステージを追加します。

新たなステージを追加

任意のステージ名を設定します。

任意のステージ名を設定

コンテナイメージをデプロイするための設定を行います。以下の要領でアクションを設定し、「完了」ボタンを押下します。

  • アクション名:任意のアクション名を追加します。
  • アクションプロバイダー:「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 まで。