AWS VPC Endpoint for S3 with Terraform - Error: multiple VPC Endpoint Services matched

AWS VPC Endpoint for S3 with Terraform - Error: multiple VPC Endpoint Services matched

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

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

我找到了解决方案。

问题原因:

  • AWS 刚刚在 S3 (PrivateLink) 中发布了一项新功能,这意味着现在在搜索 S3 端点服务时会return编辑多个结果。参考:Amazon S3 now supports AWS PrivateLink
  • Terraform AWS Provider 中的单一数据源(如 aws_vpc_endpoint_service)return 如果 returned 多个结果则出错。

如果AWS提供商版本>=v3.10.0的解决方案:

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

如果 AWS 提供商版本 < 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}"
}

对于 aws provider < v3.10.0,可以使用 aws_vpc_endpoint_service

中的 filter 配置块解决问题
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