0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CI/CDを使わずAmplifyを利用する際に環境変数の置き場に困ったときの対応

Posted at

概要

Amplifyでは環境変数をブランチごとに設定することができ、ビルド時に環境変数を読み込んで secret.json 等のgitignoreしたファイルを生成することで認証情報等をGitに含めないようにすることができます。Amplifyに設定した環境変数はSSMパラメータで自動的に暗号化されます。しかしこれはCI/CDを使用せず amplify publish でデプロイを行う方式では利用できません。
案件によってはGitを用いたCI/CDが使えないこともありますが、その場合下記のように対応しています。

手順

  1. .env ファイルを作成し、下記のようにしておく
    AWS_PROFILE=[profile name] 
    
  2. 下記コマンドを実行する
    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]
    
  3. /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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?