TerraformにおいてVPCエンドポイント作成時に InvalidParameter: Enabling private DNS requires both enableDnsSupport and enableDnsHostnames VPC attributes set to true for vpc-xxxxxx
といったエラーが発生した場合の対処方法について解説します。
Table of Contents
VPCエンドポイント作成時エラー
TerraformでVPCエンドポイント作成時、 private_dns_enabled = true
にしていると以下エラーが発生しました。
Error: creating EC2 VPC Endpoint (com.amazonaws.ap-northeast-1.ssm): InvalidParameter: Enabling private DNS requires both enableDnsSupport and enableDnsHostnames VPC attributes set to true for vpc-xxxxxxxxxxxxxx
│ status code: 400, request id: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx
│
│ with aws_vpc_endpoint.ssm,
│ on vpc_endpoint.tf line 4, in resource "aws_vpc_endpoint" "ssm":
│ 4: resource "aws_vpc_endpoint" "ssm" {
日本語にすると以下のように翻訳されます。
エラー: EC2 VPC Endpoint (com.amazonaws.ap-northeast-1.ssm)の作成: InvalidParameter: プライベートDNSを有効にするには、enableDnsSupportとenableDnsHostnamesの両方のVPC属性がvpc-xxxxxxxxxxxxxxのtrueに設定されている必要があります。 ステータスコード 400, リクエスト ID: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx │ │ aws_vpc_endpoint.ssmを使用します、 │ vpc_endpoint.tf 4行目、リソース “aws_vpc_endpoint” “ssm “内: │ 4: リソース “aws_vpc_endpoint””ssm”{」内
結論
VPCリソースに記述している
enable_dns_hostnames, enable_dns_support
の両方を有効にする必要がある。
VPCリソースのコード記述例は以下です。
resource "aws_vpc" "cloudtech_vpc" {
assign_generated_ipv6_cidr_block = false
cidr_block = "10.0.0.0/21"
enable_dns_hostnames = true
enable_dns_support = true
enable_network_address_usage_metrics = false
instance_tenancy = "default"
tags = {
Name = "${var.project}-vpc"
Project = var.project
}
}
enable_dns_hostnames = true
enable_dns_support = true
と有効化する必要があります。
原因
private_dns_enabled = true
にしている場合、VPCリソース側で
enableDnsSupport
enableDnsHostnames
上記を true
に設定する必要があります。
VPCエンドポイントのコード例は以下です。
resource "aws_vpc_endpoint" "ssm" {
vpc_endpoint_type = "Interface"
vpc_id = aws_vpc.cloudtech_vpc.id
service_name = "com.amazonaws.ap-northeast-1.ssm"
subnet_ids = [
aws_subnet.cloudtech_subnet_private1.id
]
private_dns_enabled = true
security_group_ids = [
aws_security_group.cloudtech_vpc_endpoint_ssm_sg.id
]
tags = {
Name = "${var.project}-ssm"
Project = var.project
}
}
enableDnsSupport
はVPC内のEC2インスタンスがDNSサーバに名前解決を要求できるかどうかを制御します。
enableDnsSupport
をtrue
にすると、VPC内のEC2インスタンスはAmazonが提供するDNSサービスへアクセスできます。
enableDnsHostnames
はVPC内のEC2インスタンスに対してプライベートなDNSホスト名が割り当てられるかどうかを制御します。
enableDnsHostnames
をtrueに設定すると、EC2インスタンスにプライベートDNSホスト名が付与されます。
VPCエンドポイントを作成する場合は上記の注意点がありますのでご参考になればと思います。