AmazonElasticBeanstalkの宣伝文句は次のように述べています。
Elastic Beanstalkを使用すると、「フードを開いて」完全な制御を維持できます。ElasticBeanstalkコンソールを介して環境変数を渡すこともできます。
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk構成にあるもの以外の他の環境変数を渡す方法は?
AmazonElasticBeanstalkの宣伝文句は次のように述べています。
Elastic Beanstalkを使用すると、「フードを開いて」完全な制御を維持できます。ElasticBeanstalkコンソールを介して環境変数を渡すこともできます。
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk構成にあるもの以外の他の環境変数を渡す方法は?
この方法を使用するすべての人に注意し.ebextensions/*.config
てください。現在、Elastic Beanstalk Webインターフェイスで環境変数を追加、編集、および削除できます。
変数は、[構成]→[ソフトウェア構成]の下にあります。
Onemaの回答の.ebextensions
ように変数を作成しても機能します。
たとえば、後で別の環境にデプロイして手動で設定するのを忘れるのを恐れている場合や、値をソース管理にコミットしても問題がない場合など、さらに望ましい場合があります。私は両方を組み合わせて使用します。
5つの値のみが制限されているか、カスタム環境変数名が必要な場合があります。これは、構成ファイルを使用して行うことができます。プロジェクトのルートに次のディレクトリを作成します
.ebextensions /
次に、 environment.configというファイルを作成し(このファイルは何でも呼び出すことができますが、拡張子は.configである必要があります)、次の値を追加します。
option_settings:
- option_name: CUSTOM_ENV
value: staging
アプリケーションをデプロイすると、この新しい値が[環境の詳細]->[構成の編集]->[コンテナー]に表示されます。
詳細については、こちらのドキュメントを確認してください:http: //docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options
アップデート
APIキー、シークレットなどのリポジトリ値へのコミットを防ぐために、プレースホルダー値を設定できます。
option_settings:
- option_name: SOME_API_KEY
value: placeholder-value-change-me
後で、AWS管理パネル([Environment Details]-> [Edit Configuration]-> [Container])に移動して、そこで値を更新できます。私の経験では、これらの値はその後の展開後に変更されません。
アップデート2 @Benjaminがコメントで述べたように、新しいルックアンドフィールが2013年7月18日に公開されたため、コンソールから直接任意の数の環境変数を定義できます。
Configuration > Software Configuration > Environment Properties
2016 Java8 Tomcat8 AMIでは、ElasticBeanstalkはWeb構成から環境変数を設定できません。代わりに、実際にはjvm-Dプロパティを設定しています。
-「次のプロパティは環境変数としてアプリケーションに渡されます。詳細をご覧ください。」
このステートメントは、JavaTomcatamiでは正しくありません。Amazonはこれらを環境変数として設定していません。これらは、コマンドラインでjvmの-DプロパティとしてTomcatに渡されるシステムプロパティとして設定されます。Javaで環境変数を取得する方法は、プロパティを取得する方法と同じではありません。System.getenvとSystem.getProperty
ボックスにSSHで接続し、環境変数が設定されていないことを確認しました。ただし、Tomcatログでは、-Dプロパティが設定されていることがわかります。
回避策として、両方の場所をチェックするようにコードを変更しました。
AWSは、環境変数内のCloudFormationテンプレート文字列を解釈します。これを使用して、アプリケーション内のEB環境に関する情報にアクセスできます。
AWS Webインターフェースでは、以下が環境の名前として評価されます(バックティックに注意してください)。
`{ "Ref" : "AWSEBEnvironmentName" }`
または、を使用し.ebextensions/*.config
てCloudFormationテンプレートをバックティック( `)でラップすることもできます。
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
}
]
}
または、ElasticBeanstalkCLIを使用して環境変数を設定することもできます。
環境変数を設定するには:eb setenv FOO=bar
環境変数を表示するには:eb printenv
環境の詳細->構成の編集->コンテナ
これは、beanstalkで動的な値を使用してENVを設定する唯一の方法のようです。マルチドッカーのセットアップで機能する回避策を考え出しました。
1)構築してECSリポジトリにアップロードする前に、これをDockerfileに追加します。
CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;
2)Dockerrun.aws.jsonファイルにボリュームを作成します。
{
"name": "env-file",
"host": {
"sourcePath": "/var/app/current/envs"
}
}
3)ボリュームをコンテナにマウントします
{
"sourceVolume": "env-file",
"containerPath": "/tmp/envs",
"readOnly": true
}
4).ebextensions / options.configファイルに、次のようにcontainer_commandsブロックを追加します。
container_commands:
01_create_mount:
command: "mkdir -p envs/"
02_create_env_file:
command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME=" , { "Ref", "RESOURCE" }, ';" > envs/env_file;' ] ] }
5)eb deployを使用すると、ENVSがDockerコンテナで利用可能になります。
次のようなcontainer_commandsを追加することで、ENVをさらに追加できます。
02_create_env_file_2:
command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] }
お役に立てれば!