🍬

amplify pushしたら、s3へのアクセスエラーでデプロイできなくなった。

2023/02/13に公開

ピンポイントな障害の記事です。
世の中の情報が、かなり少なそうなので残しておきます。
使用している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月に何か対応をしてるように見える
  • 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のこのコメントのおかげで対応できました。これがなかったら無理でした。。。
https://github.com/aws-amplify/amplify-cli/issues/8781#issuecomment-999444447

この事象が発生する理由

正確なところは把握していないのですが、

  • 事前にビルド失敗した時のamplify pushにより、ポリシーが対象とするファイルが書き換わる
  • ビルド失敗したので、対象のファイルが消される。が、ポリシーはそのまま。
  • その後、amplify pushすると、ポリシーが指定するファイルが存在しないのでエラーになる?

みたいな感じかとと思います。

最後に

  • この事象が発生したら、おそらく手動でポリシーを操作しないと2度とデプロイできなくなります(ひどい)
  • 特にヤバいところは、ビルド失敗がトリガーになっているところです。ビルド失敗している時点で何かをミスっている訳ですが、その状態でこの事象が追加されるので非常に焦りますし混乱します。エラーを直したはずなのに別なエラーがでる恐怖。
  • ApiPipelinePipelineSourceCodePipelineActionRoleDefaultPolicyとかいうふざけたポリシー名、なんとかならなかったの?
NCDCエンジニアブログ

Discussion