AWS Elastic Beanstalk インスタンスシェルの環境変数を使用したいと考えています。
簡単な説明
Elastic Beanstalk では、環境変数はオペレーティングシステムに公開されません。
環境変数が Elastic Beanstalk の環境変数として設定されていて、オペレーティングシステムから環境変数のユーティリティを使用したい場合は、.ebextension を使用して、環境変数をオペレーティングシステムの変数にエクスポートする必要があります。
その解決方法を次に示します。
1. get-config ユーティリティを使用して、Elastic Beanstalk 環境変数を読み取ります。
2. jq ユーティリティ を (jq ウェブサイトから) 使用して、get-config の出力を JSON からシェル変数に変換します。
3. その変数を、/etc/profile.d/sh.local ファイルに保存します。このファイルは Bash によって読み込まれ、変数をオペレーティングシステムにエクスポートします。
解決方法
1. アプリケーションソースバンドルに .ebextension ファイルを作成し、以下を記述します。
commands:
setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
packages:
yum:
jq: []
注: 手順 1 の設定ファイルは setvars.config と呼ばれます。
2. .ebextension ファイルを保存してから、Elastic Beanstalk 環境にデプロイします。
3. 変数がエクスポートされているかどうかをテストするには、SSH を使用してインスタンスに接続し、次のコマンドを実行します。テストする前に、既存のセッションをすべて閉じてから、SSH を使用して再接続します。
env | grep VARIABLE_NAME
重要: ステップ 3 では、VARIABLE_NAME を、ご自身の環境で定義している変数に設定します。
出力に、環境変数が正しく設定されているかどうかが表示されます。次の出力例では、RDS_PORT という変数が Elastic Beanstalk 環境で定義されています。
$ env|grep RDS_PORT
RDS_PORT=3306
注: ここでは、.ebextension でコマンドを使用しているため、sh.local ファイルの更新は新しいデプロイでのみ可能になります。環境内で変数を追加または変更する場合は、その変数をオペレーティングシステムにエクスポートする前に、新しいデプロイを作成する必要があります。