Memo

メモ > サーバ > サービス: 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 を上書きで更新するだけでは反映されない 改めてタスクを更新してデプロイする

Advertisement