为什么我得到 Resource's path part only allow a-zA-Z0-9._-: 在尝试使用 Terraform 创建 API 网关资源时?

Why do I get Resource's path part only allow a-zA-Z0-9._-: when trying to create an API gateway resource using Terraform?

是否可以使用 Terraform 从根目录创建和 AWS API gateway resources 子目录?

做的时候

resource "aws_api_gateway_resource" "MyDemoResource" {
  rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
  parent_id   = aws_api_gateway_rest_api.MyDemoAPI.root_resource_id
  path_part   = "/will/this/work"
}

我收到错误:

aws_api_gateway_resource.MyDemoResource: 1 error occurred: aws_api_gateway_resource.MyDemoResource: Error creating API Gateway Resource: BadRequestException: Resource's path part only allow a-zA-Z0-9._-: or a valid greedy path variable and curly braces at the beginning and the end."

我找到了这个 GitHub ticket 和其他一些喜欢的人。我不确定这是错误还是有变通办法的设计。

此外,如果我在 AWS 控制台中手动创建并导入它,完整路径会正确显示在属性 path 中,但不会出现在输入 path_part.

"aws_api_gateway_resource.MyDemoResource": {
                    "type": "aws_api_gateway_resource",
                    "depends_on": [],
                    "primary": {
                        "id": "foo",
                        "attributes": {
                            "id": "foo",
                            "parent_id": "foo",
                            **"path": "/will/this/work"**,
                            **"path_part": "work"**,
                            "rest_api_id": "foo"
                        }    

path_partlast path segment of an API Gateway resource,而不是 完整的 路径。这反映了您在 AWS 控制台中看到的树状结构。

导出了完整路径,是的,但没有作为参数。这就是为什么您在导入的 Terraform 状态中拥有完整路径 path 和最后一个路径段 - work - 作为 path_part.

目前,您没有经过最后一个路径段;你传递的是完整路径。

您需要做的是为路径段的不同部分指定 3 个不同的 aws_api_gateway_resource,并正确指定父 ID 以创建您需要的结构:

  1. will 父 ID 为 aws_api_gateway_rest_api.{REST-API-NAME}.root_resource_id
  2. this 父 ID 为 aws_api_gateway_resource.will.id
  3. work 父 ID 为 aws_api_gateway_resource.this.id

视觉表示:

MyAPI
├─ /will
│  ├─ /this
│  │  ├─ /work