1

aws_vpc_endpoint_service在 Terraform (v0.11.14) 中使用在我的 AWS 账户上为 S3 创建 AWS VPC 端点,最近开始遇到以下错误:Error: multiple VPC Endpoint Services matched; use additional constraints to reduce matches to a single VPC Endpoint Service

相同的代码之前运行良好。分辨率是多少?

4

2 回答 2

1

对于 aws provider < v3.10.0,可以使用中的filter配置块解决问题aws_vpc_endpoint_service

data "aws_vpc_endpoint_service" "s3" {
  service = "s3"
  filter {
    name   = "service-type"
    values = ["Gateway"]
  }
}
    
resource "aws_vpc_endpoint" "s3" {
  vpc_id       = "${aws_vpc.vpc.id}"
  service_name = "${data.aws_vpc_endpoint_service.s3.service_name}"
}

另请参阅 github 问题页面https://github.com/hashicorp/terraform-provider-aws/issues/17417

于 2021-03-02T13:33:34.253 回答
1

我找到了解决方案。

问题的原因:

  • AWS 刚刚在 S3 (PrivateLink) 中发布了一项新功能,这意味着现在在搜索 S3 端点服务时会返回多个结果。参考:Amazon S3 现在支持 AWS PrivateLink
  • 如果返回多个结果,Terraform AWS Provider 中的单一数据源(如 aws_vpc_endpoint_service)会返回错误。

AWS Provider Version >= v3.10.0 的解决方案:

  • 在 Terraform 模板中使用以下内容:
data "aws_vpc_endpoint_service" "s3" {
  service      = "s3"
  service_type = "Gateway"
}

AWS Provider Version < v3.10.0 的解决方案:

如果您无法更新到提供程序的最新版本,作为临时解决方法,您还可以使用 com.amazonaws.REGION.s3 作为下游配置中的端点值,而不是使用数据源。

  • 在 Terraform 模板中使用以下内容:
data "aws_region" "current" {}

resource "aws_vpc_endpoint" "s3" {
  vpc_id       = "${local.vpc_id}"
  service_name = "com.amazonaws.${data.aws_region.current.name}.s3"
}

就这些。

以前的参考代码不再起作用:

data "aws_vpc_endpoint_service" "s3" {
  service = "s3"
}

resource "aws_vpc_endpoint" "s3" {
  vpc_id       = "${local.vpc_id}"
  service_name = "${data.aws_vpc_endpoint_service.s3.service_name}"
}
于 2021-02-12T13:06:10.323 回答