【AWS】ECSのタスクに環境変数を指定する3つの方法 | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

今回も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つの手法について整理した。

以上!