[小ネタ]amplify initした時にできるファイルは何なのか
この記事は、「AWS Amplify Advent Calendar 2021」の22日目の記事です。
はじめに
かなり誰得記事なのですがamplify init
した時に生成されるamplify
ディレクトリ傘下のファイル群に関して書きます。バージョンは以下の通りです。
$ node -v
v15.14.0
$ amplify -v
7.6.2
amplify init
したあとのamplify
ディレクトリにtreeすると以下のようなファイルがあります。(hooksとREADMEは除きます。)
── amplify
├── #current-cloud-backend
│ ├── amplify-meta.json
│ ├── awscloudformation
│ │ └── build
│ │ └── root-cloudformation-stack.json
│ └── tags.json
├── backend
│ ├── amplify-meta.json
│ ├── awscloudformation
│ │ └── build
│ │ └── root-cloudformation-stack.json
│ ├── backend-config.json
│ └── tags.json
│
└── team-provider-info.json
#current-cloud-backend
チェックアウトした環境のリソースのクラウドの状態含まれています。
手動での変更は禁止なファイル郡です。amplify push
、amplify pull
、amplify env checkout
によって自動で書き換わります。
ところでこの#current-cloud-backend
ディレクトリいつの間にかエディタ上から消えていたという経験はないでしょうか?
amplify-cli
の対話画面でエディターの選択がされた場合、エディタ上で非表示にするというコンフィグ設定が自動で書き込まれるためです。(init
は除きます。)
aplify-cli
の内部的にはeditor-selection
という関数の中のhideNoManualEdit
が実行された場合に発生します。
この関数が実行されるコマンドとしてamplify add function
があります。この中で? Choose your default editor
という問いがあるのですがVisual Studio Code
を選択してみます。
$ amplify add function
.................
? Choose your default editor: Visual Studio Code
するとエディタからいくつかのファイル/ディレクトリが消え、.vscode
ディレクトリが生成されます。手動で変更するのが禁止なファイルをexcludeしてVSCode上で表示しないようにするための設定が追加されるためです。(実際に消えているわけではない)
{
"files.exclude": {
"amplify/.config": true,
"amplify/**/*-parameters.json": true,
"amplify/**/amplify.state": true,
"amplify/**/transform.conf.json": true,
"amplify/#current-cloud-backend": true,
"amplify/backend/amplify-meta.json": true,
"amplify/backend/awscloudformation": true
}
}
ミスって手動でこれらのファイルを編集してしまうのを防ぐためだと思われます。
なぜかわかりませんがamplify init
のDefault editor
の選択ではこれは起きません。
中のファイル
amplify-meta.json
名前の通り各カテゴリーのmetaデータを収納している部分です。init
直後ではcloudformation
のスタック情報が記載されていますね。(authrole
のarnやregion、appIdなど)
amplify add <category>
した際とpush
した際にサービスのメタデータが書き込まれていきます。
backend-config.json
プロジェクトのバックエンドに関する設定が含まれています。(APIバックエンド用のAppSyncや認証用のCognitoなど)
root-cloudformation-stack.json
init
した際にクラウド上のバックエンド環境を初期化したリソース(DeploymentBucket, UnauthRole, AuthRole, cloudformation)スタックの情報が含まれます。
tags.json
Amplifyで生成されたAWSリソースに対してタグをoverrideすることができます。
backend
#current-cloud-backend
の反対でチェックアウトした環境のリソースの最新のローカル開発状態が格納されています。もちろん中身のファイルも#current-cloud-backend
とほぼ同じです。amplify push
する際にここが参照されます。
cliでリソース編集 -> backend配下を更新 -> push -> #current-cloud-backendを更新
というのがamplifyのバックエンドリソース更新の大きな流れですね。
team-provider-info.json
チーム内でプロジェクト情報を共有するために使用するもので環境ごとのCloudFormationスタックの情報が記載されています。もちろん直接編集禁止です。本当にそのまんまなので言うことないです。
昔.gitignore
に入れるかどうか問題で悩んだ記憶があるのですがissueやドキュメントに思いっきり言及がありました。
このファイルはチームメンバー間で共有し、同じCloudFormationスタックにリソースをプッシュ/プロビジョニングする機能を持たせることで、チームはプッシュ/プル方式で作業を行い、クラウド上のプロジェクトの最新の状態に常に同期することができます。
プロジェクトを公開してサーバーレスインフラをオープンソース化したい場合は、amplify/team-provider-info.jsonファイルを削除するか、.gitignoreファイルに入れてください。
終わりに
そもそも編集禁止のものが多すぎて余り書くことがなかった。。。。
Discussion