内容
業務でECS FargateのBlue/Greenデプロイ、Codeサービスを利用したCI/CDパイプライン構築を実施しました。(まとめ記事)
その際にUdemyの教材などを活用したのですが、そのまま進めるとCodePipelineのデプロイステージで以下の画像のようなエラーが発生しました。
このエラーの原因自体は、taskdef.json
ファイルのパスが間違っているなどいくつか原因が考えられるのですが、今回は私の当てはまった原因についてまとめたいと思います。
目次
エラーの原因
結論
「ECS Blue/Green デプロイの場合、 taskdef.json
や appspec.yaml
を含むアーティファクトの容量を3MB未満にする必要がある」
というのがこのエラーの原因の結論でした。(ドキュメント)
今回私の環境として、プロジェクトのルート直下にtaskdef.json
とappspec.yml
を配置、
CodePipelineのソースステージでSourceArtifact
として出力、
デプロイステージの入力アーティファクトとしてこのSourceArtifact
を使用する形でtaskdef.json
とappspec.json
を参照しようとしていたのですが、このSourceArtifact
はプロジェクトのソースコードのため、制限の3MBを余裕で超えていました。
いくつか対処法はあるかと思うのですが、今回はこのSourceArtifact
ではなく、ビルドステージで出力したBuildArtifact
を使用する形に変更することで解決しました。
対処法
BuildArtifactで出力
BuildArtifact
でappspec.yml
とtaskdef.json
を出力するように、buildspec.yml
ファイルのartifactsの項目を変更します。
ファイルはプロジェクトルートに配置しています。
artifacts:
files:
- appspec.yml
- taskdef.json
CodePipelineのデプロイフェーズ修正
CodePipeline > 対象のパイプライン > 編集 > デプロイステージの「ステージを編集するボタン」 > 「編集」アイコン
- 入力アーティファクトに
SourceArtifact
が入っていれば、削除 - 「AWS ECSタスク定義」を
SourceArtifact
からBuildArtifact
に変更 - 「AWS CodeDeploy AppSpecファイル」を
SourceArtifact
からBuildArtifact
に変更
以上でappspec.yml
とtaskdef.json
が含まれるアーティファクト(BuildArtifact)の容量は3MB以下がほとんどのため、解決できるようになります。
以上。