Развертывание PolicyContent управления API шаблонов ARM

Я пытаюсь использовать шаблоны ARM для развертывания моей службы управления API, и все работает, кроме policyContent. По сути, он хочет, чтобы policyContent представлял собой «содержимое политики, закодированное в формате Json, защищенное Xml». Это очень сложно поддерживать, и я пытался найти способ взять файл XML и ввести содержимое в эту строку или каким-то лучшим способом. Я бы не хотел писать программу для обслуживания этих строк, потому что это похоже на то, что не должно быть таким сложным.

Справочник по политике

Пример со строкой

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


person Tim Scriv    schedule 17.02.2018    source источник


Ответы (2)


Вы можете сохранить свои политики в 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>
person Sacha Bruttin    schedule 26.06.2018
comment
Это выглядит идеально. Я нашел документацию для этого здесь: docs. microsoft.com/en-nz/azure/templates/. - person Tim Scriv; 26.06.2018

Ну, единственное, что я могу придумать (потому что ничто из нативных шаблонов для рук вам не поможет), это прочитать входные данные из файла и преобразовать их в JSON:

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

Это может работать без замены этих юникодов обратно на <>, понятия не имею.

person 4c74356b41    schedule 17.02.2018
comment
Да, я написал powershell, чтобы сделать что-то подобное. Просто кажется таким хакерским, что у вас нет хорошего способа правильно загрузить xml. Спасибо хоть. - person Tim Scriv; 18.02.2018
comment
Я бы хотел, чтобы кто-нибудь опроверг меня, но я боюсь, что сейчас это так :( - person 4c74356b41; 18.02.2018
comment
Мы согласны, что это некрасиво и болезненно. Однако нам нужно жить в рамках ограничений шаблонов ARM только в формате JSON. Мы находимся на стадии планирования написания инструментов, которые значительно упростят создание шаблонов развертывания на основе описания OpenAPI и документа политики. Пожалуйста, потерпите нас, мы работаем над тем, чтобы сделать его лучше. - person Darrel Miller; 19.02.2018
comment
Это инструмент для бицепса @DarrelMiller? - person FEST; 09.07.2021
comment
Нет. Насколько я знаю, BICEP тогда не существовало. Я не знаю, что случилось с планами, так как я покинул команду вскоре после этого комментария. - person Darrel Miller; 23.07.2021