You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:24:27