Можно ли получить URL-адрес триггера сетки событий при выходном значении из развертывания функции Azure? - PullRequest
0 голосов
/ 16 мая 2018

Есть ли возможность получить URL-адрес триггера сетки событий при выходном значении из развертывания функции Azure?

Сценарий, который мы хотели бы сделать, выглядит следующим образом: - Мы внедряем функциональную службу в версии VSTS через ARM. - С развернутым сервисом Function мы развертываем подписку на сетку событий.

Спасибо, Шраддха Агравал

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Я думаю, что вы спрашиваете: «Как я могу развернуть функцию Azure с шагом в выпуске VSTS с использованием ARM и получить его URL-адрес триггера, чтобы я мог использовать URL-адрес триггера на следующем шаге выпуска VSTS?»

Это не очень хорошо задокументировано, но с использованием официальных документов , этого сообщения в блоге и некоторых проб и ошибок, мы выяснили, как.

ЭтоВот как должен выглядеть ARM:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {}
  "variables": {},
  "resources": [],
  "outputs": {
    "triggerUrl": {
      "type": "string",
      "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions', 'functionAppName', 'functionName'),'2015-08-01').trigger_url]"
    }
  }
}

Разверните его с помощью шага «Развертывание группы ресурсов Azure», убедитесь, что вы вводите имя переменной в текстовое поле «Выводы развертывания», скажем, triggerUrl.

Пример вывода:

{"triggerUrl":{"type":"String","value":"https://functionAppName.azurewebsites.net/api/functionName?code=1234"}}

Затем вы добавляете шаг PowerShell (или шаг Azure PowerShell), который выбирает значение из переменной.

$environmentVariableName = "triggerUrl"
$outputVariables = (Get-Item env:$environmentVariableName).Value

Тогда сделайте что-нибудь с этим.

0 голосов
/ 01 октября 2018

С обновлением приложения функций V2.0.12050 URI триггера Event-Grid немного отличается.Смотри также здесь

0 голосов
/ 16 мая 2018

Да, есть способ использовать API REST для получения кода доступа к функции.Ниже приведены шаги:

  1. Предположим, что имя функции EventGridTrigger2 и run.csx:

    #r "Newtonsoft.Json"
    
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    
    public static void Run(JObject eventGridEvent, TraceWriter log)
    {
        log.Info(eventGridEvent.ToString(Formatting.Indented));
    
    }
    

и файл function.json:

    {
        "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "eventGridEvent",
          "direction": "in"
        }
       ],
       "disabled": false
    }

Как видно, приведенные выше привязки не типизированы, что будет работать для любой выходной схемы, такой как InputEventSchema , EventGridSchema (схема по умолчанию) и CloudEventV01Schema (после исправления некоторой ошибки).

Свойство destination созданной подписки выглядит следующим образом:

"destination": {
    "properties": {
      "endpointUrl": null,
      "endpointBaseUrl": "https://myFunctionApp.azurewebsites.net/admin/extensions/EventGridExtensionConfig"
    },
    "endpointType": "WebHook"
  },

Обратите внимание, что полный триггер subscriberUrl для Azure EventGrid имеетследующий формат, где строка запроса содержит параметры для маршрутизации запроса к надлежащим функциям:

https://{FunctionApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={FunctionName}&code={masterKey}

Для создания подписчика мы должны использовать его полный subscriberUrl, включающий строку запроса.В данный момент единственным неизвестным значением является masterKey.

Чтобы получить мастер-ключ приложения функции (хоста), мы должны использовать управляющий вызов REST API:

https://management.azure.com/subscriptions/{mySubscriptionId}/resourceGroups/{myResGroup}/providers/Microsoft.Web/sites/{myFunctionApp}/functions/admin/masterkey?api-version=2016-08-01

ответ имеет следующий формат:

    {
       "masterKey": "*************************************************"
    }

Обратите внимание, что для этого вызова требуется аутентификация Маркер переноса .

Как только у нас есть masterKey для FunctionApp (host), мы можем использовать его для любой функции.внутри этого хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...