開発者がAWS CodeBuildを使用してDockerイメージをビルドし、Amazon ECRへプッシュするbuildspec.ymlを以下のように作成しました。 phases: pre_build: commands: - aws ecr get-login-password | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com build: commands: - docker build -t myapp:latest . post_build: commands: - docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest このbuildspec.ymlを実行すると、post_buildフェーズのdocker pushが失敗します。原因として最も考えられるのはどれですか?
buildフェーズでビルドしたイメージは `myapp:latest` というローカルタグのみを持ちます。ECRへプッシュするには `docker tag myapp:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest` でECRリポジトリURIのタグを付与してからpushする必要があります。post_buildで push する前に `docker tag` コマンドを追加することで解決します。 選択肢Aの buildspec.ymlのフェーズ実行順は install → pre_build → build → post_build の固定順序です。pre_buildは常にbuildより前に実行されるため認証タイミングの問題はありません。 選択肢Cの ECRへのプッシュにS3の権限は不要です。必要なのは ecr:GetAuthorizationToken、ecr:BatchCheckLayerAvailability、ecr:PutImage 等のECR権限のみです。 選択肢Dの post_buildフェーズがbuildの結果に関わらず実行されることはdocker pushをLambdaで行う理由にはなりません。post_buildはbuild後処理(push、通知など)に使う標準的なフェーズです。