【GitHub Actions】AWS Lambdaの環境変数を自動で更新する
最近システムのリリースフローの自動化を進めることが多い。先日はLambda関数の更新の自動化を行った。この関数は環境変数を持っており、これを頻繁に更新する必要があった。
新しい環境変数をどのように渡すかが最も難しいポイントだったが、この環境変数はAWS CLIコマンドにおいてJSONファイル形式で渡すことができる。
aws lambda update-function-configuration --function-name "${function_name}" --environment fileb://env.json
--environment
オプションの後にファイルパスを指定する。 AWS CLIでは fileb://
とつけることで、ファイルの中身をバイナリコンテンツとして渡すことができる。面倒なファイル読み込みの処理を書かずに済むため、この記法はとても気に入っている。また、このJSONファイルをGitHub上に置けるため、環境変数のバージョン管理がしやすくなるという利点もある。
JSONファイルのフォーマットは以下の通り。 SECRET_ENV
は機密性の高い環境変数であり、値はGitHub ActionsのSecretsに登録してある。JSONファイル上では値を適当なものにしておく。
# env.json { "Variables": { "NORMAL_ENV": "example", "SECRET_ENV": "to_be_converted" } }
workflowファイルには以下のように記載する。 jq
コマンドでJSONファイルの SECRET_ENV
の値を置換しているのがポイント。 --arg
オプションとして secret_env
として ${{ secrets.SECRET_ENV }}
の値を渡し、その値をJSONファイル内の to_be_converted
と入れ替えている。
- name: Update lambda envvar env: LAMBDA_FUNCTION_NAME: dev_function ENV_JSON_FILE: env.json SECRET_ENV: ${{ secrets.SECRET_ENV }} run: | jq --arg secret_env "${SECRET_ENV}" '.Variables.SECRET_ENV = $secret_env' "${ENV_JSON_FILE}" > env_converted.json aws lambda update-function-configuration --function-name "${LAMBDA_FUNCTION_NAME}" --environment fileb://env_converted.json