本連載では、マイクロサービスアーキテクチャでの継続的デリバリ(CD:Continuous Delivery:CD)を以下のようなパイプラインで実装する方法について、解説を進めています。
前回は、バックエンドのマイクロサービスアプリケーションをビルドし、コンテナイメージを作成してDockerHubへプッシュするパイプライン処理を構築しました。今回は、プッシュしたコンテナイメージをプロダクションとほぼ同等のステージング環境にあるECSクラスタ上にデプロイするパイプラインを構築します。
マイクロサービスのコンテナイメージをデプロイ
- ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します。
- ECSエージェントが、前回プッシュしたコンテナをECSクラスタ上にプルします。
- ECSクラスタ上でアプリケーションコンテナが実行されます。
事前準備:マイクロサービスのステージング環境の構築
パイプラインの設定を行う前に、マイクロサービスをデプロイする先であるステージング環境のアプリケーションロードバランサ、ECSクラスタ、タスク定義、サービスの構築を行います。それぞれの作成方法は、連載「AWSで作るクラウドネイティブアプリケーションの基本」の各回で解説した手順と同様です。
- アプリケーションロードバランサ:第5回「AWS ECS上に構築するSpringアプリケーション(2)」
- ECSクラスタ:第8回「AWS ECS上に構築するSpringアプリケーション(5)」
- ECSタスク定義:第9回「AWS ECS上に構築するSpringアプリケーション(6)」
- ECSサービス実行:第10回「AWS ECS上に構築するSpringアプリケーション(7)」
ただし、今回の場合、以下の設定部分に留意が必要です。
設定箇所 | 設定内容 | 説明 |
---|---|---|
基本設定: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サービスのイベントログでは、コネクションドレイニングされて、実行コンテナが入れ替わったことがわかります。 これで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 まで。