AWSのAmplify Studioと、ローカル環境で構築したamplifyを連携するのにとても重要になってくるappId。
これのIdのミスマッチでかなり苦労したのでsolutionをまとめました。
この記事をご覧いただくことで、なぜappIdのミスマッチが起きるのか、ミスマッチが起きないためにはどうすればよいのかを理解することができます。
前提として、amplifyの環境構築は済んでおり、この公式tutorial通りに何度やってもうまくいきません。
amplifyの手順
そもそもamplifyアプリをデプロイするまでに必要な手順を改めて超絶シンプルにまとめました。
やることはこれだけ!簡単そうなんですがこれが結構大変でした。
- amplify init
- amplify add auth
- npm install aws-amplify
- amplify add api
- amplify push
- amplify StudioでGithubのRepoditoryを連携
つまった(疑問を感じた)こと
Amplify studioで実施するこのdeploy。
どこからどこにdeployしているんでしょうか?
調べてみるとAWS AppSync endpoint と Amazon DynamoDB tablesを作っていることがわかりました。
deployという言葉は結構広義に使われるのでわかりにくいですね。
うまくいかなかったこと
ローカルのコマンドラインで以下のamplify構築をします。
- amplify add auth
- amplify add api
- amplify add storage
すると、異なるappIdで新規に生成されてしまいます。
私のやった作成手順
この、異なるappIdが生成される問題に対し、私が行った解決策はこちらです。
ローカルのコマンドライン側からでなく、Amplify Studio側からバックエンドを作成しました。
1. Amplify Studioから「アプリケーションをビルド」
これで空のバックエンドを作ります。
env名はstagingが自動で作られます。
生成したバックエンドにはappIdがついているので、これをpullします。
2. pull
$ amplify pull --appId [アプリのId] --envName staging
upstream changesの同期のために以下を実行
$ amplify pull
このpullを行って湧いてきた疑問
Stackはいつ作られるのか?
なぜこの疑問が湧いてきたかというと、Amplify Stufioからdeployをすると、とにかくこのエラーが出ます。これによってdeployができません。
Currently in UPDATE_ROLLBACK_IN_PROGRESS with reason: The following resource(s) failed to update: [SearchableStack, ConnectionStack].
Stackが溜まっており、その都度、削除しないといけないようなので、Stackが何をトリガーに作られているのかを確認することとしました。
裏で生成されているものではあるんですが、削除しないといけないことには次のステップに進めないのであれば、何者であるか把握しておきたいですよね。
どのタイミングで作られるかを見つけるために、監視すべきは「AppSync」と「CloudFormarionのStack」です。
CloudFormarionのStack
amplify add authで1個と、amplify add api でアプリごとに必要な数分だけ追加されていることが確認できました。
このStackの削除が正常にでき、Amplify Studio側からアプリの生成ができれば、あとは、そのアプリのgraphqlを変更してやればバックエンドの構築完了です!
amplifyの削除方法
最後に、削除方法についてもまとめておきます。
(アプリをいくつも生成、削除したので、削除スキルもアップしました。)
apiを消す場合
$ amplify remove api
dev環境のみ削除する場合
ローカルからの削除
$ amplify env remove dev
cloudからの削除
$ aws amplify delete-backend-environment --app-id <アプリID> --environment-name dev
amplify removeをした場合は、その後一度amplify pushをしてからaplify add をしないとconflictしてerrorになる。
タイトルの結論としては、appIdは、私の確認できた範囲では以下の2箇所で生成されます。
・ローカルのコマンドラインでのamplify init
・Amplify studioでのアプリ生成
そのため、それぞれでamplifyのappを作ったらそれぞれのappIdができてしまうのは当然ですね。
以上、お読みいただきありがとうございました。
コメント