Amazon Elastic Beanstalkの宣伝文はこう述べています。
Elastic Beanstalkを使用すると、「フードを開く」ことができ、完全な制御を維持できます。ElasticBeanstalkコンソールを介して環境変数を渡すこともできます。
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk構成の環境変数以外の環境変数を渡す方法は?
Amazon Elastic Beanstalkの宣伝文はこう述べています。
Elastic Beanstalkを使用すると、「フードを開く」ことができ、完全な制御を維持できます。ElasticBeanstalkコンソールを介して環境変数を渡すこともできます。
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk構成の環境変数以外の環境変数を渡す方法は?
回答:
この.ebextensions/*.config
方法を使用するすべての人に向けて:現在、Elastic Beanstalk Webインターフェイスで環境変数を追加、編集、削除できます。
変数は、[構成]→[ソフトウェア構成]にあります。
Onemaの答えの.ebextensions
ように変数を作成しても機能します。
たとえば、後で別の環境にデプロイして手動で設定するのを忘れる場合や、値をソース管理にコミットすることに問題がない場合など、さらに望ましい場合もあります。両方を混ぜて使っています。
ENV["CUSTOM_ENV"]
戻り"something-something"
ます。
制限している値は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がコメントで述べたように、新しいルックアンドフィールは2013年7月18日にリリースされたため、コンソールから直接、任意の数の環境変数を定義できます。
Configuration > Software Configuration > Environment Properties
command: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
2016 Java8 Tomcat8 AMIでは、ElasticBeanstalkはWeb設定から環境変数を設定できません。代わりにjvm -Dプロパティを実際に設定しています。
-「次のプロパティが環境変数としてアプリケーションに渡されます。詳細。」
このステートメントは、Java Tomcat amiでは正しくありません。アマゾンはしませんこれらを環境変数として設定。これらは、jvmの-DプロパティとしてコマンドラインでTomcatに渡されるシステムプロパティとして設定されます。Javaで環境変数を取得する方法は、プロパティを取得する方法とは異なります。System.getenvとSystem.getProperty
私は箱にsshして、環境変数が設定されていないことを確認しました。ただし、tomcatログでは-Dプロパティが設定されていることがわかります。
回避策として、両方の場所を確認するようにコードを変更しました。
Amazon Linux 2017.03 v2.5.4 with Java8
また、envも設定しません。
In general, however, environment properties are passed only to the application and can't be viewed by connecting an instance in your environment and running env.
変数は、などのログインスクリプトで設定されていません.bashrc
。ただし、Tomcat変数はプロパティとして渡されます。(リンク先のページの上部を参照してください。)
AWSは、環境変数のCloudFormationテンプレート文字列を解釈します。これを使用して、アプリケーション内のEB環境に関する情報にアクセスできます。
AWSウェブインターフェースでは、以下が環境の名前として評価されます(バックティックに注意)。
`{ "Ref" : "AWSEBEnvironmentName" }`
または、.ebextensions/*.config
CloudFormationテンプレートを使用してバックティック( `)でラップすることもできます。
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
}
]
}
これは、Beanstalkで動的な値を使用してENVを設定する唯一の方法のようです。私のマルチドッカー設定で機能する回避策を思いつきました:
1)ビルドする前にこれをDockerfileに追加し、ECSリポジトリにアップロードします。
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デプロイし、ENVSをdockerコンテナーで使用できるようにする必要があります
次のようなcontainer_commandsを追加することで、ENVを追加できます。
02_create_env_file_2:
command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] }
お役に立てれば!
X: '
{"Ref": "MyCache"} )コンテナーがアクセスしようとしたとき、デフォルトで'
は値は解析されません(値は ' {"Ref": "MyCache"}
' のみです)。これにより、そのような動的変数を持つことができます。