AWS上でコンテナでのWebアプリの構築(3.CodePipelineで、自動でECSにコンテナをデプロイ)

AWS上でコンテナでのWebアプリの構築(2.ECS+FargateでECRのコンテナイメージを元にコンテナを起動) の記事の続きです。
今回は「CodePipelineで、自動でECSにコンテナをデプロイ」について記事にまとめ、これで、
ソースコードをGitにPush → ECSでコンテナが自動で最新に更新(デプロイされる)
というフローが完成します。

概要

今回は、下記の赤枠の部分について進めます。

前回の記事で、手動でコンテナを起動するところまでは確認できたので、これを自動化する設定を行っていきます。

buildspec設定追記

まず、以前作成した「buildspec.yml」に下記のように修正します。

  1. 後半の3行が追加になっており、 imagedefinitions.json をCodeBuild実行時に作成するようにしています。
  2. 上記修正をしたら一旦Git(この記事ではGitHub)にPushします。

CodePipeline設定

  1. 下記CodePipelineの画面から、「パイプラインを作成する」ボタンを押します。
  2. パイプライン名を入力します。合わせて、自動でIAMに、CodePipeline実行用のロールが作成されます。(後ほどこのロールに対して、ポリシーの追加を行います)
  3. 次に、ソースプロバイダーの設定を行います。CodeBuildのときと同じで、今回GitHubを使っているので、GitHubの認証、リポジトリ、ブランチの指定を行います。
  4. 次に、下記のように 1.の記事 で作成した、CodeBuildのプロジェクトの情報を入力します。
  5. 次に、ECSの情報を入力します。イメージ定義ファイルはとくに入力しなくても大丈夫でした。
  6. 最後に確認画面が表示されるので、「パイプラインを作成する」を押すと完了です。

S3のアクセス権限を追加

完了すると、そのままパイプラインの実行が始まるのですが下記のようにエラーになります。

先程作成したロールに対して、S3の読み込み権限が必要なので、設定します。

  1. IAMのロールの画面より、先程作成したCodePipeline用のロールを選択します。
  2. 下記のようにポリシーを選択し、ポリシーをアタッチします。

CodePipeline実行

  1. 再度下記のようにパイプラインを実行します。(自動で再実行されたかもしれません)
  2. しばらくすると上記は成功し、また、ECSの画面で下記のように、新規にデプロイされていることが確認できます。また、下記は2つタスクが動いていますが、しばらくすると、古いほうが停止されて、新しいもののみになりました。

おわり

ここまでで、AWS上でコンテナでのWebアプリの構築する手順は終わりです。
確認したかった「ソースコードをGitにPush → ECSでコンテナが自動で最新に更新(デプロイされる)」は確認できました。
今後は実際に本番環境を作る上でのセキュリティの部分(VPCなどのネットワーク周りや、コンテナイメージやレジストリのセキュリティ対策やアンチウイルス周りなど)を調査、確認していきたいと思っています。