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

问题描述 投票:0回答:1

我正在使用 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 门户上的

service_url,然后运行 terraform plan,它会检测到对状态文件的手动更改,并建议进行相同的更新。

那么为什么它没有检测到 API 操作和/或 API 定义的更改/删除?

azure terraform azure-web-app-service azure-api-management terraform-provider-azure
1个回答
0
投票
这种行为是正常的,这就是 terraform 的工作原理。

Terraform 使用了 2 个文件: 1- TF 配置文件(包含资源的所需状态) 2- TF 状态文件(存储资源的实际状态,如 TF 配置文件中所述)

当您使用 Terraform 创建或更新资源时,当前的资源配置将保存在状态文件中。

Terraform 假设状态文件始终与实际资源配置匹配。并将任何可能的更改与状态文件进行比较。

因此,如果您手动进行任何更改(在 terraform 之外),它不会更改状态文件。所以对于 terraform,他永远不会知道资源发生了变化。

希望能澄清您的问题!

© www.soinside.com 2019 - 2024. All rights reserved.