我正试图使用数据资源(通过terraform(获得动态创建的VPCE端点的dns名称,但我面临的问题是,在创建资源之前,不知道 服务名称有没有任何方法可以检索这些信息,因为硬编码的服务名称不适用于自动化? 例如,这将不起作用,因为service_name是动态 注意:VPCE是从AWS SFTP传输服务器资源中自动创建的,该资源配置的端点类型为VPC(而不是现在不推荐使用的VPC_endpoint(。我无法控制端点服务名称的命名。这一切都是在后台创建的。 AWS提供商的最低版本:要求3.69.0。 下面是一个使用Lambda作为IDP来设置SFTP传输服务器的示例cloudformation脚本。这将自动创建VPCE。因此,我的目标是尽可能使用terraform从自动创建的VPC端点输出DNS名称。 cloudFormation 中的示例设置 数据源:aws_vpc_endpoint资源:aws_transfer_serverresource "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
service_name = "com.amazonaws.transfer.server.c-001"
depends_on = [aws_transfer_server.sftp_lambda]
}
output "transfer_server_dnsentry" {
value = data.aws_vpc_endpoint.vpce.0.dns_entry[0].dns_name
}
我收到了Hashicorp Terraform Support对此的回应,这就是他们的建议:
您可以通过调用VPC_Endpoint_service资源[a]的以下导出属性来获得服务SFTP Server创建的VPC Endpoint。
注意:某些设置会导致AWS在您配置的资源之外创建其他资源。AWS SFTP传输服务就是其中之一。这种行为超出了Terraform的控制范围,更多的原因是AWS如何设计服务。
但是,您可以在创建传输服务后,通过VPCe ID[b]导入它代表您创建的VPC端点,将该VPC端点重新置于Terraform的控制之下。如果您想从当前的AWS设置中提取服务名称的更多想法,请随时查看此示例[c]。
希望能有所帮助!非常感谢。
[a]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_endpoint_service#service_name[b]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_endpoint#import[c]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_endpoint#gateway-负载平衡器端点类型
有一条前进的道路,就像我早些时候在进口方面分享的那样,但不幸的是,它不会完全自动化。
可选地,您可以使用provisioner[1]和aws ec2 describe vpc端点服务-服务名称命令[2]来获取所需的服务名称。
恐怕这是我能提供的最后一个变通方法,正如我们在这里的文档[3]中所解释的那样——这将解释为什么——尽管我们很想,Terraform无法解决所有用例。
[1]https://www.terraform.io/language/resources/provisioners/remote-exec[2]https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-vpc-endpoint-services.html[3]https://www.terraform.io/language/resources/provisioners/syntax
我终于找到了解决方案:
data "aws_vpc_endpoint" "transfer_server_vpce" {
count = local.is_enabled
vpc_id = var.vpc_id
filter {
name = "vpc-endpoint-id"
values = ["${aws_transfer_server.transfer_server[0].endpoint_details[0].vpc_endpoint_id}"]
}
}