■ECR+ECS+Codeシリーズで自動デプロイ: 環境変数をファイルから読み込む
ECS(Fargate)でLaravelの環境変数の設定方法 - Qiita
https://qiita.com/urushibata/items/84e6701e7fbf453d2fe7
プログラムの設定(.env)はタスク定義の環境変数が本筋か
…と思ったが、変数が多いとメンテナンスがツラくなる
.envをS3に置いて参照させることができるようになっているので、この「環境ファイルを追加」を使うのが良さそう
RDSの情報をSecrets Managerで扱うべきかどうかは確認しておきたい
(.envを非公開バケットに置くのなら、値を直接書いても問題無さそうな)
[アップデート]ECS on EC2で環境変数の設定がS3から参照できるようになりました | DevelopersIO
https://dev.classmethod.jp/articles/ecs_ec2_env_s3/
Fargateの環境変数をs3においたenvファイルから取得する方法 - Qiita
https://qiita.com/GoogIeSensei/items/2b16b06c59ac202639e5
■S3にバケットを作成
S3 → バケットを作成
バケット名: ecs-example-env
AWSリージョン: アジアパシフィック(東京)
このバケットのブロックパブリックアクセス設定: パブリックアクセスをすべて ブロック
※ファイルアップロード先のバケットとは別に作成するべきか
※バケット名は「案件名」+「-env」にするか
■S3に.envファイルを作成
production.env
S3_VALUE1=S3
S3_VALUE2=S3メッセージ!
S3_VALUE3=This is a S3 message!
作成したバケットの直下に配置した
https://ecs-example-env.s3.ap-northeast-1.amazonaws.com/production.env
■ポリシーの作成
ポリシーの作成で「JSON」タブに以下を入力する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::ecs-example-env/production.env"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::ecs-example-env"
]
}
]
}
以下の内容でポリシーを作成する
名前: Example-GettingEnvironmentForECS
説明: Policy to get Environment for ECS
■タスク実行ロールの作成
※ロール ecsTaskExecutionRole を作成済みの場合、この手順は飛ばす
以下の内容でロールを作成する
信頼されたエンティティを選択
信頼されたエンティティタイプ: AWSのサービス
ユースケース
他のAWSのサービスのユースケース:
Elastic Container Service → Elastic Container Service Task を選択
「次へ」ボタンをクリック
許可を追加
「AmazonECSTaskExecutionRolePolicy」を検索してチェックを入れる
「次へ」ボタンをクリック
名前、確認、および作成
ロール名: ecsTaskExecutionRole
「ロールを作成」ボタンをクリック
■タスク実行ロールにアクセス権限を付与
上の手順で作成した ecsTaskExecutionRole を選択
「許可を追加 → ポリシーをアタッチ」をクリック
上の手順中で作成した Example-GettingEnvironmentForECS にチェックを入れ、「ポリシーのアタッチ」ボタンをクリック
■ファイルの情報を読み込ませるためにタスクを更新
タスク定義に新しいリビジョンを作成する
「Example」にチェックを入れて「新しいリビジョンの作成」をクリック
(以下、前回タスクを作成した時の内容をベースに入力する)
「php」コンテナの「環境変数」にある「環境ファイルを追加」をクリックし、一例だが以下のように入力する
ロケーション: arn:aws:s3:::ecs-example-env/production.env
上記で更新してデプロイすると、各値がコンテナに渡されるようになる
各値は環境変数に格納されるので、例えばPHPの場合は以下のようにすると参照できる
echo $_ENV['S3_VALUE1'];
■ファイルを更新する場合
S3バケットの production.env を上書きで更新するだけでは反映されない
改めてタスクを更新してデプロイする