はじめに
本記事では、ECS環境で発生した .env
ファイルの読み込みエラーと、RDSのホスト名が解決できないエラーの原因と解決策について解説します。
現在発生しているエラーは以下の2つです。
1. .env
ファイルが読み込めない
2025/02/19 03:10:40 .envファイルが読み込めません: open .env: no such file or directory
原因
-
db.go
のNewDB()
内で.env
を読み込もうとしている。 - ECS環境では
.env
ファイルが存在しないため、エラーになる。
修正方法
db.go
で .env
の読み込み処理を削除
if os.Getenv("GO_ENV") == "dev" {
err := godotenv.Load()
if err != nil {
log.Fatal(err)
}
}
⬇ この部分を削除
// `GO_ENV` に関係なく `.env` を読み込まないように修正
2. RDSのホスト名が解決できない
dial tcp: lookup terraform-2025021903052566110000000b.crq4wsi04dj7.ap-northeast-1.rds.amazonaws.com:3306:3306: no such host
原因
- RDSのエンドポイントが誤っている、またはRDSが作成されていない。
- ECSタスクがRDSのDNSを解決できない。
- RDSのセキュリティグループでECSのアクセスが許可されていない。
修正方法
1. RDSのエンドポイントを確認
ECSから RDSのエンドポイントが正しいか確認 します。
aws rds describe-db-instances --region ap-northeast-1 --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus,Endpoint.Address]'
- ステータスが
available
ならOK - エンドポイントの値を
MYSQL_HOST
に設定しているか確認
もしエンドポイントが異なっていたら、ECSタスク定義で MYSQL_HOST
を修正して再デプロイ。
2. ECSのDNS設定を確認
ECSコンテナから DNSが正しく解決できるか確認 します。
aws ecs execute-command --cluster my-ecs-cluster --task タスクID --container my-app-repo --command "/bin/sh" --interactive
その後、コンテナ内で以下を実行:
nslookup terraform-2025021903052566110000000b.crq4wsi04dj7.ap-northeast-1.rds.amazonaws.com
-
エラーになる場合 → VPCのDNS設定が無効になっている可能性
VPCの
EnableDnsHostnames
とEnableDnsSupport
を確認:aws ec2 describe-vpcs --region ap-northeast-1 --query 'Vpcs[*].[VpcId,EnableDnsHostnames,EnableDnsSupport]'
false
なら修正
resource "aws_vpc" "main" { enable_dns_support = true enable_dns_hostnames = true }
3. RDSのセキュリティグループを修正
ECSがRDSにアクセスできるように、RDSのセキュリティグループ (rds_sg
) にECSのセキュリティグループ (ecs_sg
) を許可する。
resource "aws_security_group_rule" "allow_ecs_to_rds" {
type = "ingress"
from_port = 3306
to_port = 3306
protocol = "tcp"
security_group_id = aws_security_group.rds_sg.id
source_security_group_id = aws_security_group.ecs_sg.id
}
Terraformを適用:
terraform apply -auto-approve
最終的な修正ポイント
エラー | 修正方法 |
---|---|
.env ファイルがないエラー |
db.go から .env の読み込み処理を削除 |
RDSのホストが解決できない | RDSのエンドポイントを確認 & MYSQL_HOST を更新 |
ECSがRDSに接続できない | DNS設定 (EnableDnsHostnames / EnableDnsSupport ) を有効化 |
RDSのセキュリティグループ設定ミス | ECSのセキュリティグループを許可 (aws_security_group_rule ) |
まとめ
ECS環境で .env
ファイルの読み込みエラーと、RDSのホスト名解決エラーが発生しました。それぞれの原因を分析し、.env
の読み込み処理の削除、RDSのエンドポイント確認、DNS設定の有効化、セキュリティグループの調整を行うことで解決できます。
事象解決のために、実施したこと
db.go
から.env
の読み込み処理を削除- ECSタスクの
MYSQL_HOST
に正しいRDSエンドポイントを設定 - ECSコンテナから
nslookup
でRDSのホスト名が解決できるか確認 - RDSのセキュリティグループにECSを許可
- Terraformを適用し、ECSを強制再デプロイ
terraform apply -auto-approve
aws ecs update-service --cluster my-ecs-cluster --service my-ecs-service --force-new-deployment