🪄
消えたteam-provider-info.jsonのenvを復活させる魔法
envの消失
Amplifyプロジェクトでamplify pullを実行しようとしたところ、次のようなエラーが発生しました。
amplify pull
✖ There was an error pulling the backend environment dev.
🛑 Cannot read properties of undefined (reading 'awscloudformation')
関連するissue:
team-provider-info.json
を確認すると、特定の環境(dev)セクションがいつの間にか消失していることに気づきました…
空っぽの team-provider-info.json
appIdとenvNameを指定
ローカルがdev環境について何も知らない状態になってしまったため、appId
と envName
を指定して再度環境設定を取得しようとしました。
amplify pull --appId <マスク済み> --envName dev
しかし、DeploymentBucketName
が不足していることが新たな問題として浮上しました。
✖ Fetching updates to backend environment: dev from the cloud.
✖ There was an error initializing your environment.
🛑 Could not initialize platform for 'dev': Cannot read properties of undefined (reading 'DeploymentBucketName')
DeploymentBucketNameを追加
手動で DeploymentBucketName
を追加します。
team-provider-info.json
{
+ "dev": {
+ "awscloudformation": {
+ "DeploymentBucketName": "amplify-<マスク済み>-dev-<マスク済み>-deployment"
+ }
+ }
}
この変更を加えた後、amplify pullを再実行すると、今度は StackName
が不足しているという別のエラーが発生しました。
✖ Fetching updates to backend environment: dev from the cloud.
✖ There was an error initializing your environment.
🛑 Could not initialize platform for 'dev': Cannot read properties of undefined (reading 'StackName')
StackNameを追加
StackName
も同じく、手動で team-provider-info.json
に追加しました。
team-provider-info.json
{
"dev": {
"awscloudformation": {
"DeploymentBucketName": "amplify-<マスク済み>-dev-<マスク済み>-deployment",
+ "StackName": "amplify-<マスク済み>-dev-<マスク済み>"
}
}
}
これらの変更を行った後、amplify pullコマンドは正常に実行され、以前は失われていた環境設定を復活させることができました。
amplify pull --appId <マスク済み> --envName dev
✔ Successfully pulled backend environment dev from the cloud.
team-provider-info.json
も無事復活!
team-provider-info.json
{
"dev": {
"awscloudformation": {
"DeploymentBucketName": "amplify-<マスク済み>-deployment",
"StackName": "amplify-<マスク済み>",
+ "AuthRoleName": "<マスク済み>-authRole",
+ "UnauthRoleArn": "arn:aws:iam::<AWSアカウントID>:role/<マスク済み>-unauthRole",
+ "AuthRoleArn": "arn:aws:iam::[AWSアカウントID]:role/<マスク済み>-authRole",
+ "Region": "ap-northeast-1",
+ "UnauthRoleName": "<マスク済み>-unauthRole",
+ "StackId": "arn:aws:cloudformation:ap-northeast-1:[AWSアカウントID]:stack/<マスク済み>/[リソースID]",
+ "AmplifyAppId": "<マスク済み>"
+ },
+ "categories": {
+ "function": {
+ "ScheduledNotification": {
+ "appDomain": "<マスク済み>.jp",
+ "deploymentBucketName": "amplify-<マスク済み>-deployment",
+ "s3Key": "amplify-builds/[ファイル名]-build.zip"
+ }
+ // その他のfunction設定...
+ },
+ // auth, storageなど他のカテゴリ...
+ }
}
}
まとめ
かなりヒヤッとしましたが、リモートの DeploymentBucketName
とStackName
さえ分かれば、消失した環境設定を復活させることが可能であることがわかりました。
Discussion