我有一个 Python Azure Functions 计时器触发器,每天运行一次,并将文件从通用 v2 热存储容器存档到通用 v2 冷存储容器。我正在使用Linux消费计划。代码如下所示:
container = ContainerClient.from_connection_string(conn_str=hot_conn_str,
container_name=hot_container_name)
blob_list = container.list_blobs(name_starts_with = hot_data_dir)
files = []
for blob in blob_list:
files.append(blob.name)
for file in files:
blob_from = BlobClient.from_connection_string(conn_str=hot_conn_str,
container_name=hot_container_name,
blob_name=file)
data = blob_from.download_blob()
blob_to = BlobClient.from_connection_string(conn_str=cold_conn_str,
container_name=cold_container_name,
blob_name=f'archive/{file}')
try:
blob_to.upload_blob(data.readall())
except ResourceExistsError:
logging.debug(f'file already exists: {file}')
except ResourceNotFoundError:
logging.debug(f'file does not exist: {file}')
container.delete_blob(blob=file)
在过去的几个月里,这种方法一直正常工作,没有出现任何问题,但是在过去的两天里,我在存档过程的中途看到了这个错误:< br> 操作超时。
除此之外,没有其他有意义的错误消息。如果我通过UI手动调用该函数,它将成功地归档其余的文件。blobs的大小从几KB到5 MB不等,超时错误似乎发生在2-3MB的文件上。一次只有一个调用在运行,所以我不认为我超出了消费计划的1.5GB内存限制(过去我曾看到< code>python以代码137退出内存问题)。为什么几个月来它一直完美地工作着,而我却突然得到了这个错误?< br >更新< br >我想我会尝试使用这里找到的方法进行归档,这样我就不必将blob内容存储在Python的内存中:https://www . Europe clouds . com/blog/moving-files-between-storage-accounts-with-azure-functions-and-event-grid
从评论中总结解决方案,供其他社区参考:
如注释中所述,OP使用start_copy_from_url()方法实现与解决方案相同的需求。
start_copy_from_url()
可以直接将文件从原始blob处理到目标blob,它的工作速度比使用data=blob_from.download_blob()
临时存储文件然后上传data
到目标blob。
Azure函数存储帐户Blob容器触发器 在我们的一个用例中,我正在为具有以下条件的存储帐户容器中的任何活动寻找Azure函数触发器 < li >具有特定命名约定的容器(名称如xxxx-input) < li >它应该自动检测是否创建了新的容器(具有特定的命名约定) < li>
我已经审阅了Microsoft提供的关于触发器的文档。[https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python][1] 事实上,在Azure函数中使用参数允许我们检索blob和一些属性(),我们还可以使用函数读取字节,但是我们如何将字节转换为
如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议
我使用blob触发器读取blob内容,作为pandas DF进行处理,并将blob附加到我使用的Azure SQL server。 blob触发器没有按预期工作,因此我将main函数中的所有代码都定义为: 但是,我得到了以下错误: 有人可以帮助我找到此问题的原因吗? function.json的配置如下:
有没有人知道某种方法可以触发具有 Blob 触发器的 Azure 函数?无论是通过API还是使用“测试/运行”功能。 情况是,我需要在测试目的中这样做。目前我看到的是,可以在blob存储中提供要触发的文件的名称。但这是无用的,因为无论如何,将文件放在那里都会触发功能。我想做的是为文件的内容而不是名称提供功能,以避免不必要的操作。 不幸的是,微软在所有相关主题上的留档很差,但这个没有。在这个gith
我正在使用Python 3.x编写一个Azure timer触发器。我已经运行了一个这样的函数。我想我知道怎么做,从JS创建一个然后删除' index.js '并创建一个run.py,但这次,当我运行我的python函数时,我总是得到一个错误,说“没有这样的文件:index.js”。我没有看到函数和“index.js”文件之间有任何联系。 有什么想法吗?