環境プロパティとその他のソフトウェアの設定
[environment properties] を使用して、シークレット、エンドポイント、デバッグ設定などの情報をアプリケーションに渡すことができます。環境プロパティは、開発、テスト、ステージング、本稼働などのさまざまな目的で、複数の環境のアプリケーションを実行するのに役立ちます。
環境変数
ほとんどの場合、環境プロパティは、環境変数としてアプリケーションに渡されますが、その動作はプラットフォームによって異なります。たとえば、Java SE プラットフォームでは、System.getenv
を使用して取得する環境変数を設定するのに対し、Tomcat プラットフォームでは、System.getProperty
を使用して取得する Java システムプロパティを設定します。
すべての環境で利用できる標準のオプションセットに加え、ほとんどの Elastic Beanstalk プラットフォームでは、言語固有またはフレームワーク固有の指定を行うことができます。これらは、以下の形式を使用することができます。
プラットフォーム固有の設定
-
プリセットの環境プロパティ – Ruby プラットフォームでは、
RACK_ENV
およびBUNDLE_WITHOUT
のようなフレームワーク設定の環境プロパティを使用します。 -
プレースホルダーの環境プロパティ – Tomcat プラットフォームでは、いかなる値にも設定されない
JDBC_CONNECTION_STRING
という名前の環境プロパティを定義します。この設定タイプは、旧式のプラットフォームバージョンで一般的でした。 -
設定オプション – ほとんどのプラットフォームでは、
aws:elasticbeanstalk:xray
やaws:elasticbeanstalk:container:python
などのプラットフォーム固有または共有の名前空間で設定オプションを定義します。
プラットフォーム固有のオプションと、コードで環境プロパティ値を取得する方法の詳細については、該当する言語やフレームワークのプラットフォームトピックを参照してください。
また、データベースを環境に追加すると、Elastic Beanstalk は、アプリケーションコードで読み込むことができる RDS_HOSTNAME
などの環境プロパティを設定して、接続オブジェクトまたは文字列を作成します。
環境プロパティを設定する
環境プロパティが Elastic Beanstalk コンソールの [Software Configuration] の下に表示されます。
Elastic Beanstalk コンソールで環境プロパティを設定するには
-
Elastic Beanstalk コンソール を開きます。
-
お客様の環境の管理ページに移動します。
-
[Configuration] を選択します。
-
[ソフトウェア] 設定カテゴリで、[変更] を選択します。
-
環境プロパティ で、キーと値のペアを入力します。
-
[Apply] を選択します。
環境プロパティの制限
-
キーには、英数字および記号
_ . : / + \ - @
を含めることができます。上記の記号は、環境プロパティーキーには使用できますが、環境のプラットフォームの環境変数名には使用できない場合があります。すべてのプラットフォームとの互換性を考慮して、環境プロパティには次のパターン (
[A-Z_][A-Z0-9_]*
) のみ使用してください。 -
値には、英数字、空白、および記号
_ . : / = + \ - @ ' "
を含めることができます。注記
一重引用符および二重引用符で囲う値はエスケープする必要があります。
-
キーの長さは最大 128 文字です。値の長さは最大 256 文字です。
-
キーと値は大文字と小文字が区別されます。
-
key
=value
の形式の文字列として保存されている場合は、すべての環境プロパティの合計サイズが 4,096 バイトを超えることはできません。
ソフトウェア設定の名前空間
設定ファイル を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクを実行できます。 設定オプションは、Elastic Beanstalk サービスまたは使用できるプラットフォームで定義し、名前空間に整理できます。
環境プロパティと設定オプションをソースコードで設定するには、Elastic Beanstalk の設定ファイルを使用できます。aws:elasticbeanstalk:application:environment名前空間を使用して、環境プロパティを定義します。
例 .ebextensions/options.config
option_settings: aws:elasticbeanstalk:application:environment: API_ENDPOINT: www.example.com/api
設定ファイルまたは AWS CloudFormation のテンプレートを使用してカスタムリソースを作成する場合は、AWS CloudFormation 関数を使用してリソースに関する情報を取得し、デプロイ時に環境プロパティに動的に割り当てることができます。以下、GitHub
リポジトリの elastic-beanstalk-samples の例では、Ref 関数を使用して、作成される Amazon SNS トピックの ARN を取得し、NOTIFICATION_TOPIC
という名前の環境プロパティに割り当てています。
注記
AWS CloudFormation 関数を使用して環境プロパティを定義する場合、関数が評価される前に、Elastic Beanstalk コンソールにプロパティの値が表示されます。get-config プラットフォームスクリプトを使用して、アプリケーションで使用できる環境プロパティの値を確認できます。
注記
複数コンテナ Docker プラットフォームでは、コンテナリソースを作成するために AWS CloudFormation を使用しません。そのため、このプラットフォームでは AWS CloudFormation 関数を使用して環境プロパティを定義することができません。
例 .ebextensions/sns-topic.config
Resources: NotificationTopic: Type: AWS::SNS::Topic option_settings: aws:elasticbeanstalk:application:environment: NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'
また、この機能を使用して、AWS CloudFormation 疑似パラメータの情報を反映させることもできます。この例では、現在のリージョンを取得して、AWS_REGION
という名前のプロパティに割り当てています。
例 .ebextensions/env-regionname.config
option_settings: aws:elasticbeanstalk:application:environment: AWS_REGION: '`{"Ref" : "AWS::Region"}`'
ほとんどの Elastic Beanstalk プラットフォームでは、アプリケーションにリクエストを中継するリバースプロキシなど、インスタンス上で実行されるソフトウェア設定するオプションを指定して、その他の名前空間を定義します。プラットフォームで利用できる名前空間に関する詳細については、以下のいずれかのセクションを参照してください。
-
Go – Go 設定の名前空間
-
Java SE – Java SE 設定の名前空間
-
Tomcat – Tomcat 設定の名前空間
-
Node.js – Node.js 設定の名前空間
-
Python – Python 設定の名前空間
-
Ruby – Ruby 設定の名前空間
Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または AWS CLI を使用して、設定オプションを指定することもできます。詳細については、「設定オプション」を参照してください。
環境プロパティへのアクセス
ほとんどの場合、アクセスするアプリケーションコードの環境プロパティは、環境変数に似ています。ただし、環境プロパティは、通常アプリケーションにのみ渡されるため、環境内のインスタンスに接続し、env
を実行して表示することはできません。
-
Go –
os.Getenv
endpoint := os.Getenv("API_ENDPOINT")
-
Java SE –
System.getenv
String endpoint = System.getenv("API_ENDPOINT");
-
Tomcat –
System.getProperty
String endpoint = System.getProperty("API_ENDPOINT");
-
.NET –
appConfig
NameValueCollection appConfig = ConfigurationManager.AppSettings; string endpoint = appConfig["API_ENDPOINT"];
注記
Elastic Beanstalk は、デプロイマニフェストを使用する .NET Core アプリケーションや複数アプリケーションの IIS デプロイへの環境変数の引き渡しはサポートしていません。
-
Node.js –
process.env
var endpoint = process.env.API_ENDPOINT
-
PHP –
$_SERVER
$endpoint = $_SERVER['API_ENDPOINT'];
-
Python –
os.environ
import os endpoint = os.environ['API_ENDPOINT']
-
Ruby –
ENV
endpoint = ENV['API_ENDPOINT']
デプロイ時に実行するスクリプトなど、アプリケーションコードを使用せずに環境プロパティにアクセスするには、get-configプラットフォームスクリプトを使用します。get-config
を使用する設定の例については、GitHub の elastic-beanstalk-samples リポジトリを参照してください。