LoginSignup
6
3

More than 1 year has passed since last update.

CodePipeline『Exception while trying to read the task definition artifact file from: SourceArtifact』エラーの原因と対処法

Posted at

内容

業務でECS FargateのBlue/Greenデプロイ、Codeサービスを利用したCI/CDパイプライン構築を実施しました。(まとめ記事
その際にUdemyの教材などを活用したのですが、そのまま進めるとCodePipelineのデプロイステージで以下の画像のようなエラーが発生しました。

image.png

このエラーの原因自体は、taskdef.jsonファイルのパスが間違っているなどいくつか原因が考えられるのですが、今回は私の当てはまった原因についてまとめたいと思います。

目次

エラーの原因

結論

「ECS Blue/Green デプロイの場合、 taskdef.jsonappspec.yaml を含むアーティファクトの容量を3MB未満にする必要がある」
というのがこのエラーの原因の結論でした。(ドキュメント

今回私の環境として、プロジェクトのルート直下にtaskdef.jsonappspec.ymlを配置、
CodePipelineのソースステージでSourceArtifactとして出力、
デプロイステージの入力アーティファクトとしてこのSourceArtifactを使用する形でtaskdef.jsonappspec.jsonを参照しようとしていたのですが、このSourceArtifactはプロジェクトのソースコードのため、制限の3MBを余裕で超えていました。

いくつか対処法はあるかと思うのですが、今回はこのSourceArtifactではなく、ビルドステージで出力したBuildArtifactを使用する形に変更することで解決しました。

対処法

BuildArtifactで出力

BuildArtifactappspec.ymltaskdef.jsonを出力するように、buildspec.ymlファイルのartifactsの項目を変更します。
ファイルはプロジェクトルートに配置しています。

artifacts:
  files:
    - appspec.yml
    - taskdef.json

CodePipelineのデプロイフェーズ修正

CodePipeline > 対象のパイプライン > 編集 > デプロイステージの「ステージを編集するボタン」 > 「編集」アイコン

  • 入力アーティファクトにSourceArtifactが入っていれば、削除
  • 「AWS ECSタスク定義」をSourceArtifactからBuildArtifactに変更
  • 「AWS CodeDeploy AppSpecファイル」をSourceArtifactからBuildArtifactに変更

image.png

以上でappspec.ymltaskdef.jsonが含まれるアーティファクト(BuildArtifact)の容量は3MB以下がほとんどのため、解決できるようになります。

以上。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3