1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:ECS環境で.envが読み込めない?GO_ENV=prodを設定したら案外いけた件

Last updated at Posted at 2025-02-19

はじめに

ECS環境で .env ファイルの読み込みエラーが発生し、アプリケーションの動作に支障が出ていました。

本記事では、その原因と GO_ENV=prod を追加することでエラーを解消する方法について説明します。

変更の背景

ECS環境で .env ファイルが読み込めず、以下のエラーが発生していました。

.envファイルが読み込めません: open .env: no such file or directory

この問題の原因は、ECS環境で GO_ENV の設定が未定義または dev のままだったことです。

本来、GO_ENV=prod にすることで .env の読み込みを回避し、環境変数を適切に適用する必要があります。そのため、ECSのタスク定義 (aws_ecs_task_definition.main) に GO_ENV=prod を追加しました。

変更前のECSタスク定義

"environment": [
  {
    "name": "MYSQL_USER",
    "value": "myuser"
  },
  {
    "name": "MYSQL_PW",
    "value": "${jsondecode(data.aws_secretsmanager_secret_version.rds_password_v5.secret_string)[\"password\"]}"
  },
  {
    "name": "MYSQL_HOST",
    "value": "${aws_db_instance.rds_instance.endpoint}"
  },
  {
    "name": "MYSQL_PORT",
    "value": "3306"
  },
  {
    "name": "MYSQL_DB",
    "value": "mydatabase"
  }
]

この状態では GO_ENV が設定されておらず、アプリケーションが .env の読み込みを試みてエラーになっていました。

変更後のECSタスク定義

GO_ENV=prod を追加し、環境変数の適用を強制しました。

"environment": [
  {
    "name": "GO_ENV",
    "value": "prod"
  },
  {
    "name": "MYSQL_USER",
    "value": "myuser"
  },
  {
    "name": "MYSQL_PW",
    "value": "${jsondecode(data.aws_secretsmanager_secret_version.rds_password_v5.secret_string)[\"password\"]}"
  },
  {
    "name": "MYSQL_HOST",
    "value": "${aws_db_instance.rds_instance.endpoint}"
  },
  {
    "name": "MYSQL_PORT",
    "value": "3306"
  },
  {
    "name": "MYSQL_DB",
    "value": "mydatabase"
  }
]

これにより、ECS環境で GO_ENV=prod が適用され、.env の読み込みが不要になります。

適用方法

1. Terraformの変更を適用

Terraformの設定を変更した後、以下のコマンドを実行して適用します。

terraform init
terraform apply -auto-approve

2. ECSのタスクを再デプロイ

Terraformの適用後、ECSのサービスを強制的に再デプロイし、新しい環境変数が適用されるようにします。

aws ecs update-service --cluster my-ecs-cluster --service my-ecs-service --force-new-deployment

変更後の影響

  • ECS環境で .env が不要になり、エラーが解消
  • アプリケーションが正しく環境変数を使用するようになる
  • デプロイ時の安定性向上(開発環境と本番環境の分離が明確になる)

まとめ

ECS環境で .env ファイルが読み込めないエラーの原因は、環境変数 GO_ENV が未定義だったことでした。タスク定義に GO_ENV=prod を追加することで .env の依存をなくし、環境変数のみで動作するように修正しました。

Terraformの適用とECSの再デプロイを行うことで、安定したデプロイ環境を実現できます。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?