🐙
AWS VPC EndpointServiceのPrivateDNS機能の有効化をTerraformで行う方法
この記事のスコープ
この記事ではAWS PrivateLinkでPrivateDNS機能を利用する際に、Terraformでどのようなコードを書けばいいのかまとめました。
なお、コードについてはVPC Endpoint Service/VPC Endpoint/Route53のもののみ記載します。
※前提となるVPCなどのリソースやNLBについてはこの記事では割愛します。
解説
VPC Endpoint Serivce
VPC Endpoint ServiceでPrivateDNS機能を有効とするためには、private_dns_name
に利用したいドメイン名を記載します。
resource "aws_vpc_endpoint_service" "example" {
acceptance_required = false
network_load_balancer_arns = [aws_lb.example.arn]
private_dns_name = "利用したいドメイン名"
depens_on = [aws_lb.example]
}
Route53
VPC Endpoint Serviceにドメイン名を設定するとTXTレコードの登録に必要な各種情報が出力できるようになります。
これをRoute53に登録します。
resource "aws_route53_record" "example" {
zone_id = aws_route53_zone.primary.id
type = lookup(element(aws_vpc_endpoint_service.example.private_dns_name_configuration, 0), "type")
name = "${lookup(element(aws_vpc_endpoint_service.example.private_dns_name_configuration, 0), "name")}.利用したいドメイン名"
records = [lookup(element(aws_vpc_endpoint_service.example.private_dns_name_configuration, 0), "value")]
ttl = 1800
}
VPC Endpoint
接続するVPC EndpointでVPC EndpointServiceで指定したドメインを利用したい場合には、private_dns_enabled
をtrue
にします。
resource "aws_vpc_endpoint" "example" {
vpc_id = aws_vpc.main.id
service_name = aws_vpc_endpoint_service.example.service_name
vpc_endpoint_type = "Interface"
security_group_ids = [
aws_security_group.example_sg.id,
]
private_dns_enabled = true
}
おわりに
VPC間を接続する際に「ドメイン名を固定して通信したい」という要望があり調べました。
調べていく中で、まとまっている記事がなくて困ったので、備忘もかねて書きました。
この記事が何かの参考になれば幸いです。
Discussion