AWS Amplify Gen 2 のバックエンド構成ファイル「amplify_outputs.json」と AWS リソースの関連付けを確認してみる
いわさです。
先日 AWS Amplify Gen 2 を使って、テンプレートか初歩的なアプリケーションのデプロイと、少しだけカスタマイズを行いました。
上記記事では Amplify Auth という認証コンポーネントを使っており、Amplify Auth の基盤は Cognito ユーザープールです。
Cognito ユーザープールリソースが作成されるのですが、何か2つ作成されていることに気が付きました。
そういえば運用環境の他にサンドボックスを作成していることに気が付きました。これか。
どのリソースがサンドボックス?
なんとなくチュートリアルの手順に従って動作させている状態だと、どのコードや設定ファイルがどこに関連付けされているのか全くわからないまま進んでいると思います。
Quickstart の序盤で Amplify コンソールから amplify_outputs.json というファイルをダウンロードし、動作確認させたことを覚えていますでしょうか。
Amplify でホスティングされるアプリケーションクライアントを介して、様々なバックエンドサービスに接続することになるのですが、そのバックエンドの構成情報やエンドポイントなどの設定が記された構成ファイルとなっています。
Quickstart テンプレートの場合は認証とデータについて始めから構成されており、認証は前述のとおり Cognito、そしてデータは AppSync と DynamoDB が使われています。
この構成ファイルの情報を基にどの AppSync リソースがアプリケーションと関連づいているのか、どの API キーが使われているのかなどを特定することが出来ました。
サンドボックス起動時にローカルの amplify_outputs.json は上書きされる
ただ、サンドボックスと運用環境でバックエンドリソース(Cognito ユーザープールや AppSync など)は違うものを使います。
今このローカル環境がどちらを指しているのか、それぞれのバックエンドリソースが運用環境のものなのか、サンドボックスのものなのかをどのように識別すれば良いでしょうか。
まず、ローカル環境については amplify_outputs.json を確認することになりますが、このファイルはローカル環境でサンドボックス環境を起動した際に上書きされます。
起動すると次のように表示されます。
% npx ampx sandbox
[Sandbox] Pattern !.vscode/extensions.json found in .gitignore. ".vscode/extensions.json" will not be watched if other patterns in .gitignore are excluding it.
Amplify Sandbox
Identifier: iwasa.takahito
Stack: amplify-amplifyvitereacttemplate-iwasatakahito-sandbox-c16ed1c1a8
To specify a different sandbox identifier, use --identifier
✨ Synthesis time: 0.02s
:
(省略)
:
✨ Total time: 5.04s
[Sandbox] Watching for file changes...
File written: amplify_outputs.json
そして最終ステップまで行くと構成ファイルの内容が上書きされていました。
実行前後のファイルで次のように差分が発生しています。なるほどね。
で、この構成ファイルにはサンドボックスなのかどうかという情報は含まれていないようでしたが、どのリソースを参照しているのかまでを確認することが出来ます。
コンソールからダウンロードしたファイルと比較することで運用環境のものではないなというのはわかりそうです。
リソースの amplify:deployment-type タグで判別出来る
少し眺めていると、Amplify でデプロイされた AWS リソースについてはamplify:deployment-type
というタグが割り振られていることがわかりました。
次はサンドボックス環境の AppSync リソースです。
amplify:deployment-type
がsandbox
であることから、サンドボックス環境のものであることがわかります。
同様に運用環境リソースのものも確認してみると...
こちらはbranch
という値でした。そしてamplify:branch-name
に対象のブランチ名が設定されています。
運用環境に関わらず、ステージングなどどのブランチのものなのか判断するのに役立てることが出来そうですね。
さいごに
本日は AWS Amplify Gen 2 のバックエンド構成ファイル「amplify_outputs.json」と AWS リソースの関連付けを確認してみました。
多くのリソースが自動作成されるので初見だとよくわからないのですが、構成ファイルやタグなど、アプリケーションと環境・リソースが紐づいている情報は色々とあるのでこのあたりを使って AWS 側からの確認も出来そうです。