Terraform:如何在动态创建VPCE服务名称时获得它



我正试图使用数据资源(通过terraform(获得动态创建的VPCE端点的dns名称,但我面临的问题是,在创建资源之前,不知道

服务名称有没有任何方法可以检索这些信息,因为硬编码的服务名称不适用于自动化?

例如,这将不起作用,因为service_name是动态

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
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
}

注意:VPCE是从AWS SFTP传输服务器资源中自动创建的,该资源配置的端点类型为VPC(而不是现在不推荐使用的VPC_endpoint(。我无法控制端点服务名称的命名。这一切都是在后台创建的。

AWS提供商的最低版本:要求3.69.0。

下面是一个使用Lambda作为IDP来设置SFTP传输服务器的示例cloudformation脚本。这将自动创建VPCE。因此,我的目标是尽可能使用terraform从自动创建的VPC端点输出DNS名称。

cloudFormation 中的示例设置

数据源:aws_vpc_endpoint资源:aws_transfer_server

我收到了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}"]
}
}

相关内容

  • 没有找到相关文章

最新更新