概要

AWSサポートより、CodeBuildにおけるUbuntu14.04 EOL通知が来たのでその対応時にハマった点を記録する。

TL;DR

  • OSはUbuntuのまま
  • RuntimeをStandardにする
  • Imageをaws/codebuild/standard:2.0へ変更する
  • buildspecで Runtime(docker: 18) を指定する
  • aptはapt-getへ変更する
  • sudoは要らない
  • The policy's default version was not created by enhanced zero click role creation or was not the most recent version created by enhanced zero click role creation. が出たら、Allow AWS CodeBuild to modify this service role so it can be used with this build project のチェックを外す

Image

元々、UbuntuのRuntimeでBaseを使用していたところ、これが14.04だった。

まず、これらをStandardへ変更し、Imageは aws/codebuild/standard:2.0 へ変更する必要がある。

buildspec.

そのままだと動かず YAML_FILE_ERROR Message: This build image requires selecting at least one runtime version. というエラーが出る。
例のごとく日本語ドキュメントはまだ対応していないようだが、英語のドキュメントにはbuildspecにruntime versionを記載するように書いてある。
具体的には下記を追加する。

phases:
  install:
    runtime-versions:
      docker: 18

aptからapt-getへ

また、baseではsudoが必要だったが、不要になっているし、apt実行時にwarningになるのでapt-getへ変更する。

Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: apt update && sudo apt-get -y install mysql-client curl. Reason: exit status 127 

sudoは不要

sudoを使っているとsudoが見つからないとなるので、削除してしまう。sudoがなくてもパッケージインストールは出来る。

/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: sudo: not found 

The policy’s default version was not created by enhanced zero click role creation or was not the most recent version created by enhanced zero click role creation

これは自動的に作成されたIAMポリシーを手動で編集したりすると出てしまうらしい。
Allow AWS CodeBuild to modify this service role so it can be used with this build project のチェックを外すことで解決できる。
そのかわりポリシーが不足した場合は、対象のIAMポリシーを手動で編集が必要。


以上で移行が行えた。
CodeBuildはCircleCIとかでやっていたことをAWSに統合することができたりして便利だけど、CircleCIにはあってCodeBuildには無い機能(トラブル時にSSHして確認する機能)があるので、少し癖を掴む必要がある。
特にAWSのこの手のサービスは全て裏でDockerが動いているようなので、その辺を意識しながらトラブルシュート出来ると良さそう。
上記に移行の一つ一つは大したことはないけど、重なると対応にそれなりに時間がかかるのでメモとして残しておきます。

参考URL

カテゴリー: AWSCodeBuild