仅供参考,我来自AWS,所以任何比较都是受欢迎的。
我需要创建一个函数来检测blob何时被放入存储容器,然后下载blob以对其中的数据执行一些操作。
我已经创建了一个存储帐户,其中包含一个容器,和一个函数应用程序,其中包含一个python函数。然后我设置了一个事件网格主题和订阅,以便blob创建事件触发事件。我可以验证这是否正常工作。这将为我提供blob的URL,类似于https://<name>.blob.core.windows.net/<container>/<blob-name>
。然而,当我尝试使用BlobClient下载这个blob时,我得到了各种关于没有正确的身份验证或密钥的错误。有没有一种方法可以允许函数访问容器,就像在AWS中给予lambda一个具有S3权限的执行角色一样,还是需要创建一个密钥来传递
编辑:当blob被放入容器时,我需要尽快运行这个函数,这样我就可以告诉你我需要使用EventGrid触发器,而不是普通的blob触发器
2条答案
按热度按时间cuxqih211#
我需要创建一个函数来检测blob何时被放入存储容器,然后下载blob以对其中的数据执行一些操作。
这可以通过使用Azure Blob storage trigger for Azure Functions来实现。
当检测到新的或更新的blob时,blob存储触发器启动函数。blob内容作为输入提供给函数。
最后一句话,"blob内容作为函数的输入提供",意味着blob可以作为函数的输入参数。这样,就不需要(或更少)手动下载它了。
有没有一种方法可以允许函数访问容器,就像在AWS中给lambda一个具有S3权限的执行角色一样
看看Using Managed Identity between Azure Functions and Azure Storage。
我正确地理解了正常的blob触发可以有长达10分钟的延迟?
这是正确的,Blob触发器在实际触发函数之前可能有长达10分钟的延迟。但答案的第二部分仍然有效。
r3i60tvu2#
答案介于@rickvdbosch的答案和Abdul的评论之间,我首先必须给函数分配一个标识,授予它访问存储帐户的权限,然后我能够使用
azure.identity.DefaultAzureCredential
类自动处理BlobClient
的凭据