创建 API 网关资源的 Terraform 错误抱怨具有相同父级的另一个资源已经具有此名称

Posted

技术标签:

【中文标题】创建 API 网关资源的 Terraform 错误抱怨具有相同父级的另一个资源已经具有此名称【英文标题】:Terraform error creating API Gateway Resource complains another resource with the same parent already has this name 【发布时间】:2021-05-25 04:03:25 【问题描述】:

我正在创建一个名为“lang”的 API 网关资源:

resource "aws_api_gateway_resource" "lang" 
  path_part   = "lang"
  parent_id   = aws_api_gateway_resource.api.id
  rest_api_id = aws_api_gateway_rest_api.root_api.id

成功创建 API 后,在后续运行 terraform apply 时,我收到此错误:

Error: Error creating API Gateway Resource: ConflictException: Another resource with the same parent already has this name: lang

上面的资源块绝对是唯一一个具有该名称的资源块。我已经对此进行了足够的谷歌搜索,以意识到 terraform 抱怨称为“lang”的资源已经存在并且无法重新创建。我不知道如何先将其销毁。

我已尝试将此添加到我的脚本中:

resource "aws_api_gateway_deployment" "deployment" 
  rest_api_id   = aws_api_gateway_rest_api.root_api.id
  stage_name    = var.envName
  
  triggers = 
    redeployment = sha1(jsonencode(aws_api_gateway_rest_api.root_api.body))
  

  lifecycle 
    create_before_destroy = true
  

...无济于事。

create_before_destroy 属性不应该从本质上破坏 API 并导致它被重新创建还是只是舞台?

如果资源块无法更改“lang”资源,我该如何更改?这对我来说似乎是一个基本的循环问题。

【问题讨论】:

为什么lang API 资源(不是 TF 资源)已经存在?您是使用 AWS 控制台/cli/sdk 手动创建的吗? 在顶部附近我说过“在运行 terraform 时应用后续时间”。这意味着它是在我第一次运行应用程序时创建的。似乎无法在以下申请中更改。 【参考方案1】:

令人讨厌的是,这是一个深夜的错字...

我(故意)复制粘贴了 resource "aws_api_gateway_resource" "lang" 块,但在浏览和更新所有副本时忘记重命名副本。

【讨论】:

以上是关于创建 API 网关资源的 Terraform 错误抱怨具有相同父级的另一个资源已经具有此名称的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:如何从对象列表创建 API 网关端点和方法?

Terraform 不会将 step 功能部署到 API 网关

Terraform 无法将创建的集成附加到 API 网关的路由中

Terraform 未部署 api 网关阶段

Terraform 在 AKS 节点资源组中创建入口应用程序网关

terraform api 网关与 openapi 规范的集成