amplify pushしたら、s3へのアクセスエラーでデプロイできなくなった。
ピンポイントな障害の記事です。
世の中の情報が、かなり少なそうなので残しておきます。
使用しているamplify-cliのバージョンが古かったので、最新版使っていれば出ないかもしれないです。(でも、本番で使っているから安易にバージョンを上げたくないです。。。)
2023/04/12追記
現時点の最新であるamplify-cliの11.0.3でも発生しました。駄目じゃん。
事象
amplify push
しても、エラーになってデプロイに失敗する。
- こんなエラーが出る
UPDATE_FAILED DeploymentAwaiter AWS::CloudFormation::CustomResource Fri Feb 10 2023 06:39:48 GMT+0000 (Coordinated Universal Time) Received response status [FAILED] from custom resource. Message returned: The execution didn't succeed Logs: /aws/lambda/amplify-xxxxxxxx-AwaiterCustomCompleteHan-xxxxxxxx at Runtime.exports.handler (/var/task/index.js:102:13) at processTicksAndRejections (internal/process/task_queues.js:97:5) (RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
UPDATE_FAILED ApiPipelinePipelineSourceCodePipelineActionRoleDefaultPolicyxxxxxxxx AWS::IAM::Policy Fri Feb 10 2023 06:39:48 GMT+0000 (Coordinated Universal Time) Resource update cancelled
- CodePilelineを見るとビルドにすら到達しておらず、SourceをS3から取得する処理で失敗している
"Could not access the Amazon S3 object: "amplify-xxx-dev-xxx-deployment/amplify-builds/xxx-xxxxxxxxxxxxxxxxxxxx-build.zip". Make sure that the names of the bucket and object are both correct, and that the action IAM role has sufficient permissions to access this bucket."
前提となる状況
- amplify-cliのバージョンは
7.6.9
- 2023/02/10時点の最新は
10.7.1
なので、今回使用していたcliは古い - 新しければ直っているかは不明だが、amplify-cliのissueを追う限りだと2022年5月に何か対応をしてるように見える
- 2023/02/10時点の最新は
- REST APIをContainerで作成している
- 今回の事象が発生する前に、全く関係ない理由で
amplify push
時にビルドで失敗した- このビルド失敗が、今回の事象のトリガーになっている
解決方法
CodePipelineからS3のオブジェクトにアクセスできていないことが直接的な原因なので、手動で権限を付けてあげる
具体的な対応方法
- AWSコンソールから、
IAM
>ロール
の画面を開きApiPipelinePipelineSourc
で検索して、該当のロールを探す。 -
ApiPipelinePipelineSourceCodePipelineActionRoleDefaultPolicy
で始まるポリシーがアタッチされているので、編集を押下する。 -
s3:GetObject*
許可されているリソースがarn:aws:s3:::amplify-(アプリ名)-(env)-(何かの数字)-deployment/amplify-builds/(アプリ名)-(ランダムな文字列)-build.zip
となっており1オブジェクト(=1ファイル)にのみに制限されているが、このファイルはS3上に存在しない。object名を*にして広くアクセス権をつける。 - 再度
amplify push
すると成功する
参考文献
issueのこのコメントのおかげで対応できました。これがなかったら無理でした。。。
この事象が発生する理由
正確なところは把握していないのですが、
- 事前にビルド失敗した時の
amplify push
により、ポリシーが対象とするファイルが書き換わる - ビルド失敗したので、対象のファイルが消される。が、ポリシーはそのまま。
- その後、
amplify push
すると、ポリシーが指定するファイルが存在しないのでエラーになる?
みたいな感じかとと思います。
最後に
- この事象が発生したら、おそらく手動でポリシーを操作しないと2度とデプロイできなくなります(ひどい)
- 特にヤバいところは、ビルド失敗がトリガーになっているところです。ビルド失敗している時点で何かをミスっている訳ですが、その状態でこの事象が追加されるので非常に焦りますし混乱します。エラーを直したはずなのに別なエラーがでる恐怖。
-
ApiPipelinePipelineSourceCodePipelineActionRoleDefaultPolicy
とかいうふざけたポリシー名、なんとかならなかったの?
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion