应用Terraform计划在AWS中创建VPC端点时出错

问题描述 投票:2回答:2

我正在尝试为EC2节点创建一个VPC端点,以访问us-east-1中同一VPC内的S3存储桶,而不必通过NAT网关。通过浏览器用户界面手动设置时,一切似乎都正常。然后,我将其删除,并在terraform配置中将其定义为aws_vpc_endpoint,如下所示:

    resource "aws_vpc_endpoint" "vpc-s3-endpoint-dev" {
      vpc_id          = "${aws_vpc.dev.id}"
      service_name    = "com.amazonaws.us-east-1.s3"
      route_table_ids = ["${aws_route_table.dev-us-east-1-private.id}"]
    }

该计划很好,当我尝试申请时,我得到了这个:

Error: Error applying plan:

1 error(s) occurred:

* aws_vpc_endpoint.vpc-s3-endpoint-dev: 1 error(s) occurred:

* aws_vpc_endpoint.vpc-s3-endpoint-dev: Error creating VPC Endpoint: InvalidServiceName: The Vpc Endpoint Service 'com.amazonaws.us-east-1.s3' does not exist
    status code: 400, request id: b062c637-ec55-4da4-8527-73b24c10fa3d

据我所知,我所做的一切正确。该路由表与我关联的手动创建的测试VPC端点相同。我尝试通过将关联的路由表分解为单独的aws_vpc_endpoint_route_table_association,甚至根本没有,来做到这一点。我还尝试了us-east-1 S3服务端点的其他别名(com.amazonaws.s3等)。我只是不断收到同样令人沮丧的错误,而且我也没主意。

编辑:更多上下文

   provider "aws" { 
     alias = "dev" 
     version = "= 2.12.0" 
     profile = "development" 
     region = "us-east-1" 
   } 
     resource "aws_vpc" "dev" { 
       provider = "aws.dev" 
       cidr_block = "10.201.0.0/16" 
       enable_dns_support = "true" 
       enable_dns_hostnames = "true" 
     } 

将特定的提供程序添加到aws_vpc_endpoint资源似乎有效。

aws_vpc_endpoint.vpc-s3-endpoint-dev-xxx-xxxxx: Creation complete after 6s (ID: vpce-xxxxxxxxxxxxx)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
amazon-web-services amazon-s3 terraform amazon-vpc
2个回答
0
投票

问题已在注释中解决,但我将其留在此处以备将来参考,因为这是问题的症结所在。

如果在alias块中使用provider,则除非您明确地在资源级别上指定该提供者,否则将不使用该提供者(如上文provider = "aws.dev"中所述)。在您未明确指定的情况下,默认提供程序将是provider "aws",它没有与之关联的别名,如果该别名不存在,则将仅假定隐含的aws提供程序。

故事的寓意,除非您有充分的理由,否则不要在提供者上使用别名;具有一个发布到多个单独的AWS账户的单一代码库是一个很好的理由。


0
投票

所以,今天我们在us-east-1中看到了类似的错误:

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

我们能够使用CLI复制问题:

aws ec2 describe-vpc-endpoint-services | jq '.ServiceDetails[] | select(.ServiceName=="com.amazonaws.us-east-1.s3")'

显示有一个具有该名称的服务,但是此调用出错:

$ aws ec2 describe-vpc-endpoint-services --service-names com.amazonaws.us-east-1.s3
An error occurred (InvalidServiceName) when calling the DescribeVpcEndpointServices operation: The Vpc Endpoint Service 'com.amazonaws.us-east-1.s3' does not exist

AWS支持人员说,此API在us-east-1中出现了一些问题,但在us-west-1或us-west-2中没有发生。因此您的Terraform代码实际上可能是正确的,但是还有其他一些AWS API后端问题?

© www.soinside.com 2019 - 2024. All rights reserved.