💡
Amplify CLIを使って、作成済みのDynamoDBテーブルをアプリにimportする
GraphQL (AppSync)やREST APIですでに作成済みのDynamoDBテーブルにアクセスしたい場合、Amplify CLIでデータをインポートする必要があります。
Storageとしてimportする必要がある
これ結構な罠な気がしますが、DynamoDBのテーブルはStorageとしてimportします。
amplify import storage
を実行すると、S3バケットかDynamoDBかを質問されるので、ここでDynamoDBを選びましょう。
% amplify import storage
? Please select from one of the below mentioned services:
S3 bucket - Content (Images, audio, video, etc.)
❯ DynamoDB table - NoSQL Database
Import対象は自動で表示してくれる
Amplify Projectのあるリージョンと同じである必要がありそうですが、Importするテーブルの候補はCLI側が出してくれます。
? Select the DynamoDB Table you want to import: …
Archive
Archive-development
Artifact
Artifact-development
複数選択はできないので、複数テーブルをimportしたい場合は何回か実行しましょう。
また、amplify env
でdev / prodなどの複数環境を運用している場合も、amplify env checkout [env]
した後にその環境で使うDynamoDBテーブルをimportする必要があります。
amplify status
Import後のamplify import storage
した後の状態がこのような形でした。
ApiはAppSyncを使ったGraphQL API1つです。
% amplify status
Current Environment: dev
| Category | Resource name | Operation | Provider plugin |
| -------- | -------------------- | --------- | ----------------- |
| Api | amplifytask1 | Update | awscloudformation |
| Auth | amplifytask134bf6c11 | No Change | awscloudformation |
| Storage | Sitedevelopment | Import | awscloudformation |
ApiにもUpdate
がついているのは、内部でimportしたDynamoDBを使えるようにするUpdateをするためと思われます。
amplify/
の差分
[Appendix] + },
+ "storage": {
+ "Sitedevelopment": {
+ "service": "DynamoDB",
+ "serviceType": "imported",
+ "providerPlugin": "awscloudformation",
+ "dependsOn": []
+ }
}
}
\ No newline at end of file
diff --git a/amplify/team-provider-info.json b/amplify/team-provider-info.json
index 241cdde..a249967 100644
--- a/amplify/team-provider-info.json
+++ b/amplify/team-provider-info.json
@@ -19,6 +19,16 @@
"webClientId": "xxxxxx",
"nativeClientId": "xxxxxx"
}
+ },
+ "storage": {
+ "Sitedevelopment": {
+ "tableName": "Site-development",
+ "region": "us-east-1",
+ "arn": "arn:aws:dynamodb:us-east-1:99999:table/Site-development",
+ "streamArn": "arn:aws:dynamodb:us-east-1:999999:table/Site-development/stream/2017-05-31T03:34:39.024",
+ "partitionKeyName": "ID",
+ "partitionKeyType": "S"
+ }
}
}
}
Discussion