🐝

Amplify環境ごとにAWSアカウントを分ける方法

2023/08/20に公開

概要

現在参画しているプロジェクトで Amplify を使用しており、
個人的に詰まった点など他の人の役に立てばと思い Tips をまとめています。
別の記事でも Amplify に関する情報をまとめていこうと思っているので、そちらも読んでいただけると嬉しいです。

想定読者

  • Amplify を使用して開発を行なっている人
  • ネットに転がっている Amplify チュートリアルやってみた系の記事では実際のプロジェクトレベルでどう進めれば良いか分からない人
  • Amplify の基本的な環境構築や amplify cli コマンド(amplify init, amplify add apiなど)についてある程度理解している人
  • 細かい設定方法やカスタマイズを行う際の具体的な方法が分からない人

ではさっそくつらつらと書き綴っていきます。


環境ごとに違う AWS アカウントを設定する方法

個人の勉強用だったりすると、amplify の環境ごとに AWS アカウントを分けるなんてめんどくさいことは必要ないし、やらないと思います。

ただプロジェクトによっては、会社のセキュリティ的な観点からあり得ることかと思います。
※ prod 環境のリソースを dev 環境のマネジメントコンソールからはそもそも見えないようにしたいなど

※ すでに dev 環境(aws, amp), stg 環境(aws)が出来ていて、これから作成する stg 環境(amp)で使用する IAM ユーザーが作成済みの前提で話します。

【profile の作成】

まずはこれから作成する stg 環境(amp)の IAM ユーザーを profile として設定します。
最初に dev 環境(amp)作成する際に、下記コマンドで IAM ユーザー作成したと思います。

$ amplify configure

その際に、何も profile 名を設定していなければdefaultという名称で profile が既に設定されています。

rootディレクトリ/aws/credentials
[default]
aws_access_key_id=*******************
aws_secret_access_key=***************************************
rootディレクトリ/aws/config
[default]
region=ap-northeast-1
output = json

stg 環境(amp)を別 AWS アカウントに作成したい場合は、stg 環境(aws)の IAM ユーザーの profile を追加してあげる必要があります。

以下のコマンドを実行し、profile を設定します。

$ aws configure --profile stg
# stgの部分は作成したいprofile名を指定する

# 実行例
AWS Access Key ID [None]: *******************
AWS Secret Access Key [None]: ***************************************
Default region name [None]: {任意のリージョン名}
Default output format [None]: {任意のフォーマット}

入力内容が正しく反映されているか確認します。

rootディレクトリ/aws/credentials
[default]
aws_access_key_id=*******************
aws_secret_access_key=***************************************

[stg]
aws_access_key_id=*******************
aws_secret_access_key=***************************************
rootディレクトリ/aws/config
[default]
region=ap-northeast-1
output = json

[stg]
region=ap-northeast-1
output = json


ここで dev 環境(aws)の profile がdefaultになっているのが気になるという方は
$ aws configure --profile devで"dev"という名称の profile を作成します。

以下コマンドを実行し、profile を既存の "default"から"dev"に変更することが出来ます。("default" の profile 名を変更する方法もあるかも)

$ amplify configure project

実際のプロジェクトを想定しており、stg 環境(amp)のコードは stg ブランチにプッシュしたいので、一旦ここで stg ブランチを切っておきます。

$ git branch stg
$ git checkout stg


ここまで来ると下準備は終わりです。
dev 環境(amp)とは異なる AWS アカウントに stg 環境(amp)を作成しましょう。

【stg 環境を dev 環境と違う AWS アカウントに作成】

まずは使用する profile を環境変数に指定します。

$ export AWS_PROFILE=stg
# stgの部分は設定したいprofile名を指定する

正しく設定されているか確認しましょう

$ echo $AWS_PROFILE
# 出力: stg

以下コマンドでも現在の aws 設定情報を確認できます

$ aws configure list

以下コマンド実行し、stg 環境(amp)を作成していきます

$ amplify init
  1. "既に存在する環境を使用するか"と聞かれるので No を選択
    question_exist_env

  2. 環境名を入力
    enter_envname

  3. "使用する認証情報"で AWS profile を選択
    select_authentication_method

  4. 作成しておいた stg 環境(aws)用の profile を選択
    choose_profile

  5. stg 環境(amp)の作成が完了する

  6. dev 環境でリソースを作成している場合は、以下コマンドを実行しまっさらな状態にする

$ amplify pull -y
  1. 必要なリソースを追加
$ amplify add api
$ amplify add auth
$ amplify add function
$ amplify add storage
$ amplify add hosting
  1. 以下コマンドでローカル環境の変更をクラウド環境に反映
$ amplify push -y

まとめ

今回紹介した方法だと dev 環境(amp)でamplify add functionなどリソースの追加を行っている場合は、そのままamplify pushもしくはamplify publishしてしまうと、CloudFormation のテンプレートで参照しているリソースが dev 環境(amp)を指しているためエラーになってしまいます。

そのため、面倒ではありますが一旦amplify pullを実行してまっさらな状態にしてから、再度リソースを追加していく必要があります。

GitHub の amplify-cli に上がっている issue を見ると(2019/07 なのでめっちゃ古い)
前はamplify env addでも profile を選択できていたのかなと思いますが、

https://github.com/aws-amplify/amplify-cli/issues/1907

現在(筆者の実行した Amplif CLI バージョン: 12.1.1)ではamplify env addを実行すると同じ AWS アカウントに新規 amplify バックエンド環境が勝手に生成されてしまうので、 amplify initでやる方法しか無いのかな?と思います。

GitHubで編集を提案

Discussion