🍊

[小ネタ]amplify initした時にできるファイルは何なのか

2021/12/22に公開

この記事は、「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 pushamplify pullamplify env checkoutによって自動で書き換わります。

ところでこの#current-cloud-backendディレクトリいつの間にかエディタ上から消えていたという経験はないでしょうか?
amplify-cliの対話画面でエディターの選択がされた場合、エディタ上で非表示にするというコンフィグ設定が自動で書き込まれるためです。(initは除きます。)
aplify-cliの内部的にはeditor-selectionという関数の中のhideNoManualEditが実行された場合に発生します。
https://github.com/aws-amplify/amplify-cli/blob/beed4f9aa77bfbbb92ff0cb504e8019ce01e48f6/packages/amplify-cli/src/extensions/amplify-helpers/editor-selection.ts#L57

この関数が実行されるコマンドとしてamplify add functionがあります。この中で? Choose your default editorという問いがあるのですがVisual Studio Codeを選択してみます。

$ amplify add function
.................
? Choose your default editor: Visual Studio Code

するとエディタからいくつかのファイル/ディレクトリが消え、.vscodeディレクトリが生成されます。手動で変更するのが禁止なファイルをexcludeしてVSCode上で表示しないようにするための設定が追加されるためです。(実際に消えているわけではない)

setting.json
{
  "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 initDefault 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やドキュメントに思いっきり言及がありました。
https://github.com/aws-amplify/amplify-cli/issues/4700
https://docs.amplify.aws/cli/teams/shared/#sharing-projects-within-the-team

このファイルはチームメンバー間で共有し、同じCloudFormationスタックにリソースをプッシュ/プロビジョニングする機能を持たせることで、チームはプッシュ/プル方式で作業を行い、クラウド上のプロジェクトの最新の状態に常に同期することができます。
プロジェクトを公開してサーバーレスインフラをオープンソース化したい場合は、amplify/team-provider-info.jsonファイルを削除するか、.gitignoreファイルに入れてください。

終わりに

そもそも編集禁止のものが多すぎて余り書くことがなかった。。。。

Discussion