Elixirこんにちは、エムスリーエンジニアの園田です。エムスリーテックブログの続きです。エムスリーでは医療・ヘルスケアサイト向けのコンテンツ配信システムであるChuoiというサービスを運用しています。先日のポストで、ElasticBeanstalkからFargateに運用を切り替えたことについて書きました。利用したデプロイパイプラインの構築について書きます。デプロイ周りは以下のような構成です。トリガとして利用できません。実行するという構成にしました。デプロイパイプラインを構築した際の大まかな手順は以下の通りです。前回の記事にも記載しましたが、再掲します。前回と違い、デプロイパイプラインと直接関係のないファイル類は省略しています。以下のことを行います。別のファイルとしています。内容は以下の通りです。プロジェクトのビルド変数として設定されているものが渡されます。Storeに暗号化されて格納しており、ビルド実行時に復号化されて環境変数としてプロセスに渡されます。ビルトイン変数ではないため、ビルド変数としてプロジェクトに設定する必要があります。"${ECR_REPO_URI}/${repo}:latest"done上のサンプルのIMAGE_TAGを取得する関数get_image_tagは以下のような実装になっています。ビルトイン変数であるCODEBUILD_RESOLVED_SOURCE_VERSIONを、それもなければlatestを返しています。ソースをプッシュする際に生成しています。ソースリポジトリとする場合、コミットハッシュは環境変数CODEBUILD_RESOLVED_SOURCE_VERSIONから取得可能です。利用するので、環境変数からは取得できないため、ファイルに書き出しています。デプロイプロバイダにECSを利用する場合、このimagedefinitions.jsonが必要になります。以下のことをやってくれます。サービスに適用されていない最新のタスク定義があったとしても、そちらは利用されないのでご注意ください。imagedefinitions.jsonポイントは、imagedefinitions.jsonをartifactsとして保存することです。ECSにデプロイできません。リソースを作成するための準備が整いました。各リソースを作成していきます。作成するAWSリソースの一覧マネジメントコンソールでパイプラインを作成する場合に必要なリソースの一覧です。作成する場合と顔ぶれが異なるので注意が必要です。プロジェクト以下はマネジメントコンソール利用の場合に自動生成されるリソースです。テンプレートに含めます。トリガとする場合、以下のバケットが必要です。バケットを作成します。点だけで、バージョニングを有効にするだけです。作成時ではないので注意が必要です。フレンドリではないので作成したほうがいいです。今回の場合はソース格納バケットと共用にしました。ロールは3つあります。作成する場合は定義を実装する必要があります。ロールにまとめました。つにまとめても問題ないと判断しました。ロールのポリシーは以下のようになります。