appbrew Tech Blog

appbrewのエンジニアチームの日々です

ECSで立ち上げるコンテナへの環境変数注入 - 2020下半期版

株式会社AppBrewの@anoworlです。AWSのドキュメントを読むのが趣味です。これは「AWS Containers Advent Calendar 2020」の6日目の記事です。昨日の記事は@RyuSAさんの「EKS:Fargateから始めるハニポ生活」でした。

データベースの認証情報など、コンテナに環境変数で注入している方は多いのではないかなと思います。

この記事では「ECSで立ち上げるコンテナへの環境変数注入 - 2020下半期版」と題して、Twelve-Factor Appに則ってアプリケーションを作る際には必須となる、環境変数による依存性注入の方法についてご紹介します。

目標

「すぐに環境変数を変更・追加・削除」出来ることです。この観点で評価しながら、それぞれの手法をご紹介していきます。

4つの方法

1. Dockerfileに含める

ECRにプッシュするコンテナのDockerfileに、例えばENVなどを用いて含めてしまう方法です。

環境変数を変えるたびにコンテナをプッシュする必要があります。

2. Task Definitionに記述する

ECSのTask Definitionに記述する方法です。

Task Definitionを変更しコンテナを立ち上げるだけで、反映が行えます。

3. Parameter Store もしくは Secrets Managerに格納する

環境変数をParameter Store もしくは Secrets Managerに格納し、そのARNをTask Definitionに記述する方法です。

既に定義された環境変数名であればTask Definitionを変更せずとも、Parameter Store もしくは Secrets Manager内にあるパラメータの変更のみで環境変数を変えられます。

4. S3に格納する

お勧めの方法です。当初はFargate起動タイプでは使えなかったのですが、11月よりFargate起動タイプでも使えるようになりました

これはS3の任意のファイルを docker run の --env-file オプションにマッピングすることが出来ます。Task Definitionを変更せずとも、環境変数の追加や削除を行えます。

ファイルは最大10個まで指定可能なので、環境変数の共通部分を分けて記述し、記述量を少なくすることも可能です。

おわりに

環境変数の注入とってもいくつか方法があることが分かりました。

なおかつ、最後の方法については2015年の11月にIssueが立ち、今年3月にWork In Progressに、5月にEC2起動タイプに対応する形でリリースされ、11月にFargate起動タイプへ対応がなされました。

このようにAWSクラウド自体も着々とアップデートされているので、適宜より良い方法を探してみると、新しい発見があるかもしれません!

We are hiring!

AWSドキュメントやIssueが好きな方お話しましょう!

www.wantedly.com