web-dev-qa-db-ja.com

AWS Beanstalk ebextensionsで環境変数にアクセスする

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を含む環境変数にアクセスするにはどうすればよいですか

前もって感謝します!

32
ba0708

私はこの質問への回答についてアマゾンのテクニカルサポートに連絡しました、そしてここに彼らの返信があります:


残念ながら、変数は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

ユースケースによっては、アプローチを少し変更する必要がある場合があります(少なくとも私は変更しました)が、これは実用的なソリューションです。これが誰かに役立つことを願っています!

48
Andy0708

この回答から: 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"}}`;

関数呼び出しのバッククォートに注意してください。

11
Danny Sullivan