.ebextensions など ElasticBeanstalk で、Software Configuration などで設定した環境変数を参照したい場合のやり方メモ。
(最後に確認したのがかなり前なので、もしかしたら現在はこのままでは動作しないかもしれないです)
環境タイプ: Docker
現在の方法
以前は /opt/elasticbeanstalk/hooks/common.sh
に書かれていた設定ファイルを参照して直接読み出していたけれど、最近 EB の AMI のバージョンをあげたところうまく動かなくなっていた(ami-4aedea4b で確認)。
デプロイ用のスクリプトが使っていたツールを発見したので、これを使わせてもらうことにします。
ちなみに環境変数が含まれた、コンテナのコンフィグファイルを直接参照したい場合はここにあります。
/opt/elasticbeanstalk/deploy/configuration/containerconfiguration
その1: /opt/elasticbeanstalk/bin/get-config
を使う
たとえば AWS_ACCESS_KEY_ID
を取得したい場合は以下。
# 要 root 権限
AWS_ACCESS_KEY_ID=$(/opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:application:environment -o AWS_ACCESS_KEY_ID)
その2: /opt/elasticbeanstalk/containerfiles/support/generate_env
を使う
generate_env
を使えば、設定された環境変数を一度に取得することができます。
# 要 root 権限
while read -r ENV; do
export $ENV
done < <(/opt/elasticbeanstalk/containerfiles/support/generate_env)
ただし support ディレクトリが可変な雰囲気だったので、実際に使用する場合は下記のように get-config を使って support ディレクトリを取得したほうがいいかもしれません。
SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_files_dir)
while read -r ENV; do
export $ENV
done < <(${SUPPORT_DIR}/generate_env)
番外編: 以前の方法
上記を適用するまでは以下を使用していました。
source /opt/elasticbeanstalk/hooks/common.sh
touch /tmp/env.sh
chmod 600 /tmp/env.sh
jq .docker.env[] $EB_CONFIG_FILE | tr -d \" > /tmp/env.sh
source /tmp/env.sh
rm /tmp/env.sh
こちらの方法は、Amazon S3をDockerプライベートレポジトリにしてAWS ElasticBeanstalk環境にデプロイ で紹介されていたやり方です。
環境タイプ: Multi-container Docker
コメントで教えていただいた方法ですが、 Multi-container Docker の場合は下記の方法で環境変数を取得可能なようです。
jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" <(/opt/elasticbeanstalk/bin/get-config environment) > /tmp/envs
. /tmp/envs