#python #azure #azure-devops #azure-functions #azure-blob-storage
Вопрос:
Я отключаюсь от документации здесь: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-output?tabs=python
Вот код, который у меня сейчас есть:
функция.json
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "nameofstorageaccount_STORAGE",
"name": "queuemsg",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "inputblob",
"type": "blob",
"dataType": "binary",
"path": "samples-workitems/{queueTrigger}",
"connection": "nameofstorageaccount_STORAGE",
"direction": "in"
},
{
"name": "outputblob",
"type": "blob",
"dataType": "binary",
"path": "samples-workitems/{queueTrigger}-Copy",
"connection": "nameofstorageaccount_STORAGE",
"direction": "out"
}
],
"disabled": false,
"scriptFile": "__init__.py"
}
init.py
import logging
import azure.functions as func
def main(queuemsg: func.QueueMessage, inputblob: bytes, outputblob: func.Out[bytes]):
logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
outputblob.set(inputblob)
Если я правильно понимаю, эта функция должна запускаться при добавлении большого двоичного объекта в контейнер и для сохранения копии этого большого двоичного объекта внутри того же контейнера.
Функции выполняются, однако ничего не происходит, когда большой двоичный объект загружается в контейнер? Я хотел бы запустить некоторый код с загружаемым большим двоичным объектом, это единственный полный пример, который я нашел с Python и триггером большого двоичного объекта.
Ценю любую помощь, спасибо! 🙂
Ответ №1:
Нет. Если вы прочитали document
, в нем говорится, что функция запускается при отправке сообщения в очередь:
В следующем примере показаны привязки ввода и вывода больших двоичных объектов в функции.файл json и код Python, который использует привязки. Функция создает копию большого двоичного объекта. Функция запускается сообщением очереди, содержащим имя большого двоичного объекта для копирования. Новый большой двоичный объект называется {originalblobname}-Копия.
Если вы хотите выполнить функцию при создании большого двоичного объекта, пожалуйста, смотрите Blob Trigger
пример здесь: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python.
Комментарии:
1. Спасибо! Я не знаю, как я пропустил это….. Мой последующий вопрос, если вы не возражаете: если это так, нужно ли мне перенастроить мой локальный файл.json так, как указано выше? и включите направление:внутрь и направление:наружу ? для того, чтобы функция запускалась большим двоичным объектом и сохраняла тот же большой двоичный объект обратно в хранилище после того, как какой-то код изменил его? или конфигурации, указанной в ссылке, будет достаточно для этого типа операций.
2. Я не уверен, хотите ли вы сделать это для сохранения копии в том же контейнере. Я верю, что вы будете в бесконечном цикле, потому что в тот момент, когда вы создадите копию большого двоичного объекта в том же контейнере, функция снова запустится, и она создаст копию копии большого двоичного объекта, и процесс продолжится.
3. Это имеет смысл — так что путь вперед будет заключаться в создании второго контейнера и сохранении измененного большого двоичного объекта там. На самом деле я хотел перенаправить выходные большие двоичные объекты либо на SQL, либо на OneDrive, либо на хостинг, который хорошо интегрируется с Tableau. Вы бы рекомендовали использовать триггер большого двоичного объекта и использовать внешний пакет SDK Python для перенаправления измененного большого двоичного объекта в OneDrive?
4. Для OneDrive я бы на самом деле рекомендовал использовать приложения логики вместо функций Azure. Я полагаю, что для OneDrive уже есть разъем, который автоматически загрузит файл туда.
5. Но можно ли было бы запустить мой скрипт python, чтобы заранее изменить файл ? Я получаю файл во вложении по электронной почте, я хочу преобразовать его, а затем только после повторного сохранения в OneDrive