Параметр функции Azure из настроек

#visual-studio #settings #azure-functions #cosmosdbtrigger

#visual-studio #Настройки #azure-функции #cosmosdbtrigger

Вопрос:

Ссылаясь на следующий пример:

 public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents, 
            ILogger log)
  

Я понимаю, connectionStringSetting — это не используемая строка подключения, скорее это название параметра для поиска, содержащего строку подключения.

Будет ли это также работать для collectionName и databasename? Я понимаю, что могу поэкспериментировать и выяснить, но я не понимаю, как это вообще решается во время сборки / развертывания?

Я вижу, что нескольким свойствам присваиваются значения, в то время как другие берут их из конфигурации? Является ли это базовым конструктором для CosmosDBTrigger, который заботится об использовании соответствующего значения?

Ответ №1:

Привязка к функции — это способ декларативного подключения другого ресурса к функции; привязки могут быть подключены как привязки ввода, выходные привязки или и то, и другое. Данные из привязок предоставляются функции в качестве параметров.

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

 using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents, 
            ILogger log)
        {
            if (documents != null amp;amp; documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}  

и вот информация о привязке той же функции Azure, которая используется для передачи значения параметра в function

Cosmos DB запускает привязку в функции.файл json

 {
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}
  

Чтобы ответить на ваш вопрос, как это вообще решается во время сборки / развертывания «: — Чтобы использовать его локально, мы передаем ту же информацию о привязке в файле host.json и файле local.settings.json.

Вот как он связывает информацию внутри, проверяя param name.

Надеюсь, это поможет.