[英]Terraform AzureRM Continually Modifying API Management with Proxy Configuration for Default Endpoint
我们正在改造我们的 Azure API 管理实例。
...
resource "azurerm_api_management" "apim" {
name = "the-apim"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
...
hostname_configuration {
proxy {
host_name = "the-apim.azure-api.net"
negotiate_client_certificate = true
}
}
}
...
我们需要包含hostname_configuration
块,以便我们可以将默认端点的negotiate_client_certificate
切换为 true。
这完成了工作,但是每次 Terraform 运行时,它都计划通过再次添加hostname_configuration
块来修改 APIM 实例:
+ hostname_configuration {
+ proxy {
+ host_name = "the-apim.azure-api.net"
+ negotiate_client_certificate = true
}
}
有没有办法防止这种情况发生? 在门户中,我可以看到此值设置为 true。
我建议您尝试搭配lifecycle > ignore_changes
。
ignore_changes 功能旨在在创建资源时使用对未来可能更改的数据的引用,但不应在创建后影响所述资源。 在极少数情况下,远程 object 的设置会被 Terraform 之外的进程修改,然后 Terraform 将尝试在下一次运行时“修复”。 为了使 Terraform 与单独的进程共享单个 object 的管理职责,ignore_changes 元参数指定资源属性,Terraform 在计划更新关联的远程 object 时应忽略这些资源属性。
在您的情况下, hostname_configuration
在 Terraform 中被视为“嵌套块”或“属性作为块”。因此ignore_changes
的使用不是那么简单(您不能只添加属性名称,如果您想这样做的话例如,忽略resource_group_name
中的更改,它直接是一个属性)。 从2018 年 GitHub 中的一个问题来看,您似乎可以使用嵌套块的 TypeSet hash 添加到忽略部分。
尽管我无法对此进行测试,但我对您的建议是:
hostname_configuration
块正常部署azurerm_api_management
资源hostname_configuration
部分的排版 hash; 应该类似于hostname_configuration.XXXXXX
ignore_changes
部分resource "azurerm_api_management" "apim" {
# ...
lifecycle {
ignore_changes = [
"hostname_configuration.XXXXXX",
]
}
}
有时此类问题是由于提供程序中的问题而发生的。 可能它没有将配置存储在 state 文件中,或者没有为该块检索存储的 state。 尝试将提供程序升级到最新的可用提供程序,看看它是否能解决问题。
如果这不能解决问题,您可以尝试将此配置定义为单独的资源。 根据 terraform 文档: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management
可以通过 hostname_configurations 块和使用 azurerm_api_management_custom_domain 资源在 azurerm_api_management 资源中定义自定义域。 但是,不可能在 API 管理服务中使用这两种方法来管理自定义域,因为会发生冲突。
因此,请尝试删除该 hostname_configuration 块,并根据此文档将其添加为单独的资源: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_custom_domain
这很可能会解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.