[アップデート]ECS on EC2で環境変数の設定がS3から参照できるようになりました
こんにちは、コンサル部の島川です。
ECSで嬉しいアップデートがありました。 これまで環境変数はタスク定義から直接設定する方法とSystems Manager パラメータストアキーを参照する方法がありましたが、新しい方法としてS3からの設定がサポートされました。
何が嬉しいのか
環境変数の設定管理をS3に任せることができます。本番環境、ステージング環境の微妙な違いもファイルを分けてコントロールをすることができるので事故も減らすことができます。
注意点
- 環境変数はdocker runコマンドの--env-fileオプションで設定される。
- タスク定義ごとに設定できるファイルの最大数は「10」
- ファイルの拡張子は「.env」にする必要がある
- ECSのコンテナバージョンは「1.39.0」以上
- タスク定義に直接設定されている環境変数が優先される。→S3で一括管理する場合は削除する必要がある
やってみた
こちらのドキュメントを参考に実際に設定してみました。
S3のファイルを用意する
ENV=dev HOGE=HOGE
任意の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" ] } ] }
タスク定義の設定
「タスク定義」→「コンテナ定義」の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でのサポートも期待です!