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

时间:2019-11-04 19:11:53

标签: amazon-web-services amazon-s3 terraform amazon-vpc

我试图为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.

2 个答案:

答案 0 :(得分:1)

该问题已在评论中得到解决,但是我将其留在此处以供将来参考,因为这是问题的症结所在。

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

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

答案 1 :(得分: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后端问题吗?