Terraform:如何获取动态创建的VPCE的DNS名称
解决方案
你可以利用AWS Transfer Server自动生成的VPCE服务名称的固定格式,结合Terraform资源的输出属性动态获取服务名称,无需硬编码。
方法一:动态拼接服务名称(推荐)
AWS为VPC类型的Transfer Server创建的VPCE,其服务名称格式固定为com.amazonaws.transfer.server.<server-id>,其中<server-id>就是你创建的aws_transfer_server资源的server_id属性。直接通过该属性动态拼接服务名称即可:
resource "aws_transfer_server" "sftp_lambda" { count = local.vpc_lambda_enabled domain = "S3" identity_provider_type = "AWS_LAMBDA" endpoint_type = "VPC" protocols = ["SFTP"] logging_role = var.loggingrole function = var.lambda_idp_arn[count.index] endpoint_details = { security_group_ids = var.securitygroupids subnet_ids = var.subnet_ids vpc_id = var.vpc_id } tags = { NAME = "tf-test-transfer-server" ENV = "test" } } data "aws_vpc_endpoint" "vpce" { count = local.vpc_lambda_enabled vpc_id = var.vpc_id # 动态拼接服务名称,使用Transfer Server的server_id service_name = "com.amazonaws.transfer.server.${aws_transfer_server.sftp_lambda[count.index].server_id}" depends_on = [aws_transfer_server.sftp_lambda] } output "transfer_server_dnsentry" { # 适配count场景,输出所有VPCE的DNS名称列表 value = [for vpce in data.aws_vpc_endpoint.vpce : vpce.dns_entry[0].dns_name] }
方法二:通过过滤条件批量查询
如果担心服务名称格式后续变化,可以使用aws_vpc_endpoints(复数)数据源,通过过滤条件匹配所有Transfer Server相关的VPCE,再筛选对应实例的资源:
resource "aws_transfer_server" "sftp_lambda" { # 保持原有配置不变 } data "aws_vpc_endpoints" "transfer_vpces" { count = local.vpc_lambda_enabled filters { name = "vpc-id" values = [var.vpc_id] } filters { name = "service-name" values = ["com.amazonaws.transfer.server.*"] } depends_on = [aws_transfer_server.sftp_lambda] } output "transfer_server_dnsentry" { value = [ for i in range(local.vpc_lambda_enabled) : [for vpce in data.aws_vpc_endpoints.transfer_vpces[i].endpoints : vpce.dns_entry[0].dns_name if contains(vpce.service_name, aws_transfer_server.sftp_lambda[i].server_id) ][0] ] }
说明
- 方法一依赖AWS VPCE服务名称的固定格式,这是当前AWS Transfer服务的标准行为,稳定性较高,推荐使用。
- 方法二更灵活,即使格式有小范围变化,只要服务名称包含
transfer.server即可匹配,适合需要冗余兼容的场景。 - 两种方法都需要确保AWS Provider版本≥3.69.0,以保证
aws_transfer_server的server_id属性和VPCE数据源的兼容性。
内容的提问来源于stack exchange,提问作者Eric Pang
相关产品推荐
相关产品推荐

