Я пытаюсь создать привязки в файле function.json, который разрешит ввод документа Cosmos DB в зависимости от сообщения служебной шины, которое вызывает функцию.
Я хочу использовать значение всловарь UserProperties сообщения служебной шины.Документация говорит мне, что это доступно для использования в привязках: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger---message-metadata
Однако я не могу использовать значение в словаре, так как я получаю следующую ошибку: Microsoft.Azure.WebJobs.Host: Invalid template '{UserProperties['MyId']}'. Invalid template expression 'UserProperties['MyId'].
Содержимое моего function.json:
{
"scriptFile": "__init__.py",
"disabled": false,
"bindings": [
{
"name": "msg",
"type": "serviceBusTrigger",
"direction": "in",
"topicName": "mytopic",
"subscriptionName": "mysubscription",
"connection": "myservicebus_SERVICEBUS"
},
{
"name": "documents",
"type": "cosmosDB",
"databaseName": "Cache",
"collectionName": "ProductVersion",
"id" : "{UserProperties['MyId']}",
"partitionKey": "{UserProperties['MyId']}",
"connectionStringSetting": "mycosmos_COSMOSDB",
"direction": "in"
}
]
}
В документации по https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings#binding-expressions-and-patterns сказано, что я могу использовать точечную нотацию для доступа к свойствам объектов, но нетупоминание о доступе к значениям словаря.
Я также пробовал двойные кавычки "partitionKey": "{UserProperties[\"MyId\"]}"
и точечную нотацию "partitionKey": "{UserProperties.MyId}"
, но они также не работают.
Функция написана на Python,но, надеюсь, это не актуально.
Я что-то не так делаю, или это просто не поддерживается?
Обновление 1 Ошибка, полученная при использовании {UserProperties.MyId}
is:
Exception: TypeError: unable to decode incoming TypedData: unsupported combination of TypedData field None and expected binding type serviceBusTrigger
Stack: File "d:\Workspace\MyFunction\.env\lib\site-packages\azure\functions_worker\dispatcher.py", line 250, in _handle__invocation_request
pytype=pb_type_info.pytype)
File "d:\Workspace\MyFunction\.env\lib\site-packages\azure\functions_worker\bindings\meta.py", line 291, in from_incoming_proto
f'unable to decode incoming TypedData: '
Так, возможно, это проблема, специфичная для Python?
Update2 Эта ошибка возникает независимо от того, является ли свойство словарем или нет.Определение main
выглядит следующим образом:
def main(msg: func.ServiceBusMessage, documents: func.DocumentList):
Обновление 3 Ошибка возникает, когда полезная нагрузка сообщения служебной шины пуста.О проблеме сообщалось: https://github.com/Azure/azure-functions-python-worker/issues/330