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

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

前回は、バックエンドのマイクロサービスアプリケーションをビルドし、コンテナイメージを作成してDockerHubへプッシュするパイプライン処理を構築しました。今回は、プッシュしたコンテナイメージをプロダクションとほぼ同等のステージング環境にあるECSクラスタ上にデプロイするパイプラインを構築します。

マイクロサービスのコンテナイメージをデプロイ

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

マイクロサービスのコンテナイメージをデプロイ

事前準備:マイクロサービスのステージング環境の構築

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

ただし、今回の場合、以下の設定部分に留意が必要です。

設定箇所 設定内容 説明
基本設定:ECSタスク定義 タスクサイズ:タスクメモリ SpringBootアプリケーションであれば1024MB以上を目処に設定したほうがベターです。起動時間がかかり、ヘルスチェックがNGになる可能性があります
基本設定:ECSタスク定義 タスクサイズ:タスクCPU 0.25~0.5 vcpuをめどに設定します。ECSクラスタのスペックにもよりますが、小さすぎると上記のタスクメモリの設定同様、起動に時間がかかり、ヘルスチェックがNGになる可能性があります。逆に大きすぎると、パイプライン処理のコンテナ再起動時にリソースが足りず、エラーとなる可能性があります
基本設定:ECSタスク定義 コンテナの編集:コンテナ名 前回作成した「buildspec.yml」のアーティファクトで指定した「imagedefinitions.json」のname属性と一致した名前を設定する必要があります
基本設定:ECSタスク定義 コンテナの編集:イメージ 「buildspec.yml」および「SystemsManagerParameterStore」で環境変数として設定した値のイメージ名とバージョンを指定します

タスクとコンテナの定義の設定

マイクロサービスのステージング環境へのデプロイパイプラインの設定

前回作成したベースのパイプラインに、ステージング環境として構築したECSクラスタにマイクロサービスをデプロイするパイプラインを追加します。 CodePipelineサービスメニューから、前回作成したパイプラインを選択し、「編集する」ボタンを押下して末尾にある「ステージを追加する」ボタンを押下します。

ステージの追加

「アクションを追加する」ボタンを押下して、以下の要領でステージングデプロイアクションを設定します。

  • アクション名:100文字内の任意のアクション名を設定
  • アクションプロバイダー:Amazon ECSを選択
  • リージョン:VPC及びECSクラスタを構築したリージョンを選択
  • 入力アーティファクト前回、作成したマイクロサービスのビルドパイプラインのアウトプットアーティファクトを指定(デフォルトでは、BuildArtifact)
  • クラスタ名:前節で構築したECSクラスタを設定
  • サービス名:前節で起動した、同じコンテナイメージで起動しているECSサービスを選択
  • イメージ定義ファイル:前回のビルドパイプライン処理でアウトプットしたimagedefinitions.jsonのファイル名を設定

※ 入力アーティファクトは、前回のパイプラインの出力アーティファクトですが、S3上に実体となるファイルが保存されています。

アクションの設定

作成が完了したら、「変更をリリースする」ボタンを押下して、パイプラインを実行し直してみましょう。グリーンで表示されれば、正常完了です。ECSタスクのリビジョンが上がり、ECSサービスのイベントログでは、コネクションドレイニングされて、実行コンテナが入れ替わったことがわかります。

グリーンで表示されれば正常完了

ECSサービスのイベントログ

これでBakcendサービスのコンテナイメージをステージング環境へデプロイするパイプラインが完成し、プッシュしたコンテナがECSクラスタ上で起動しました。次回以降は、Web(BFF)アプリケーションをビルドし、Seleniumを使用したE2Eテストを自動実行するパイプラインを作成します。

著者紹介


川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理

金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。

本連載の内容に対するご意見・ご質問は Facebook まで。