🪄

消えたteam-provider-info.jsonのenvを復活させる魔法

2024/02/29に公開

envの消失

Amplifyプロジェクトでamplify pullを実行しようとしたところ、次のようなエラーが発生しました。

amplify pull
✖ There was an error pulling the backend environment dev.
🛑 Cannot read properties of undefined (reading 'awscloudformation')

関連するissue:
https://github.com/aws-amplify/amplify-cli/issues/4005#issuecomment-762849484

team-provider-info.json を確認すると、特定の環境(dev)セクションがいつの間にか消失していることに気づきました…


空っぽの team-provider-info.json

appIdとenvNameを指定

ローカルがdev環境について何も知らない状態になってしまったため、appIdenvName を指定して再度環境設定を取得しようとしました。

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など他のカテゴリ...
+   }
  }
}

まとめ

かなりヒヤッとしましたが、リモートの DeploymentBucketNameStackName さえ分かれば、消失した環境設定を復活させることが可能であることがわかりました。

Discussion