1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CodePipelineの突然のエラーとその対処方法について

1
Posted at

CodePipelineが突然すべて失敗した話とAWS CI/CD制限まとめ

AWSのCI/CD環境を構築した際に、
最初は正常に動いていたのに、数日後にすべてのパイプラインが失敗する
という問題に遭遇しました。

調査した結果、原因は AWSの仕様によるArtifactサイズ制限 でした。

本記事では、実際に起きた問題と対応方法、さらにCI/CD構築時に注意すべきAWS制限をまとめます。


背景

プロジェクト内で、開発効率を上げるために CI/CDの自動化 を導入しました。

構成は次の通りです。

  • CodeCommit(Gitリポジトリ)
  • CodePipeline(CI/CDパイプライン)
  • CodeDeploy(デプロイ処理)
  • ECS(コンテナ実行)
  • ECR (ソースコード管理)

開発者が CodeCommitにPushすると自動でデプロイされる環境 を構築しました。


CodePipelineの処理の流れ

今回のCI/CDの流れは次のようになっています。
image.png

  1. CodeCommitへソースコードをPush
  2. CodePipelineが自動起動
  3. Artifact(成果物)を生成
  4. CodeDeployへ受け渡し
  5. ECSへデプロイ

ここで重要になるのが Artifact です。


Artifactとは

Artifactとは、
パイプライン間で受け渡される成果物 のことです。

以下は、本件のCodePipelineのArtifactのみに注目した図です。
image.png
※各ステージに関しては、案件など構築するものにより異なります。

イメージとしては zipファイルのようなもの で、次のようなファイルが含まれます。

  • ソースコード
  • 設定ファイル
  • デプロイ定義

ECSデプロイで必要なファイル

ECSにCodeDeployでデプロイする場合、次のファイルが必要になります。

taskdef.json
appspec.yml

それぞれの役割は次の通りです。

ファイル 役割
taskdef.json ECSタスク定義
appspec.yml CodeDeployのデプロイ設定

最初は正常に動作していた

CI/CD環境構築後、確認のため軽微な修正をコミットしました。

その結果

  • CodePipeline起動
  • ECSデプロイ成功

問題なく動作していることを確認しました。


数日後にすべてのパイプラインが失敗

その後、開発にてコミットを使用したところ、
CodePipelineが次のエラーで失敗するようになりました。

image.png
Exception while trying to read the task definition artifact file from: SourceArtifact


原因

原因は Artifactサイズ制限 でした。

ECSデプロイで使用するArtifactには3MB制限というAWS仕様があります。

Artifactのサイズがこの制限を超えると
CodeDeployがファイルを読み取れずエラーになります。
image.png


なぜ最初は成功していたのか

最初の確認コミットでは

  • 構築当初でソースファイルが小さかった。
  • Artifactサイズが小さい

ため、問題なく動作していました。

しかし開発が進みファイルが増えた結果、
Artifactサイズが 3MBを超えてしまった ためエラーが発生しました。

つまり

CI/CDが壊れたのではなく
AWSの仕様制限に引っかかっていた

という状態でした。


対応方法

対応として、Artifactの構成を整理しました。

具体的には

  • 不要ファイルを削除
  • デプロイに必要なファイルのみArtifactに含める
  • デプロイ専用ディレクトリを作成

deploy/
├ taskdef.json
└ appspec.yml

これによりArtifactサイズを削減し、
CodePipelineは正常に動作するようになりました。


再発防止

同様の問題を防ぐため、CI/CD構成を見直しました。

  • Artifact専用ディレクトリを作成
  • 不要ファイルを除外
  • デプロイ構成の整理

CI/CDでは Artifactの設計が非常に重要 だと学びました。


学んだこと

今回の経験から次のことを学びました。

  • CI/CDは最初の成功だけでは安心できない
  • AWS構築時には仕様制限の確認が必要

まとめ

CodePipelineは非常に便利ですが、AWSの仕様制限に注意が必要です。

特にECSデプロイでは Artifactサイズ制限(3MB) があるため、

  • デプロイ専用ディレクトリの作成
  • Artifact構成の整理

を最初に設計しておくことが重要です。

CI/CD構築時の参考になれば幸いです。

参考文献

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?