はじめに
Code PipelineからEC2にCodeDeployする際に、想定以上に手を取られました
起こった事象と対応方法をShareします
事象と対策
EC2のデプロイが途中で止まる
CodeBuildの設定をCodeBuild内のエディタで1行
go build -o xxxx main.go
としていると、CodeDeployが途中で止まり、5分でタイムアウトになりエラーとなります
その際のメッセージが、S3にアーティファクトを取りに行ったけど「S3へのアクセス権限がない」というものです
RoleやPolicyを確認しますが、特に不味そうなところはなく...
手を抜かずに、buildspec.ymlを作成し、そのArtifactsにビルド後のファイル名(xxxx)を記載したところ、解決しました
EC2にデプロイできない
デプロイ先に同名のファイルがあるとダメなようです
BeforInstallに、デプロイ先のファイルを削除するshellファイルを指定すれば大丈夫でした
appspec.ymlがないと怒られる
これは単純にCodeBuildのArtifactsに、appspec.ymlがないだけでした
参考までに、今回使ったbuildspec.ymlとappspec.ymlを載せておきます
(1部改変しています)
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
golang: 1.21
build:
commands:
- go build -o xxxx main.go
artifacts:
files:
- xxxx
- appspec.yml
- hooks/rm_xxxx.sh
appspec.yml
version: 0.0
os: linux
files:
- source: /xxxx
destination: /home/ec2-user/bin
hooks:
BeforeInstall:
- location: hooks/rm_xxxx.sh
timeout: 5
以上、同じエラーで困っている方の参考になれば嬉しいです