我试图为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.
答案 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后端问题吗?