AWS
amplify

amply でチームで開発するときは amplify cli の multienv 版を使おう


はじめに

amplify で作ったリソースを Git 管理するさい、何をコミットして何をコミットしないかで悩んだことはありませんか? また、チームの他のメンバーがコミットしたリソースを自分の環境にチェックアウトしたとき、デプロイができなくなった経験はないでしょうか?

そんなときは amplify-cli の beta版 である multienv [1] を試してみましょう。


amplify-cli multienv を使うメリット


  1. デプロイ環境の分離

  2. 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 が自動的に作成され、コミットする必要のない資材のパスが追加されています。


.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 フォルダに作られていることがわかります。


amplify/team-provider-info.json

{

"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 のプロジェクトを共有することが問題なくできるようになりました。

気が向いたらデプロイ環境の分離についても試してみようと思います。


参考


  1. Multiple environments and team workflows (beta)

  2. amplify/.config should be in .gitignore?

  3. Sharing projects outside the team