今回もAWSのECSコンテナ関連を勉強していきます。
※ECSとは、などの基本的な話は以下の記事にまとめています。
さて、ECS利用時、コンテナに環境変数を渡したいことがあると思います。
そのためには、ECSでコンテナを管理する単位である「タスク」の定義において、
環境変数を設定するのですが、設定方法は3種類あります。
そこで今回の記事では、ECSタスク定義での環境変数の設定方法を整理していきます。
もくじ
・前提
方法①プレーンテキストで設定
ECSタスク定義での環境変数設定方法の1つ目は、
環境変数の名称と値をそのまま指定するという、1番シンプルな方法である。
オブジェクト配列型のパラメータ"environment"にて設定する。
"environment"パラメータのフォーマットは以下の通り。
"environment":[
{
"name":"環境変数名"
,"value":"値"
}
]
例えば以下のようにして設定する。
"environment":[
{
"name":"DB_NAME"
,"value":"testdb"
}
,{
"name":"HOST_SERVER"
,"value":"a_server"
}
]
方法②環境変数の設定ファイルを指定
ECSタスク定義での環境変数設定方法の2つ目は、
環境変数情報を記載した設定ファイルを別途用意しておき、
当該ファイルを参照するという方法である。
◎環境変数の設定ファイルに関するルール
*ファイルそのものの作成ルール
・ファイルの拡張子は .env とする。
・ファイル内の各行に、KEY=VALUE 形式で環境変数を記述する。
・ファイル内の、#で始まる行は、コメント行として扱う。
・ファイルはAmazon S3に保存しておく必要がある。
*タスク定義にて環境設定ファイルを参照する際のルール
・コンテナ定義に個別の環境変数が指定されている場合、
環境変数の設定ファイルに含まれる変数よりも優先される。
・同じ変数を含む複数の環境ファイルが指定されている場合、
最初に読み込まれた変数値が優先される。
◎タスク定義のパラメータフォーマット
タスク定義では、オブジェクト配列型のパラメータ"environmentFiles"にて、
参照ファイルを指定する。
指定できるファイルは最大10個まで(つまり"environmentFiles"の配列要素は最大10個)。
"environmentFiles"パラメータのフォーマットは以下の通り。
"environmentFiles":[
{
"value":"環境設定ファイルを含む Amazon S3のARN"
,"type":"使用する設定ファイルのタイプ(「s3」で固定)"
}
]
例えば以下のように設定する。
"environmentFiles":[
{
"value":"arn:aws:s3:::test_bucket"
,"type":"s3"
},{
"value":"arn:aws:s3:::my_corporate_bucket/Development"
,"type":"s3"
}
]
方法③機密情報を含む場合の設定
ECSタスク定義での環境変数設定方法の3つ目は、
機密情報(ユーザの認証情報等)を含む環境変数を設定したい場合の方法である。
◎前提
大前提として、機密情報を平文で保存・参照するのは、セキュリティ上NGである。
そこで、コンテナ関連サービスのみならず、機密情報を含む環境変数を使用したい場合、AWSでは、
以下のいずれかのサービスを利用することが推奨されている。
・AWS Secrets Manager
・AWS Systems Manager の Parameter Store機能
どちらのサービスも、機密情報をキー&バリュー形式で暗号化したうえで、
AWS KMS(AWS Key Management Service/※1)に、一元的に保存・管理できる機能を持つ。
両サービスに細かな違いや、連携できるAWSサービスはあるものの、
基本的な提供機能は同じだと思って良い。
※1 AWS KMS:暗号化操作に使用されるキーを簡単に作成および管理できるマネージドサービス。
◎タスク定義で機密情報を含む環境変数を設定するには
AWS Secrets Manager または AWS Systems Manager の Parameter Storeに保存された機密情報を、
環境変数としてECSのタスク定義で定義するには、
オブジェクト配列型のパラメータ"secrets"を用いる。
"secrets"には、保存済の機密情報へのアクセス情報を設定する。
"secrets"パラメータのフォーマットは以下の通り。
"secrets":[
{
"name":"コンテナの環境変数として設定する名称",
"valueFrom":"参照する機密情報のARN"
}
]
補足として、secrets\valueFromには、
以下のいずれかの完全なARN(AWS Resouce Name)を指定する。
・AWS Secrets Manager シークレット
・AWS Systems Manager Parameter Store 内のパラメータ
例えば以下のように設定する。
"secrets":[
{
"name":"USER1_SECRET_ACCESS_KEY",
"valueFrom":"arn:aws:ssm:ap-northeast-1:123456789012:parameter/user01_secret-access-key"
}
]
今回はECSタスク定義において、環境変数を設定する際の3つの手法について整理した。
以上!