事象
AWS AmplifyのコンソールからNext.jsアプリケーションをデプロイしたとき、以下のエラーでデプロイが失敗する。
Error updating stack: UPDATE_ROLLBACK_IN_PROGRESS The following resource(s) failed to update: [ImagePublishingRoleDefaultPolicy, StagingBucket].
解決策
ECRリポジトリにcdk-hnb659fds-container-assets-[account ID]-[region]
という名前のリポジトリが存在するか確認し、なければ手動で作成しましょう。
解説
- Amplifyのデプロイロジックは裏でCDKが動いている
-
cdk bootstrap
が実行されると、CDKがAWSリソースを生成するために必要な前準備を行う。具体的には以下リソースが作成される。- S3バケット
- AWS Lambda関数コードやアセットなどの CDK プロジェクトファイルを保存するために使用
- ECRリポジトリ(private)
- Dockerイメージの保存に使用
- IAMロール
- デプロイを実行するために必要なアクセス許可を AWS CDK に付与するように設定される
- 参考:https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/bootstrapping.html
- S3バケット
- この3つのリソースをBootstrap Resourceと呼ぶ
- Bootstrap ResourceになっているECRリポジトリを誤って削除してしまうと、cdk bootstrapが失敗していしまう。
- ログにあった
ImagePublishingRoleDefaultPolicy
は、Fn::Sub: "${ContainerAssetsRepository.Arn}"
でBootstrap ResourceのECRリポジトリを参照している。 - ソースコード:https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml#L427C3-L427C35