APIM 的条件 ARM 模板部署:仅创建,不更新
Conditional ARM template deployment for APIM: only creating, not updating
我对 ARM 模板和 Azure API 管理有特定要求,所以这个问题不同于其他有条件的 ARM 部署问题。
一些背景:
我的 APIM 实例是使用 ARM 模板部署的,但是自定义域需要设置但不能成为其中的一部分。这是因为我的客户将他们的证书存储在不同的系统中。
这意味着自定义域是在 ARM 模板创建实例之后为 APIM 实例单独(手动)设置的。
ARM 模板还应用全局策略并创建产品。我使用链接模板设置。
当我们想要在 APIM 实例上更新某些内容时,就会出现问题,例如扩展全局策略或添加产品。然后 ARM 模板也将更新实例,但应保持自定义域部分不变。根据文档,使用 'incremental' 模式会使不在 ARM 模板中的资源保持不变。所以我想通过省略 ARM 模板中的 'hostnameConfigurations' 部分来解决它。然而,ARM 模板似乎并没有忽略它,而是将其解释为空的,并有效地从 APIM 实例中删除了自定义域!
这看起来不像是正常行为,但我不得不忍受它。为了解决这个问题,我有几个选择。
其中之一是从通用 APIM ARM 模板中提取全局策略和产品,因此我可以在更新时跳过 APIM 实例部分。这意味着我必须 运行 多个单独的 ARM 模板来创建资源。
我想要的解决方案是有条件地将创建 APIM 实例的 ARM 模板部署到仅创建。当资源已经存在时,我想跳过这个链接模板。
我虽然可以通过获取对 APIM 实例的引用来做到这一点,但根据文档 "The reference function derives its value from a runtime state, and therefore can't be used in the variables section.".
问题:是否可以根据资源是否已存在的事实,有条件地部署链接的 ARM 模板?
答案是否定的。你不能真的那样做。除非您正在研究不同的 hacky 方式。您可以调用 Azure 函数来确定资源是否存在。您可以使用部署的输出来确定资源是否存在。但是直接向上没有什么可以帮助你。只有不同的技巧。
我对 ARM 模板和 Azure API 管理有特定要求,所以这个问题不同于其他有条件的 ARM 部署问题。
一些背景: 我的 APIM 实例是使用 ARM 模板部署的,但是自定义域需要设置但不能成为其中的一部分。这是因为我的客户将他们的证书存储在不同的系统中。 这意味着自定义域是在 ARM 模板创建实例之后为 APIM 实例单独(手动)设置的。 ARM 模板还应用全局策略并创建产品。我使用链接模板设置。
当我们想要在 APIM 实例上更新某些内容时,就会出现问题,例如扩展全局策略或添加产品。然后 ARM 模板也将更新实例,但应保持自定义域部分不变。根据文档,使用 'incremental' 模式会使不在 ARM 模板中的资源保持不变。所以我想通过省略 ARM 模板中的 'hostnameConfigurations' 部分来解决它。然而,ARM 模板似乎并没有忽略它,而是将其解释为空的,并有效地从 APIM 实例中删除了自定义域!
这看起来不像是正常行为,但我不得不忍受它。为了解决这个问题,我有几个选择。 其中之一是从通用 APIM ARM 模板中提取全局策略和产品,因此我可以在更新时跳过 APIM 实例部分。这意味着我必须 运行 多个单独的 ARM 模板来创建资源。
我想要的解决方案是有条件地将创建 APIM 实例的 ARM 模板部署到仅创建。当资源已经存在时,我想跳过这个链接模板。 我虽然可以通过获取对 APIM 实例的引用来做到这一点,但根据文档 "The reference function derives its value from a runtime state, and therefore can't be used in the variables section.".
问题:是否可以根据资源是否已存在的事实,有条件地部署链接的 ARM 模板?
答案是否定的。你不能真的那样做。除非您正在研究不同的 hacky 方式。您可以调用 Azure 函数来确定资源是否存在。您可以使用部署的输出来确定资源是否存在。但是直接向上没有什么可以帮助你。只有不同的技巧。