#python #azure-functions #azure-blob-storage
#python #azure-функции #azure-blob-хранилище
Вопрос:
Я хочу запускать задание, когда получаю несколько файлов в одном контейнере / каталоге в хранилище Azure. Допустим, я получаю 2 файла: — mycontainer / uploads /files /file.rtf — mycontainer/uploads/files/file.txt
Задание, которое я хочу, должно запускаться при появлении обоих этих файлов. Итак, я начал определять привязки следующим образом:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myitem",
"type": "queueTrigger",
"direction": "in",
"queueName": "myfiles",
"connection": "StorageConnectionString"
},
{
"name": "inputRtf",
"type": "blob",
"direction": "in",
"path": "uploads/files/{blobname}.rtf",
"connection": "StorageConnectionString"
},
{
"name": "inputTxt",
"type": "blob",
"direction": "in",
"path": "uploads/files/{blobname}.txt",
"connection": "StorageConnectionString"
},
{
"name": "outputRtf",
"type": "blob",
"direction": "out",
"path": "output/{blobname}.rtf",
"connection": "StorageConnectionString"
},
{
"name": "outputTxt",
"type": "blob",
"direction": "out",
"path": "output/{blobname}.txt",
"connection": "StorageConnectionString"
}
]
}
Для простоты предположим, что код python просто копирует содержимое .txt
файла в output
контейнер, то же самое для .rtf
файла. Я действительно не понимаю, как queueTrigger
работает, поэтому я почти уверен, что моя конфигурация выглядит неправильно
Ответ №1:
Вам нужно будет подтвердить, что все файлы, необходимые для вашей функции, присутствуют, а затем запустить вашу функцию. Привязка ввода не сможет выполнить это самостоятельно.
Вместо этого вы могли бы использовать функцию, запускаемую сеткой событий, которая запускается для каждого загруженного большого двоичного объекта, и для каждого события вы проверяете, присутствуют ли другие файлы, необходимые для вашей фактической функции.
Если нет, просто верните, но если все файлы действительно присутствуют, запустите вашу реальную функцию.
Вы могли бы запустить свою фактическую функцию с сообщением очереди хранилища (используйте привязку), в котором указаны данные имени файла, необходимые для привязок ввода больших двоичных объектов.
Примеры использования привязки триггера очереди вместе с привязкой ввода больших двоичных объектов см. в документах по привязке ввода больших двоичных объектов.
Комментарии:
1. Как вы можете видеть в моей конфигурации привязок, я пытаюсь использовать
Queue Trigger
привязку вместе сBlob Input
binding, но это не работает. Я просмотрел все документы Microsoft, но в их примерах никогда не упоминается привязка к несколькимBlob
. Не могли бы вы привести пример конфигурации, которая работает?2. Что ж, предполагая, что оба входных файла уже присутствуют в хранилище больших двоичных объектов, вам просто нужно будет отправить сообщение очереди, подобное этому —
{"blobname": "<name-of-the-files>"}
. Обратитесь к этому документу о полезных нагрузках JSON в выражениях привязки.3. о, я понимаю, но, как указано в моем вопросе
The job I want should be triggered when both of those files appear
4. Для этого вам понадобится решение, упомянутое в моем ответе. По сути, вторая функция, которая запускается при каждом новом большом двоичном объекте, проверяет, присутствуют ли большие двоичные объекты с таким же именем в другой папке, и если да, отправляет сообщение очереди, которое запускает функцию, которой вы поделились выше.
5. Когда вы говорите «проверьте, присутствуют ли большие двоичные объекты с таким же именем в другой папке», вы имеете в виду использование
InputBlob
или использование некоторого кода, который извлекает файл из хранилища? в идеале лучше всего использовать только привязки