この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、コンサル部の島川です。
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でのサポートも期待です!