VPCエンドポイント作成時 InvalidParameter: Enabling private DNS requires both enableDnsSupport and enableDnsHostnames VPC attributes set to true for vpc-xxxxxx のエラー対処

terraform

TerraformにおいてVPCエンドポイント作成時に InvalidParameter: Enabling private DNS requires both enableDnsSupport and enableDnsHostnames VPC attributes set to true for vpc-xxxxxxといったエラーが発生した場合の対処方法について解説します。

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サーバに名前解決を要求できるかどうかを制御します。

enableDnsSupporttrueにすると、VPC内のEC2インスタンスはAmazonが提供するDNSサービスへアクセスできます。

enableDnsHostnamesはVPC内のEC2インスタンスに対してプライベートなDNSホスト名が割り当てられるかどうかを制御します。

enableDnsHostnamesをtrueに設定すると、EC2インスタンスにプライベートDNSホスト名が付与されます。

VPCエンドポイントを作成する場合は上記の注意点がありますのでご参考になればと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です