Как зарегистрировать функцию Azure для менеджера API через шаблон ARM? - PullRequest
1 голос
/ 14 мая 2019

Я внедряю шаблон ARM, который включает в себя менеджер API, для автоматизации процесса сборки.Тем не менее, я не уверен, как зарегистрировать мою функцию Azure (они компилируются через шаг сборки в трубопроводе) в созданном api-менеджере через шаблон arm.

Я начал с простого шаблона armэто включало (среди прочего): Microsoft.Web / serverfarms Microsoft.Web / сайты, которые позже использовались для развертывания предварительно скомпилированных функций Azure (из devop git), через шаг развертывания службы приложений Azure.

Затем япопытался добавить API-менеджер в смесь, добавив: Microsoft.ApiManagement / service Microsoft.ApiManagement / service / apis

Однако сейчас я не могу понять, как подключить диспетчер API для включения моих функций лазури.

Это часть, где я добавляю свой менеджер API:

    {
      "name": "[variables('apiManagementName')]",
      "type": "Microsoft.ApiManagement/service",
      "apiVersion": "2019-01-01",
      "tags": {},
      "properties": {
        "publisherEmail": "xxx",
        "publisherName": "xxx"
      },
      "sku": {
        "name": "Consumption"
      },
      "identity": {
        "type": "SystemAssigned"
      },
      "location": "[resourceGroup().location]"
    },
    {
      "type": "Microsoft.ApiManagement/service/apis",
      "apiVersion": "2018-06-01-preview",
      "name": "[concat(variables('apiManagementName'), '/xxx-endpoint-dev')]",
      "dependsOn": [
        "[resourceId('Microsoft.ApiManagement/service', variables('apiManagementName'))]",
        "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]"
      ],
      "properties": {
        "displayName": "xxx-Endpoint-dev",
        "apiRevision": "1",
        "description": "Import from \"xxx-Endpoint-dev\" Function App",
        "path": "xxx-Endpoint-dev",
        "protocols": [
          "https"
        ]
      }
    }

Я пытался добавить действие «Microsoft.ApiManagement / service / backends», как описано в документации, но не смогне заставит это работать.Я также посмотрел этот шаблон: https://github.com/Azure/azure-quickstart-templates/tree/master/201-api-management-create-all-resources, но не смог найти там и моего ответа (возможно, пропустил его).

Есть ли хороший пример того, как это сделать?это можно сделать даже с помощью шаблона ARM?

Сейчас мой шаблон создает все ресурсы, и я могу добавить желаемый API через портал (добавив API в мой пустой менеджер API), но я бы хотелавтоматизируйте и эту часть.

, чтобы быть более точным, я пытаюсь понять, как это сделать: https://docs.microsoft.com/en-us/azure/api-management/import-function-app-as-api с использованием шаблона ARM.

1 Ответ

0 голосов
/ 26 июля 2019

Это, к счастью, не полностью исправимо с помощью шаблона ARM, поэтому мне пришлось добавить сценарий powershell в мой конвейер. Подробности ответа можно найти здесь и здесь .

Я придумал какой-то промежуточный метод получения имени пользователя и PWD из шаблона ARM. затем запустив этот скрипт:

Param(
[Parameter(Mandatory=$true)][string]$ARMOutput
)

# Convert the string into something a little more structured
$json = $ARMOutput | convertfrom-json

#Extract the values from our object 
$appName = $json.appName.value
$keyName = $json.keyName.value
$keyValue = $json.keyValue.value
$user = $json.userName.value
$pass = $json.userPWD.value

# Get Username and password for Kudu
$pair = "$($user):$($pass)"
$kuduCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))

# Get token from Kudu
$token = Invoke-RestMethod -Uri "https://$appName.scm.azurewebsites.net/api/functions/admin/token" -Headers @{Authorization = ("Basic {0}" -f $kuduCreds)} -Method GET

# Prepare call
$body = @{
  name  = $keyName
  value = $keyValue
} | ConvertTo-Json

$uri = "https://$appName.azurewebsites.net/admin/host/keys/$keyName"

# Call API
Invoke-RestMethod -Method Put -Headers @{Authorization = ("Bearer {0}" -f $token); Accept = "application/json"} -ContentType "application/json" -Uri $uri -Body $body
...