Schemaを修正した場合のアップデートの仕方
何度schemaを修正してから、Amplifyのバックエンドが壊れ、その度に初期構築からやり直しをしてきただろう。。。
特にCognitoが絡んできてからは、頻繁に起こった。
ようやく、schemaを修正してから、amplifyのアップデートの仕方がわかった!!
まずは、schemaを修正。
でも、ここの作りは、AppSync & DynamoDBとモロに関連するので、できれば複数の環境でテストできた方が安全。
次に、ステータスを確認
amplify status
api の欄がupdateとなっていれば確認完了。
ここがポイント!
次に、スキーマを再実行して更新。
amplify codegen models
公式サイトより、
「これにより、変更が評価され、基になるデバイス上のストレージ構造に影響を与える変更が検出された場合は、バージョン管理されたハッシュが作成されます。たとえば、タイプが追加/削除されたり、フィールドが必須/オプションになったりします。DataStore は起動時にこのバージョンを評価し、変更がある場合はデバイスのローカル アイテムが削除され、クラウドと同期している場合はAppSync からの完全同期が行われます。」
とのこと。
更新完了後、念の為ステータスを確認。
amplify status
まだapi の欄はupdateとなっているはず。
ここでプッシュ
amplify push
を実行。するとエラーが出て、
「An error occurred when pushing the resources to the cloud
🛑 An error occurred during the push operation: /
Removing a model from the GraphQL schema will also remove the underlying DynamoDB table.
This update will remove table(s) [CheckListTable]
ALL EXISTING DATA IN THESE TABLES WILL BE LOST!
If this is intended, rerun the command with '--allow-destructive-graphql-schema-updates'.」
(翻訳)
「リソースをクラウドにプッシュするときにエラーが発生しました
🛑 プッシュ操作中にエラーが発生しました: /
GraphQL スキーマからモデルを削除すると、基礎となる DynamoDB テーブルも削除されます。
この更新によりテーブルが削除されます [CheckListTable]
これらのテーブルの既存のデータはすべて失われます。
これが意図されている場合は、'--allow-destructive-graphql-schema-updates' を指定してコマンドを再実行してください。」
と出る。
初回であれば、最後に
amplify push -allow-destructive-graphql-schema-updates
と実行。
これで、Amplifyのバックグラウンドを壊すことなく、AppSync & DynamoDB のテーブル構造の修正&更新ができる!
※これは「1度」成功すれば、2回目からはamplify push だけで行けた。 手順の順番を守ことが重要みたい。
■アプリケーションを壊すやり方
3つある。どれが先でも、どちらか一つでも、壊れた。。。(AppSyncが効かなくなった)。
2度と、繰り返すことのないようにしたい!
1 schema修正後、
amplify push --y
をいきなり実行すること。
2 これも意味わからず
amplify update api
を実行すること。
3 DynamoDBのテーブルを手動で削除すること。
■理屈的なこと
以下はAppSyncとDynamoDBの仕組みの関係である。