如何通过Terraform Data块获取API Gateway域名并配置Route53 CNAME
问题解决方法
1. 先确认数据源类型是否匹配你的API Gateway版本
- 若自定义域名关联的是REST API/WebSocket API,用
aws_api_gateway_domain_name数据源 - 若关联的是HTTP API/HTTP v2 API,必须用
aws_apigatewayv2_domain_name数据源(这是最容易踩的坑)
2. 使用正确的输出属性
根据你的自定义域名类型,选对应的属性:
- Regional类型(关联域名格式为
xxx.execute-api.<region>.amazonaws.com):用regional_domain_name属性 - Edge-optimized类型(关联域名格式为
xxx.cloudfront.net):用cloudfront_domain_name属性
示例代码
情况1:REST API的Regional自定义域名
# 获取未被Terraform管理的API Gateway自定义域名 data "aws_api_gateway_domain_name" "cdn_qa1" { domain_name = "cdn.qa1.example.com" } # 创建Route53 CNAME记录 resource "aws_route53_record" "cdn_qa1_cname" { zone_id = "YOUR_ROUTE53_ZONE_ID" # 替换成你的托管区ID name = "cdn.qa1.example.com" type = "CNAME" ttl = 300 records = [data.aws_api_gateway_domain_name.cdn_qa1.regional_domain_name] }
情况2:HTTP API的自定义域名
# 获取HTTP API的自定义域名 data "aws_apigatewayv2_domain_name" "cdn_qa1" { domain_name = "cdn.qa1.example.com" } # 创建Route53 CNAME记录 resource "aws_route53_record" "cdn_qa1_cname" { zone_id = "YOUR_ROUTE53_ZONE_ID" name = "cdn.qa1.example.com" type = "CNAME" ttl = 300 records = [data.aws_apigatewayv2_domain_name.cdn_qa1.regional_domain_name] }
3. 检查Terraform AWS Provider版本
不同版本的Provider可能调整过属性名,建议用最新稳定版:
- 执行
terraform providers查看当前版本 - 若版本过旧,更新配置:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" # 替换为最新稳定版 } } }
4. 备选方案:直接用已知目标域名
既然你已经知道关联的API Gateway域名为ddd4qddddddda.execute-api.eu-west-1.amazonaws.com,可以跳过数据源直接写进记录:
resource "aws_route53_record" "cdn_qa1_cname" { zone_id = "YOUR_ROUTE53_ZONE_ID" name = "cdn.qa1.example.com" type = "CNAME" ttl = 300 records = ["ddd4qddddddda.execute-api.eu-west-1.amazonaws.com"] }
内容的提问来源于stack exchange,提问作者Justine mathew Zacharias
相关产品推荐
相关产品推荐

