AWS Beanstalk設定で定義した環境変数にアクセスしようとしています。 .ebextensions
またはの構成ファイル内の構成ファイル内にコピーされたファイルにアクセスする必要があります。私は以下を試しました:
container_commands:
update_nginx_config:
command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"
私のnginx.conf
ファイルで、$MYVAR
、${MYVAR}
および{$MYVAR}
にアクセスしようとしましたが、そのうちのいくつかが提案されました here および ここ (後者は直接設定ファイル内にあります)。
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
$MYVAR ${MYVAR} {$MYVAR}
これも機能しません。すべての場合において、変数名は$MYVAR
のように出力されるだけなので、Beanstalkは私の変数を認識しません。以下を AWSドキュメント についてcontainer_commands
で見つけました:
また、AWSセキュリティ認証情報などの環境変数にアクセスできます。
これは素晴らしいことですが、howとは言いません。
設定ファイル自体の中で、または所定の場所にコピーされる別のファイルの中で、ebextensionsを含む環境変数にアクセスするにはどうすればよいですか
前もって感謝します!
私はこの質問への回答についてアマゾンのテクニカルサポートに連絡しました、そしてここに彼らの返信があります:
残念ながら、変数はebextensionsでは直接利用できません。そのための最良のオプションは、次のようなコンテナーコマンドから実行されるスクリプトを作成することです。
files:
"/home/ec2-user/setup.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
# Commands that will be run on container_commmands
# Here the container variables will be visible as environment variables.
container_commands:
set_up:
command: /home/ec2-user/setup.sh
したがって、シェルスクリプトを作成し、それをコンテナーコマンドを介して呼び出すと、次のようにシェルスクリプト内の環境変数にアクセスできます:$ENVIRONMENT_VARIABLE
。私はこれをテストしましたが、うまくいきます。
Rootとしてスクリプトを実行する際に問題があり、構成された環境変数を読み取ることができない場合は、スクリプトの先頭に以下を追加してみてください。
. /opt/elasticbeanstalk/support/envvars
ユースケースによっては、アプローチを少し変更する必要がある場合があります(少なくとも私は変更しました)が、これは実用的なソリューションです。これが誰かに役立つことを願っています!
この回答から: https://stackoverflow.com/a/47817647/2246559
ここで説明されているGetOptionSetting関数を使用できます。 https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html
たとえば、worker_processes
変数。次のようになります。
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
worker_processes `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}`;
関数呼び出しのバッククォートに注意してください。