Невозможно запустить триггер cosmosDB локально с помощью инструментов ядра функций Azure - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь запустить функцию azure локально на моем ноутбуке с помощью основных инструментов Azure Functions. Обратите внимание, что эта функция настроена как триггер cosmosDB

Я был частично вдохновлен инструкциями в этом уроке

Я начал с создания функции MyFirstFunction со следующими командами (и вставкой необходимых входных данных при появлении запроса):

func init
func start

Моя сгенерированная javascript функция (та же, что портал Azure создает для того же самого вида шаблонной функции):

module.exports = function (context, documents) {
    if (!!documents && documents.length > 0) {
        context.log('Document Id: ', documents[0].id);
    }
    context.done();
}

Мой сгенерированный function.json :

{
    "bindings":
    [
        {
          "type": "cosmosDBTrigger",
          "name": "documents",
          "direction": "in",
          "leaseCollectionName": "leases"
        }
    ]
}

Мой сгенерированный local.settings.json is

{
    "IsEncrypted": false,
    "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
    }
}

При такой настройке я пытаюсь запустить функцию, выполнив:

func host start

Все нормально работает в выводе консоли, пока не появится сообщение об ошибке: Невозможно настроить привязку «документов» типа «cosmosDBTrigger». Это может указывать на недопустимые свойства function.json. Не могу понять, какой ctor позвонить.

Что мне не хватает? Я должен был вызвать функцию через HTTP POST для:

http://localhost:{port}/admin/functions/{function_name}

, как объяснено в учебнике, связанном выше (эта функция является триггером cosmosDB), но функция даже не может быть загружена после этой ошибки.

Чего мне не хватает для локального запуска триггера cosmosDB?

Большое спасибо.

1 Ответ

0 голосов
/ 06 июля 2018

Проблема в том, что вашим local.settings.json и function.json не хватает необходимой конфигурации строки подключения cosmosdb.

См. документ запуска cosmosdb .

function.json

{
    "bindings":
    [
        {
          "type": "cosmosDBTrigger",
          "name": "documents",
          "direction": "in",
          "leaseCollectionName": "leases",

          // Missed in your code
          "connectionStringSetting": "CosmosDBConnectionString",
          "databaseName": "<Get db name>",
          "collectionName": "<Get coll name>",
          "createLeaseCollectionIfNotExists": true
        }
    ]
}

local.settings.json

 {
    "IsEncrypted": false,
        "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "node",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",

         //Missed in your code
        "CosmosDBConnectionString":"<Get connection string from Azure portal>"
    }
 }

Обратите внимание, что в последней версии инструментов функционального ядра (2.0.1-beta.31) нет необходимости регистрировать расширение CosmosDB, если вы используете func new для создания триггера CosmosDB, инструменты установят его автоматически.

После того, как эта проблема решена, если вы встретили другую ошибку о Microsoft.Azure.Documents.ServiceInterop.dll

The listener for function 'Functions.CosmosDb' was unable to start.
The listener for function 'Functions.CosmosDb' was unable to start. System.Private.CoreLib: One or more errors occurred. (Unable to load DLL 'Microsoft.Azure.Documents.ServiceInterop.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)). 
Microsoft.Azure.DocumentDB.Core: Unable to load DLL 'Microsoft.Azure.Documents.ServiceInterop.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E).

Просто установите один пакет для исправления (см. Эту проблему )

func extensions install -p Microsoft.Azure.DocumentDB.Core -v 2.0.0-preview

Тогда все должно работать.

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