なぜこのような記事を書こうと思ったのか
Amplifyって便利ですよね。いつものように、さぁローカルで開発したものをGithubにプッシュしてAmplifyでビルドしよっ! と軽い気持ちでgit pushすると以下のようなエラーが…
2022-03-10T12:01:33.847Z [INFO]: UPDATE_FAILED UpdateRolesWithIDPFunction AWS::Lambda::Function Thu Mar 10 2022 12:01:29 GMT+0000 (Coordinated Universal Time) Template error: IAM role amplify-hogehoge-prod-12155-authRole-idp doesn't exist
2022-03-10T12:01:33.933Z [INFO]:
2022-03-10T12:01:33.934Z [INFO]: UPDATE_ROLLBACK_IN_PROGRESS amplify-hogehoge-prod-12155-apihogehoge-GD1BRHGL04QW AWS::CloudFormation::Stack Thu Mar 10 2022 12:01:29 GMT+0000 (Coordinated Universal Time) Initiated by parent stack
2022-03-10T12:01:43.845Z [INFO]:
2022-03-10T12:01:43.847Z [INFO]: UPDATE_FAILED apihogehoge AWS::CloudFormation::Stack Thu Mar 10 2022 12:01:40 GMT+0000 (Coordinated Universal Time) Resource update cancelled
### 以下同じようなROLLBACK系のログが大量に出る ###
2022-03-10T12:02:24.057Z [WARNING]: ✖ An error occurred when pushing the resources to the cloud
2022-03-10T12:02:24.057Z [WARNING]: ✖ There was an error initializing your environment.
2022-03-10T12:02:24.063Z [INFO]: ResourceNotReady: Resource is not in the state stackUpdateComplete
### どうでもよさそうなログなので割愛 ###
2022-03-10T12:02:24.122Z [ERROR]: !!! Build failed
2022-03-10T12:02:24.123Z [ERROR]: !!! Non-Zero Exit Code detected
2022-03-10T12:02:24.123Z [INFO]: # Starting environment caching...
2022-03-10T12:02:24.123Z [INFO]: # Uploading environment cache artifact...
2022-03-10T12:02:24.243Z [INFO]: # Environment caching completed
このログを見ていて、特に以下の部分が気になりました。
Template error: IAM role amplify-hogehoge-prod-12155-authRole-idp doesn't exist
なんでかというと、直近で、IAMのロール、なんかゴミがいっぱいあるから使って無さそうなのけしちゃえ! と思って不要そうなものを消してしまったら。でもこれ、消しちゃいけなかったっぽいです。
authRole/unauthRoleとは何者なのか
authRoleとunauthRoleは一番最初にamplify initをしたときに生成されるIAMのポリシーだそうです。以下に記載があるように、アプリにログインするユーザーに適用されるauthRoleとゲストユーザーに適用されるunauthRoleということです。
Amplify CLIで自動で生成される「team-provider-info.json」にも書かれているように、これらのポリシーはCloudFormationでリソースを作成する際にも使われるため、これがないとビルドプロセスのバックエンドのフェーズでコケるのではと思います。
{
"dev": {
"awscloudformation": {
"AuthRoleName": "hoge-authRole",
"UnauthRoleArn": "arn:aws:iam::hoge:role/hoge-unauthRole",
"AuthRoleArn": "arn:aws:iam::hoge:role/hoge-authRole",
"Region": "ap-northeast-1",
"DeploymentBucketName": "amplify-hoge-deployment",
"UnauthRoleName": "amplify-hoge-unauthRole",
"StackName": "amplify-hoge",
"StackId": "arn:aws:cloudformation:ap-northeast-1:014913632072:stack/amplify-hoge/hoge",
"AmplifyAppId": "hoge"
},
"categories": {
"auth": {
"hoge084cdc0e": {}
}
}
}
}
対処
新しくIAMを作成した上で上記team-provider-info.jsonのAuthRoleName、AuthRoleArnなどを書き換えてAmplify pushした後にビルドしたがうまくいきませんでした。結局、amplify initをやりなおして両ポリシを再生することでうまくいきました。恐らくもっと良い方法があるのですが、正直、amplify initからやり直しちゃったほうが初心者にはわかりやすくて良いように思います。