Amplify Studioでモデルを作ろうとしたら、idがプライマリーキーとして登録されていて変更できないという経験をお持ちではないでしょうか?
ここでも、デバイスのテーブルを作ろうとしたのですが、各デバイスはDeviceIDを持っていて、このDeviceIDをプライマリーキーにしたいという場合の解決方法です。
解決: @primaryKeyを使いましょう
Amplifyのアプリケーションフォルダ配下 backend\api\APP_NAME
にあるschema.graphql
を編集します。
# 変更前
type MetcomDevices @model @auth(rules: [{allow: public}]) {
id: ID!
DeviceID: String!
Name: String
AppID: String
Latitude: Float
Longitude: Float
Accuracy: Float
Calibration: Boolean
}
# 変更後
type MetcomDevices @model @auth(rules: [{allow: public}]) {
DeviceID: String! @primaryKey
Name: String
AppID: String
Latitude: Float
Longitude: Float
Accuracy: Float
Calibration: Boolean
}
プライマリーキーに設定したいフィールドに@primaryKey
を付与するだけです。@key
で指定する方法はAmplify GraphQL Transformer v2以降使えなくなりました。
スキーマを書き換えた後、プッシュしたいのですが、プライマリーキーを変更すると、DyanamoDB上の該当テーブルの情報がクリアされるそうなので、それを明示的に指定して、プッシュします。--allow-destructive-graphql-schema-updatesオプションを追加するだけです。
amplify push --allow-destructive-graphql-schema-updates
確認
プライマリーキーが切り替わったことを確認するために、Amplify Studioを立ち上げてData modelingを見てみました。
残念ながら、Visual editorは使えなくなっていました。プライマリーキーが想定したものじゃなくなっているからという理由のようです。
でも、DyanamoDBのテーブル概要を見ると、ちゃんとidからDeviceIDに切り替わっていました。