ARM 模板 API 管理部署策略内容

ARM Template API Management Deploy PolicyContent

我正在尝试使用 ARM 模板来部署我的 API 管理服务并使除 policyContent 之外的所有内容都正常工作。基本上它想要 policyContent 作为 "Json escaped Xml Encoded contents of the Policy." 这很难维护,并且试图找到一种方法来获取 XML 文件并将内容注入到这个字符串中,或​​者更好的方法。我希望不必编写程序来维护这些字符串,因为感觉不应该那么复杂。

Policy Reference

Example with string

{ "name": "policy", "type": "Microsoft.ApiManagement/service/apis/policies", "apiVersion": "2017-03-01", "properties": { "policyContent": "string" } }

好吧,我唯一能想到的(因为 arm 模板中的原生内容无法帮助您)是从文件中读取输入并将其转换为 JSON:

$xml = (Get-Content file -Raw).ToString()
($xml | ConvertTo-Json -Compress) -replace '\u003c','<' ) -replace '\u003e','>'

如果不将这些 un​​icode 替换回 <>,它可能会起作用,不知道。

您可以将您的策略​​维护到一个 XML 文件中并像这样引用它:

{
    "apiVersion": "2018-01-01",
    "name": "policy",
    "type": "Microsoft.ApiManagement/service/policies",
    "properties": {
        "policyContent": "[concat(parameters('repoBaseUrl'), '/policy.xml')]",
        "contentFormat": "rawxml-link"
    },
    "dependsOn": [
        "[resourceId('Microsoft.ApiManagement/service/', parameters('ApimServiceName'))]"
    ]
}

您的 policy.xml 文件必须可以在线获取并且如下所示:

<policies>
    <inbound>
        <rate-limit calls="3" renewal-period="10" />
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
    <backend>
        <base />
    </backend>
    <on-error>
        <base />
    </on-error>
</policies>