【问题标题】:access blob in storage container from function triggered by event grid从事件网格触发的函数访问存储容器中的 blob
【发布时间】:2023-01-25 17:41:04
【问题描述】:

仅供参考,我来自 AWS,因此欢迎进行任何比较。

我需要创建一个函数来检测何时将 blob 放入存储容器,然后下载 blob 以对其中的数据执行一些操作。

我已经创建了一个带有容器的存储帐户,以及一个带有 python 函数的函数应用程序。然后我设置了一个事件网格主题和订阅,以便 blob 创建事件触发该事件。我可以验证这是否有效。这给了我看起来像 https://<name>.blob.core.windows.net/<container>/<blob-name> 的 blob 的 URL。但是,当我尝试使用 BlobClient 下载此 blob 时,我收到各种关于没有正确的身份验证或密钥的错误。有没有一种方法可以让函数以与在 AWS 中相同的方式访问容器,我会给 lambda 一个具有 S3 权限的执行角色,或者我是否需要创建一些密钥以某种方式通过?

编辑:当 blob 放入容器时,我需要它尽快运行,据我所知,我需要使用 EventGrid 触发器而不是普通的 blob 触发器

【问题讨论】:

  • 有两种选择:1) 你的函数应用程序可以有一个你为其分配 RBAC 角色的身份。 2) 您提供一个密钥,以访问您的函数应用程序的存储帐户。
  • 你在使用 Azure Python SDK 吗?您是否使用正确的连接字符串配置了 BlobClient?
  • @Oxymoron 是的,使用 azure python SDK,我尝试使用存储帐户中的密钥,但是这给出了关于不正确的 hmac 的错误,我相信所以要么我遗漏了其他东西,要么我使用了错误的密钥?

标签: python amazon-web-services azure azure-functions azure-blob-storage


【解决方案1】:

我需要创建一个函数来检测何时将 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 触发器在实际触发 Function 之前最多可能有 10 分钟的延迟。不过,答案的第二部分仍然有效。

【讨论】:

  • 抱歉,由于时间限制,我应该指定我必须使用事件网格,如果我理解正确的话,正常的 blob 触发器最多可以有 10 分钟的延迟?
  • 请查看更新的答案:)
  • 谢谢你,我会看一下,然后回复你
【解决方案2】:

答案介于@rickvdbosch 的回答和 Abdul 的评论之间。我首先必须为函数分配一个身份,以授予它访问存储帐户的权限。然后我就可以使用 azure.identity.DefaultAzureCredential 类来自动处理 BlobClient 的凭证

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2018-06-08
    • 2021-10-08
    • 2019-02-09
    相关资源
    最近更新 更多