はじめに
amplify で作ったリソースを Git 管理するさい、何をコミットして何をコミットしないかで悩んだことはありませんか? また、チームの他のメンバーがコミットしたリソースを自分の環境にチェックアウトしたとき、デプロイができなくなった経験はないでしょうか?
そんなときは amplify-cli の beta版 である multienv [1] を試してみましょう。
amplify-cli multienv を使うメリット
- デプロイ環境の分離
- amplify init 時にコミットしなくて良い資材を .gitignore に自動追加してくれる
私の場合はとりあえず 2番目の目的のためにインストールしました(何を gitignore に追加するべきなのかについて、公式ドキュメントに記載が見つけられなかったので。。こちらの github issue でも multienv を使うようにガイドされています。)。デプロイ環境の分離もできるようなので、これからリソースを作ろうとしている人は multienv 版を試してみることをおすすめします。
インストール
@aws-amplify/cli
でなく @aws-amplify/cli@multienv
をインストールします(注1)。
npm install -g @aws-amplify/cli@multienv
[!] 注1: 公式ドキュメント [1] にもあるとおり、 multienv版をインストールすると、もともとあった amplicy-cli が multienv 版に置き換わります 。既存のプロジェクトに意図しない影響を与える可能性があるので、すでに amplify-cli で環境構築してある場合は注意してください(グローバルでなく、まずはローカルにインストールしてみて試してみるなど)。
サンプルプロジェクトの作成
mkdir amplify-multienv-example
cd amplify-multienv-example
amplify init
普通の amplify-cli と同様、対話的に設定の入力を求められます。
multienv を使った場合の違いとして environment について聞かれます。
ここでは開発環境として dev
を指定します。
? Enter a name for the environment dev
すべての質問を入力し終えると、 .gitignore
が自動的に作成され、コミットする必要のない資材のパスが追加されています。
#amplify
amplify/\#current-cloud-backend
amplify/.config/local-*
amplify/backend/amplify-meta.json
aws-exports.js
awsconfiguration.json
multienv で amplify init したときのもう一つ違いとして、 team-provider-info.json
というファイルが amplify
フォルダに作られていることがわかります。
{
"dev": {
"awscloudformation": {
"AuthRoleName": "amplifymultienvexamp-20190209112419-authRole",
"UnauthRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/amplifymultienvexamp-20190209112419-unauthRole",
"AuthRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/amplifymultienvexamp-20190209112419-authRole",
"Region": "ap-northeast-1",
"DeploymentBucketName": "amplifymultienvexamp-20190209112419-deployment",
"UnauthRoleName": "amplifymultienvexamp-20190209112419-unauthRole",
"StackName": "amplifymultienvexamp-20190209112419",
"StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/amplifymultienvexamp-20190209112419/ce6b1060-2c11-11e9-ade2-0a29b069fc22"
}
}
}
amplify リソースを作成したときの Cloudformation stack の情報が記載されていることがわかります。このファイルをメンバーとシェアすることで、同じ CloudFormation Stack に対して push/pull することができるようになります。
注意: AWSアカウントIDなどが記載されているので、リポジトリを Public に公開する場合は上記のファイルはコミットしないようにしましょう。
終わりに
これで、複数のメンバーで amplify のプロジェクトを共有することが問題なくできるようになりました。
気が向いたらデプロイ環境の分離についても試してみようと思います。