メモ > サーバ > サービス: AWS > ECR+ECS+Codeシリーズで自動デプロイ: 環境変数をファイルから読み込む
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 を上書きで更新するだけでは反映されない。
改めてタスクを更新してデプロイする。