1
1

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問題とRDS接続エラーを解決した話のポイントをまとめてみた

Last updated at Posted at 2025-02-19

はじめに

本記事では、ECS環境で発生した .env ファイルの読み込みエラーと、RDSのホスト名が解決できないエラーの原因と解決策について解説します。

現在発生しているエラーは以下の2つです。

1. .env ファイルが読み込めない

2025/02/19 03:10:40 .envファイルが読み込めません: open .env: no such file or directory

原因

  • db.goNewDB() 内で .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の EnableDnsHostnamesEnableDnsSupport を確認:

    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設定の有効化、セキュリティグループの調整を行うことで解決できます。

事象解決のために、実施したこと

  1. db.go から .env の読み込み処理を削除
  2. ECSタスクの MYSQL_HOST に正しいRDSエンドポイントを設定
  3. ECSコンテナから nslookup でRDSのホスト名が解決できるか確認
  4. RDSのセキュリティグループにECSを許可
  5. Terraformを適用し、ECSを強制再デプロイ
terraform apply -auto-approve
aws ecs update-service --cluster my-ecs-cluster --service my-ecs-service --force-new-deployment
1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?