概要
Amplifyでは環境変数をブランチごとに設定することができ、ビルド時に環境変数を読み込んで secret.json
等のgitignoreしたファイルを生成することで認証情報等をGitに含めないようにすることができます。Amplifyに設定した環境変数はSSMパラメータで自動的に暗号化されます。しかしこれはCI/CDを使用せず amplify publish
でデプロイを行う方式では利用できません。
案件によってはGitを用いたCI/CDが使えないこともありますが、その場合下記のように対応しています。
手順
-
.env
ファイルを作成し、下記のようにしておくAWS_PROFILE=[profile name]
- 下記コマンドを実行する
ENV=[env] SSM_KEY_PREFIX="/[project name]/$ENV/" SAMPLE_PATH="SAMPLE" aws ssm put-parameter --name "$SSM_KEY_PREFIX$SAMPLE_PATH" -type SecureString --value [value] --overwrite --profile [profile]
-
/amplify/hooks/pre-publish.sh
を下記のように作成するecho "pre-publish hook" if [ -z "$(which jq)" ]; then echo "Please install jq to run script." exit 0 fi parameters=`cat` error=$(jq -r '.error // empty' <<< "$parameters") data=$(jq -r '.data' <<< "$parameters") dir=`pwd` env=`jq -r '.amplify.environment.envName' <<< "$data"` dotenv_path="$dir/.env" if [ ! -e $dotenv_path ]; then echo "Please create .env file in project root path." exit 1 fi source $dotenv_path if [ -z "$AWS_PROFILE" ]; then echo "Please set AWS_PROFILE in .env file." exit 1 fi if !(type "aws" > /dev/null 2>&1); then echo "Please install aws cli." exit 1 fi SSM_KEY_PREFIX="/[project name]/$ENV/" SAMPLE_PATH="SAMPLE" SAMPLE_ID=`aws ssm get-parameter --name "$SSM_KEY_PREFIX$SAMPLE_PATH" --with-decryption --profile $AWS_PROFILE | jq '.Parameter.Value' -r` echo "{ \"SAMPLE_ID\": \"$SAMPLE_ID\" }" > "$dir/src/secret.json" if [ ! -z "$error" ]; then echo "Amplify CLI emitted an error:" $(jq -r '.message' <<< "$error") exit 1 fi echo "project root path:" $(pwd); echo "Amplify CLI command:" $(jq -r '.amplify | .command' <<< "$data")
実行
下記コマンドを実行するとhookで実行されるシェルスクリプトが、.env
ファイルに書いた AWS_PROFILE
の値を使用してSSMパラメータから値を取り出してJSONに書き込み、 src/secret.json
を出力したあとデプロイが行われます。
amplify publish