LoginSignup
0
0

【AWS】Codebuildのエラー「 YAML_FILE_ERROR Message: YAML file does not exist」の原因

Posted at

エラー内容

AWS Codebuildを利用してビルドを行ったら以下のエラーになりました。

[Container] 2023/10/19 02:18:10 Waiting for agent ping
[Container] 2023/10/19 02:18:11 Waiting for DOWNLOAD_SOURCE
[Container] 2023/10/19 02:18:12 Phase is DOWNLOAD_SOURCE
[Container] 2023/10/19 02:18:12 CODEBUILD_SRC_DIR=/codebuild/output/src1489528821/src
[Container] 2023/10/19 02:18:12 Phase complete: DOWNLOAD_SOURCE State: FAILED
[Container] 2023/10/19 02:18:12 Phase context status code: YAML_FILE_ERROR Message: YAML file does not exist

原因と解決方法

エラーメッセージは、DOWNLOAD_SOURCEフェーズでYAMLファイルが見つからない、と言っています。
ビルドプロジェクトのソースコードをダウンロードする際に、指定されたYAMLファイルが存在しないためエラーになったのです。

CodeBuildで設定していたYAMLファイルはデフォルトのままbuildspec.yamlでした。
buildspec.yamlファイルとは、CodeBuildでビルドプロジェクトを実行する際に使用されるビルドスクリプトの設定ファイルのこと。

今回は、このファイルが存在しない状態でビルドしていたため、エラーが発生しました。
(作るのを忘れていました...)

設定箇所は、具体的には以下になります。

CodeBuild -> ビルドプロジェクト -> 編集 -> Buildspec

image.png

親切に説明も記載されています。

CodeBuild のデフォルトでは、buildspec.yml という名前のファイルがソースコードルートディレクトリで検索されます。buildspec ファイルに別の名前または場所を使用している場合は、ここにソースルートからのパス (buildspec-two.yml や configuration/buildspec.yml など) を入力します。

デフォルトから編集していないので、ソースリポジトリのプロジェクトルート直下にpushしてあげると解決します。

ちなみに、buildspec.yamlは以下のような形式で作成します。

version: 0.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Logging in to Docker Hub...
      - docker --version
      - docker login -u $USER_DOCKER -p $DOCKER_KEY
      - echo Building the Docker image...
      - docker build -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$REPOSITORY:latest .
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$REPOSITORY:latest
      - echo Writing image definitions file...
      - printf '{"name:"XXXXX","imageURI":"%s"}' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$REPOSITORY:latest > imageDetail.json
      - cat imageDetail.json
artifacts:
  files:
      - imageDetail.json
  discard-paths: yes

$AWS_DEFAULT_REGION$AWS_ACCOUNT_IDは環境変数で、AWS Codepipelineのビルドステージで設定することができます。ビルドが開始される前にビルド環境に読み込まれるものなので、AWSの各種リソースにアクセスするための認証情報、Dockerレジストリにログインする際に必要な情報などを設定します。buildspec.yamlに直接書いても良いですが、セキュリティ上の理由から実際の値は書かずに環境変数としてAWS側(他にもSecret ManagerやParameter Store等)で持たせることが多いと思います。

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