![](/img/trans.png)
[英]Error while creating interface type vpc endpoint in terraform (aws provider)
[英]Error applying terraform plan to create VPC endpoint in AWS
我正在尝试为 EC2 节点创建一个 VPC 端点,以访问 us-east-1 中同一 VPC 内的 S3 存储桶,而无需通过 NAT 网关访问 go。 当我通过浏览器 UI 手动设置时,一切似乎都正常。 然后我将其删除并在我的 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.
因此,我们今天在 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 后端问题?
问题已经在评论中解决了,但我将把它留在这里以供将来参考,因为它是这里问题的症结所在。
如果您在provider
块中使用alias
,则不会使用该提供程序,除非您明确指定它在资源级别(如上面在provider = "aws.dev"
中所做的那样)。 在您没有明确指定的情况下,默认提供者将是provider "aws"
,它没有与之关联的别名,如果不存在,那么它将假定一个隐含的aws
提供者。
故事的道德,除非你有充分的理由,否则不要在你的提供者上使用别名; 拥有一个发布到多个单独 AWS 账户的代码库是一个很好的理由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.