コンテナへの環境変数の受け渡し
重要
機密データは、AWS Secrets Manager secrets または AWS Systems Manager Parameter Store のパラメータに保存することをお勧めします。詳細については、「コンテナへの機密データの受け渡し」を参照してください。
タスク定義で指定された環境変数は、許可されたすべてのユーザーとロールが、タスク定義の DescribeTaskDefinition
アクションを読み取ることができます。
環境変数ファイルは Amazon S3 のオブジェクトのため、Amazon S3 のセキュリティに関するすべての考慮事項が適用されます。以下のセクション 必要な IAM 許可 を参照してください。
環境変数は、以下の方法でコンテナに渡すことができます。
-
environment
コンテナ定義パラメータを個別に使用します。これは、docker runの --env
オプションにマッピングされます。 -
environmentFiles
コンテナ定義パラメータを使用して、環境変数を含む 1 つ以上のファイルを一括で一覧表示します。ファイルは、Amazon S3 でホストされている必要があります。これは、docker runの --env-file
オプションにマッピングされます。
ファイルに環境変数を指定することで、環境変数を一括で挿入できます。コンテナ定義内で、環境変数ファイルを含む environmentFiles
バケットのリストを使用して Amazon S3 オブジェクトを指定します。ファイルの拡張子には .env
を使用する必要があります。また、タスク定義ごとのファイル数は最大 10 個までに制限されています。
環境変数にはサイズ制限は適用されませんが、環境変数ファイルが大きな場合は、ディスク容量を占有してしまう可能性があります。環境変数ファイルを使用する各タスクは、ファイルのコピーをディスクにダウンロードします。タスクのクリーンアップの一部としてファイルを削除します。
サポートされている環境変数については、「高度なコンテナ定義パラメータ - 環境」を参照してください。
以下は、個々の環境変数の指定方法を示すタスク定義のスニペットです。
{ "family": "", "containerDefinitions": [ { "name": "", "image": "", ... "environment": [ { "name": "
variable
", "value": "value
" } ], ... } ], ... }
以下は、環境変数ファイルの指定方法を示すタスク定義のスニペットを示します。
{ "family": "", "containerDefinitions": [ { "name": "", "image": "", ... "environmentFiles": [ { "value": "arn:aws:s3:::
s3_bucket_name
/envfile_object_name.env
", "type": "s3" } ], ... } ], ... }
環境変数ファイルの指定に関する考慮事項
コンテナ定義で環境変数ファイルを指定する際には、以下の点を考慮してください。
-
Amazon EC2 上の Amazon ECS タスクでこの機能を使用するには、コンテナインスタンスにバージョン
1.39.0
以降のコンテナエージェントが必要です。エージェントのバージョンの確認方法と最新バージョンへの更新方法については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。 -
AWS Fargate 上のAmazon ECS タスクでは、この機能を使用するには、タスクでプラットフォームバージョン
1.4.0
以降 (Linux) を使用する必要があります。詳細については、「AWS Fargate プラットフォームのバージョン」を参照してください。変数がオペレーティングシステムプラットフォームでサポートされていることを確認します。詳細については、コンテナ定義 および その他のタスク定義パラメータ を参照してください。
-
ファイルには、ファイル拡張子
.env
と UTF-8 エンコーディングを使用する必要があります。 -
環境ファイルの各行には、
VARIABLE=VALUE
形式で環境変数を含む必要があります。スペースまたは引用符は、Amazon ECS ファイルの値の一部として含まれます。#
で始まる行はコメントとして扱われ、無視されます。環境変数ファイルの構文の詳細については、Declare default environment variables in fileを参照してください。 次に、適切な構文を示します。
#This is a comment and will be ignored VARIABLE=VALUE ENVIRONMENT=PRODUCTION
-
コンテナ定義に
environment
パラメータを使用して環境変数が指定されている場合は、環境ファイルに含まれる変数よりも優先されます。 -
同じ変数を含む複数の環境ファイルが指定されている場合、それらのファイルは入力順に処理されます。これは、変数の最初の値が使用され、重複する変数の後続の値は無視されることを意味します。一意の変数名を使用することをお勧めします。
-
環境ファイルがコンテナをオーバーライドするように指定されている場合、そのファイルが適用されます。さらに、コンテナ定義で指定されているその他の環境ファイルは、すべて無視されます。
必要な IAM 許可
この機能を使用するには、Amazon ECS タスクの実行ロールが必要です。これにより、コンテナエージェントは Amazon S3 から環境変数ファイルをプルできます。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。
作成した Amazon S3 オブジェクトへのアクセスを許可するには、以下のアクセス許可をインラインポリシーとしてタスクの実行ロールに手動で追加します。Resource
パラメータを使用して、環境変数ファイルを含む Amazon S3 バケットへのアクセス許可の範囲を指定します。詳細については、「IAM ポリシーの追加と削除」を参照してください。
-
s3:GetObject
-
s3:GetBucketLocation
以下の例では、インラインポリシーにアクセス許可が追加されています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
s3:GetObject
" ], "Resource": [ "arn:aws:s3:::examplebucket
/folder_name
/env_file_name
" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket
" ] } ] }