Terraform无法检测Azure APIM中操作和定义的手动删除

t2a7ltrp  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在使用Terraform管理Azure APIM API。当我的底层应用服务更改时,我会使用应用服务的Swagger URL更新相应的APIM API定义。
这是我的TF代码:

resource "azurerm_api_management_api" "apimapi" {
  api_management_name   = var.api_management_name
  api_type              = "http"
  description           = null
  display_name          = var.display_name
  name                  = lower(var.display_name)
  path                  = lower(var.display_name)
  protocols             = ["https"]
  resource_group_name   = var.resource_group_name
  revision              = "1"
  revision_description  = null
  service_url           = var.service_url
  source_api_id         = null
  subscription_required = true
  terms_of_service_url  = null
  version               = null
  version_description   = null
  version_set_id        = null
  subscription_key_parameter_names {
    header = "Ocp-Apim-Subscription-Key"
    query  = "subscription-key"
  }
  import {
    content_format = "openapi+json"
    content_value  = data.http.contracts.response_body
  }
}

data "http" "contracts" {
  url = "${var.service_url}swagger/v1/swagger.json"
  request_headers = {
    Accept = "application/json"
  }
}

字符串
问题是,当/如果我手动删除相同API中的任何操作或定义并再次运行我的Terraform代码时,理想情况下它应该检测到更改并为删除的操作和定义执行更新。然而,我得到没有更改。您的基础设施与配置匹配。运行Terraform计划。
这很奇怪,因为如果我手动更改任何其他属性,比如Azure Portal上的
service_url
,然后运行terraform计划,它会检测到状态文件的手动更改,并建议进行更新。
那么,为什么它没有检测到API操作和/或API定义的更改/删除?

wsxa1bj1

wsxa1bj11#

这种行为是正常的,这就是Terraform的工作方式。
Terraform使用了2个文件:1- TF配置文件(包含所需的资源状态)2- TF状态文件(存储资源的实际状态,如TF配置文件中所述)
当您使用Terraform创建或更新资源时,当前资源配置保存在状态文件中。
Terraform假设状态文件总是与实际的资源配置相匹配,并将任何可能的更改与状态文件进行比较。
所以,如果你手动进行任何更改(在terraform之外),它不会更改状态文件。所以对于terraform,他永远不会知道资源发生了变化。
希望澄清你的问题!

相关问题