[アップデート]ECS on EC2で環境変数の設定がS3から参照できるようになりました

2020.05.19

こんにちは、コンサル部の島川です。

ECSで嬉しいアップデートがありました。 これまで環境変数はタスク定義から直接設定する方法とSystems Manager パラメータストアキーを参照する方法がありましたが、新しい方法としてS3からの設定がサポートされました。

何が嬉しいのか

環境変数の設定管理をS3に任せることができます。本番環境、ステージング環境の微妙な違いもファイルを分けてコントロールをすることができるので事故も減らすことができます。

注意点

  • 環境変数はdocker runコマンドの--env-fileオプションで設定される。
  • タスク定義ごとに設定できるファイルの最大数は「10」
  • ファイルの拡張子は「.env」にする必要がある
  • ECSのコンテナバージョンは「1.39.0」以上
  • タスク定義に直接設定されている環境変数が優先される。→S3で一括管理する場合は削除する必要がある

やってみた

こちらのドキュメントを参考に実際に設定してみました。

S3のファイルを用意する

test.env

ENV=dev
HOGE=HOGE

任意のS3バケットにアップロードしておきます。

IAMロールの設定

タスク定義の実行ロール「タスクロール定義」に以下の権限を追加します。

  • s3:GetObject
  • s3:GetBucketLocation

iamrole

{
  "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"
      ]
    }
  ]
}

タスク定義の設定

「タスク定義」→「コンテナ定義」のEnvironment Filesの設定を追加します。参照したいS3のファイルをARNで指定します。

例:arn:aws:s3:::examplebucket/folder_name/env_file_name

EC2を起動して中身を確認

直接コンテナの中に入って確認しました。

root@581d3b4f249f:/usr/local/apache2# env | grep ENV
ENV=dev
root@581d3b4f249f:/usr/local/apache2# env | grep HOGE
HOGE=HOGE

さいごに

ECS on EC2でまた一つ嬉しい機能がサポートされました。ECS on Fargateでのサポートも期待です!