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