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の仕組みの関係である。