やったこと
- CodeBuildでdocker imageをbuildして、ECR repositoryへpush
先にまとめ
- つまずきポイント2点
- CodeBuildでdockerを使う場合は PrivilegedのチェックをONに
- CodeBuild実行中docker pullのrequest上限に達してBuildエラー
buildspec.ymlの処理内容
version: 0.2
phases:
install:
runtime-versions:
python: 3.9
commands:
- export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
build:
commands:
- docker build -t otakashi-test-image .
post_build:
commands:
- aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
- docker tag otakashi-test-image:latest xxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/otakashi-test-repository:latest
- docker push xxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/otakashi-test-repository:latest
- sls deploy --stage $STAGE
buildspec.ymlの処理内容を先に置いておきます
docker buildを実行して、その後docker pushしています
まだrepositoryが存在していない場合はエラーになるはずなのでCloudFormationでECRのrepositoryを作りましょう
buildspecからCloudFormationのビルドを行う場合は、このエラーを回避するため初回のみdocker pushの記述をコメントアウトする必要があります(CFnのビルド成功後、コメントアウトを解除してdocker pushを実行させる)
CloudFormationの実装内容
Resources:
ECRRepository:
Type: AWS::ECR::Repository
Properties:
RepositoryName: otakashi-test-repository
想像してたよりシンプル…
つまずきポイント
CodeBuildでdockerを使う場合は PrivilegedのチェックをONに
CodeBuildのPrivileged設定をOFFのままでdocker buildを実行する際エラーが発生しました
[Container] 2023/03/23 09:15:19 Running command docker build -t codebuild-test .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
CodeBuildでdocker imageをbuildする場合(dockerを扱う場合は)CodeBuild作成時にPrivilegedの設定をONにしましょう
CodeBuild実行中docker pullのrequest上限に達してBuildエラー
CodeBuild実行時に下記のエラーが発生しました
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
原因
- 東京regionに存在する8つのCodeBuildが存在し、いずれかのIPが付与されたCodeBuildを使っている
- 運が悪ければ100pull の上限に達しているIPのCodeBuildで実行されてこのエラーが発生する
対策としては、
CodeBuildガチャなので再度実行する(今回はこっちで乗り越えた)
本当はdocker hubのアカウントを作成し、CodeBuildからdocker hubへログインする処理を加えるのが真っ当な策