Невозможно записать в CosmosDB из Azure Event Hub - PullRequest
1 голос
/ 19 февраля 2020

Я работаю над Azure функцией (2.x), которая запускается событиями, поступающими из концентратора событий, и записывает полученные данные в экземпляр CosmosDB. Прежде чем развернуть его, я хотел бы проверить его локально, и чтение события работает безупречно. Однако при попытке записи в CosmosDB появляется эта ошибка:

"System.Private.CoreLib: исключение при выполнении функции: Functions.EventHubTrigger. Microsoft. Azure .DocumentDB.Core: Message : {"Ошибки": ["Один из указанных входных данных недействителен"]} "

Экземпляр базы данных был создан с использованием портала Azure, и я добавил несколько фиктивных записей, все который работает отлично. Что я делаю не так?

function.json:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "type": "eventHubTrigger",
      "name": "event",
      "direction": "in",
      "eventHubName": "event-hub-name",
      "connection": "event-hub-connection",
      "cardinality": "many",
      "consumerGroup": "$Default"
    },
    {
      "type": "cosmosDB",
      "direction": "out",
      "name": "doc",
      "databaseName": "database-name",
      "collectionName": "test",
      "createIfNotExists": "true",
      "connectionStringSetting": "CosmosDBConnectionString"
    }
  ]
}

local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "storage-key",
    "CosmosDBConnectionString": "AccountEndpoint=document-db-endpoint;AccountKey=account-key;",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "event-hub-connection": "Endpoint=sb://endpoint-name;SharedAccessKeyName=shared-access-key-name;SharedAccessKey=shared-access-key" 
  }
}

host.json:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}

__init__.py:

import logging, json

import azure.functions as func


def main(event: func.EventHubEvent, doc: func.Out[func.Document]):

    event_data = event.get_body().decode("utf-8")
    logging.info('Python EventHub trigger processed an event: %s', event_data)

    # json object for testing the DB write operation
    temp = {}
    temp["id"] = 1
    temp["category"] = "feedback"
    temp = json.dumps(temp)

    doc.set(func.Document.from_json(temp))
    logging.info("CosmosDB updated!; Value: ", temp)

1 Ответ

1 голос
/ 19 февраля 2020

Эта ошибка HTTP 400, BadRequest. Это означает, что что-то в полезной нагрузке неправильно сформировано JSON или некоторые из ваших атрибутов недействительны.

Я вижу, что ваш идентификатор это число, но в контракте REST это строка. Справка: https://docs.microsoft.com/rest/api/cosmos-db/create-a-document#body

Можете ли вы изменить идентификатор на строку?

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