Ошибка изменения функции запуска Azure в COSMOS DB - PullRequest
0 голосов
/ 26 июня 2018

Я использую функцию Azure 1.0.13 SDK с расширением 1.2.0 DocumentDB. Ниже приведен код, который я пытаюсь запустить:

  [FunctionName("Function1")]
        public static void Run([CosmosDBTrigger(
            databaseName: "database",
            collectionName: "collection",
            ConnectionStringSetting = "DBConn",
            LeaseCollectionName = "leases")]IReadOnlyList<Document> documents, TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Verbose("Documents modified " + documents.Count);
                log.Verbose("First document Id " + documents[0].Id);
            }
        }

Теперь, когда я пытаюсь отладить локально в VS, я получаю следующую ошибку:

Function1: прослушиватель для функции 'Function1' не смог запуститься. Microsoft.Azure.WebJobs.Extensions.DocumentDB: Либо исходная коллекция 'база данных' (в базе данных 'база данных'), либо коллекция аренды 'аренда' (в базе данных 'база данных') не существует. Обе коллекции должны существовать до запуска слушателя. Чтобы автоматически создать коллекцию аренды, установите для «CreateLeaseCollectionIfNotExists» значение «true». Microsoft.Azure.Documents.Client: Сообщение: {"Ошибки": ["Ресурс не найден"]}

[26.06.2008 15:24:49] ActivityId: 7738cc1a-f8f6-45a2-a3c6-73d342a8d4c3, запрос URI: / apps / 4c8d65d7-216b-46b4-abb7-52c1a0c7123f / services / b3d1c8 403e-8d89-9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727365611181690s, RequestStats: [26.06.2008 15:24:49] ResponseTime: 2018-06-26T15: 24: 48.5014600Z, StoreReadResult: StorePhysicalAddress: rntbd: //10.98.106.50: 11000 / apps / 4c8d65d7-216b-46b4-abb7- 52c1a0c7123f / services / b3a1db8d-b82c-403e-8d89-9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727365611181690 с, LSN-код: 125, ISD-код : False, IsNotFound: True, IsInvalidPartition: False, RequestCharge: 1, ItemLSN: -1, ResourceType: Collection, OperationType: Read [26.06.2008 15:24:49] ResponseTime: 2018-06-26T15: 24: 48.5014600Z, StoreReadResult: StorePhysicalAddress: rntbd: //10.98.108.179: 11000 / apps / 4c8d65d7-216b-46b4-abb7- 52c1a0c7123f / services / b3a1db8d-b82c-403e-8d89-9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727455073557671s, ISD-адрес: 125, ISG-код : False, IsNotFound: True, IsInvalidPartition: False, RequestCharge: 1, ItemLSN: -1, ResourceType: Collection, OperationType: Read [26.06.2008 15:24:49], SDK: Microsoft.Azure.Documents.Common / 2.0.0.0.

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

«база данных» и «коллекция» были изменены по соображениям безопасности.

Что я сделал не так?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Причина объясняется в ошибке, которую вы видите:

Function1: прослушиватель для функции 'Function1' не смог запуститься. Microsoft.Azure.WebJobs.Extensions.DocumentDB: либо источник коллекция 'база данных' (в базе данных 'база данных') или коллекция аренды «аренда» (в базе данных «база данных») не существует. Обе коллекции должен существовать до запуска слушателя. Чтобы автоматически создать аренду коллекции, установите «CreateLeaseCollectionIfNotExists» на «истина». Microsoft.Azure.Documents.Client: Сообщение: {"Ошибки": ["Ресурс не Найдено "]}

Обе коллекции должны существовать, коллекция под названием database в вашем случае и коллекция аренды под названием leases. Как говорится в сообщении, вы можете использовать CreateLeaseCollectionIfNotExists для автоматического создания коллекции аренды, но исходная коллекция должна существовать.

Если вы хотите понять причину необходимости сбора лизинга, вы можете прочитать ее здесь . Короче говоря, поскольку функция считывает Change Feed , ей необходимо следить за ходом выполнения, чтобы быть устойчивым к любому перезапуску / остановке в отдельной коллекции. Эта коллекция может находиться в той же учетной записи, либо вы можете настроить ее учетную запись и базу данных.

0 голосов
/ 27 июня 2018

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

[CosmosDBTrigger( databaseName: "database", collectionName: "collection", ConnectionStringSetting = "DBConn", LeaseCollectionName = "leases", CreateLeaseCollectionIfNotExists = true)]

Более подробную информацию можно посмотреть здесь: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#trigger---c-example

...