문제 상황 및 초기 설정
당신은 VPC 내부에서 RDS와 ElastiCache에 대한 DNS 설정을 위해 Route 53을 사용하고자 했습니다. 이를 위해 Terraform을 사용하여 Private Hosted Zone을 생성하고, RDS와 ElastiCache 인스턴스에 대한 CNAME 레코드를 설정했습니다. 그러나 설정 후에도 VPC 내의 리소스에서 해당 DNS 이름(db.singsong.sangsong.shop
, redis.singsong.sangsong.shop
)을 해석할 수 없었고, MySQL 연결 시 DNS 해석 오류가 발생했습니다.
:3306
)까지 CNAME 레코드에 포함되었기 때문에 DNS 해석이 실패했습니다.split()
함수를 사용하여 CNAME 레코드에서 포트 번호를 제거했습니다.records = [split(":", aws_db_instance.singsong_db.endpoint)[0]] # 포트 번호를 제거하여 도메인 이름만 사용
• 문제 설명: CNAME 레코드는 DNS 시스템에서 도메인 이름을 다른 도메인 이름으로 매핑하는 데 사용됩니다. CNAME 레코드는 단순히 도메인 이름을 가리키기 때문에 포트 번호(:3306)를 포함해서는 안 됩니다.
• 이유:
• DNS 표준: DNS 시스템에서 CNAME 레코드는 단순히 도메인 이름 간의 연결을 나타내며, URL이나 포트 정보는 포함할 수 없습니다. CNAME 레코드가 URL 또는 포트를 포함하게 되면, DNS 해석이 실패하거나, 잘못된 결과를 반환하게 됩니다.
• DNS 클라이언트 해석 오류: 포트 번호가 포함된 CNAME 레코드는 DNS 클라이언트에서 제대로 해석되지 않아 “NXDOMAIN” 같은 오류를 유발할 수 있습니다.
• 솔루션: Terraform에서 split() 함수를 사용하여 CNAME 레코드에서 포트 번호를 제거했습니다.
enable_dns_hostnames
및 enable_dns_support
)enable_dns_hostnames
및 enable_dns_support
가 true
로 설정되어 있어야 합니다. 이 설정이 누락되거나 비활성화된 경우, VPC 내부에서 DNS 이름을 사용할 수 없습니다.enable_dns_hostnames
와 enable_dns_support
를 true
로 설정하여 VPC 내부에서 DNS 해석이 가능하도록 했습니다.enable_dns_hostnames = true
enable_dns_support = true
• 문제 설명: VPC 내부에서 도메인 이름을 올바르게 해석하기 위해서는 enable_dns_hostnames와 enable_dns_support 설정이 필요합니다.
• 설명:
• enable_dns_support: 이 옵션을 활성화하면 VPC에서 DNS 해석을 사용할 수 있게 됩니다. 이 설정이 true로 설정되면, VPC 내의 인스턴스는 도메인 이름을 IP 주소로 해석할 수 있습니다.
• enable_dns_hostnames: 이 옵션을 활성화하면 VPC에서 생성된 EC2 인스턴스에 대해 DNS 호스트네임을 할당할 수 있습니다. 이 설정이 true로 설정되면, VPC 내의 인스턴스는 Public 또는 Private DNS 호스트네임을 가질 수 있게 됩니다.
• 솔루션: VPC 설정에서 이 두 옵션을 활성화하여 DNS 해석을 가능하게 했습니다.
Private Hosted Zone과 VPC 연결
문제: Route 53에서 생성한 Private Hosted Zone이 VPC와 올바르게 연결되지 않은 경우, VPC 내부의 리소스들은 해당 Hosted Zone의 DNS 레코드를 해석할 수 없습니다. 이로 인해 "NXDOMAIN" 오류가 발생했습니다.
해결: Terraform 코드에서 Private Hosted Zone을 생성할 때 VPC와 올바르게 연결했는지 확인했습니다.
resource "aws_route53_zone" "singsong_zone" {
name = var.route53_zone_name
vpc {
vpc_id = aws_vpc.singsong_vpc.id
}
private_zone = true
}
결과: Hosted Zone과 VPC가 올바르게 연결되어 DNS 레코드가 VPC 내부에서 해석될 수 있게 되었습니다.
• 정의: Public Hosted Zone은 인터넷 상에서 접근 가능한 도메인 이름을 관리합니다. 인터넷 사용자가 이 도메인 이름을 해석할 수 있습니다.
• 사용 예: 웹사이트의 도메인 이름(example.com)을 관리할 때 사용됩니다. Public Hosted Zone에 설정된 도메인 이름은 전 세계 어디서든 접근 가능합니다.
• VPC와의 연결: Public Hosted Zone은 VPC와 직접적으로 연결되지 않습니다. 이는 인터넷에서 접근 가능한 도메인 이름을 제공하는 역할을 합니다.
• 정의: Private Hosted Zone은 특정 VPC 내에서만 접근 가능한 도메인 이름을 관리합니다. 인터넷 사용자는 이 도메인 이름을 해석할 수 없습니다.
• 사용 예: VPC 내부에서만 접근해야 하는 리소스(RDS, ElastiCache 등)에 대한 도메인 이름을 관리할 때 사용됩니다. 이 도메인 이름은 해당 VPC에 속한 인스턴스에서만 접근 가능합니다.
• VPC와의 연결: Private Hosted Zone은 특정 VPC와 연결되어야 합니다. 이 연결을 통해 VPC 내에서만 DNS 레코드를 해석할 수 있습니다.
• 차이점 요약: Public Hosted Zone은 인터넷에서 접근 가능하고, Private Hosted Zone은 VPC 내부에서만 접근 가능합니다. Private Hosted Zone은 보안 및 내부 리소스 접근을 위해 사용되며, Public Hosted Zone은 외부 공개 리소스에 사용됩니다.