Amazon Elastic Beanstalkの宣伝文句:
Elastic Beanstalkを使用すると、「フードを開く」ことができ、フルコントロールを維持できます。環境変数をElastic Beanstalkコンソールに渡すこともできます。
http://aws.Amazon.com/elasticbeanstalk/
Elastic Beanstalk設定内の環境変数以外の他の環境変数を渡す方法は?
.ebextensions/*.config
の方法を使用するすべての人に向けて:最近では、Elastic Beanstalk Webインターフェイスで環境変数を追加、編集、削除できます 。
変数は、構成→ソフトウェア構成の下にあります。
オネマの答え のように.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管理パネル([環境の詳細]-> [構成の編集]-> [コンテナ])に移動し、そこで値を更新できます。私の経験では、これらの値はその後の展開後も変わりません。
Update 2@Benjaminがコメントで述べたように、新しい look and feel が2013年7月18日にリリースされたため、コンソールから直接環境変数をいくつでも定義できます:
Configuration > Software Configuration > Environment Properties
2016 Java8 Tomcat8 AMIでは、ElasticBeanstalkはWeb設定から環境変数を設定できません。代わりに、jvm -Dプロパティを実際に設定しています。
-「次のプロパティは、環境変数としてアプリケーションに渡されます。詳細をご覧ください。」
Java Tomcat AMIの場合、このステートメントは正しくありません。 Amazonはnotを環境変数として設定します。これらは、jvmの-DプロパティとしてコマンドラインでTomcatに渡されるシステムプロパティとして設定されます。環境変数を取得するJavaのメソッドは、プロパティを取得する場合と同じではありません。 System.getenvとSystem.getProperty
ボックスにsshして、環境変数が設定されていないことを確認しました。ただし、Tomcatのログでは、-Dプロパティが設定されていることがわかります。
回避策として、両方の場所をチェックするようにコードを変更しました。
AWSは、環境変数のCloudFormationテンプレート文字列を解釈します。これを使用して、アプリケーション内のEB環境に関する情報にアクセスできます。
AWSウェブインターフェースでは、以下が環境の名前として評価されます(バックティックに注意してください):
`{ "Ref" : "AWSEBEnvironmentName" }`
または、.ebextensions/*.config
を使用して、バックティック( `)でCloudFormationテンプレートをラップできます。
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
}
]
}
環境の詳細->構成の編集->コンテナ
または、Elastic Beanstalk CLIを使用して環境変数を設定できます。
環境変数を設定するには:eb setenv FOO=bar
環境変数を表示するには:eb printenv
これは、beantalkで動的な値を使用して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;' \] \] }
お役に立てれば!