【问题标题】:How to use an Azure blob-only storage account with Azure Functions - Trying to create blob snapshot如何在 Azure Functions 中使用仅限 Azure Blob 的存储帐户 - 尝试创建 Blob 快照
【发布时间】:2018-05-07 20:42:14
【问题描述】:

我正在尝试设置一个函数,以便在每次将更改推送到 blob 容器时对其进行快照。 Azure Functions 中有一些非常简单的功能可以执行此操作,但它仅适用于通用存储帐户。我正在尝试使用仅限 blob 的存储帐户来执行此操作。我对 Azure 很陌生,所以我可能在处理这一切时都错了,但我找不到太多有用的信息。有没有办法做到这一点?

【问题讨论】:

  • 请编辑您的问题并提供更多详细信息。例如,包含拍摄快照的代码。当您尝试为 blob 存储帐户中的 blob 拍摄快照时会发生什么?你有什么错误吗?在目前的状态下,问题中没有太多信息可以提供有意义的解决方案。
  • 你的意思是你有一个blobtrigger 函数?如果是这样,您需要了解 Azure 函数需要存储帐户,因为它使用存储表来保存数据。这是使用AzureWebJobsStorage 和AzureWebJobsDashboard 配置的,但您可以配置blobtrigger 函数以使用不同的连接字符串。这对你有意义吗?你想要一些代码示例吗?
  • 是的,它是一个 blob 触发器。我将如何使函数使用不同的连接字符串?根据 Microsoft 文档,存储帐户必须是通用的才能连接到函数触发器。在 UI 中,我的存储容器永远不是一个选项。

标签: azure azure-functions snapshot azure-blob-storage azure-storage-account


【解决方案1】:

正如@joy-wang 提到的,Azure Functions Runtime 需要general purpose storage account。

需要通用存储帐户来配置 AzureWebJobsStorage 和 AzureWebJobsDashboard 设置(Azure 门户中的local.settings.json 或 Appsettings Blade):

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "my general purpose storage account connection string",
    "AzureWebJobsDashboard": "my general purpose storage account connection string",
    "MyOtherStorageAccountConnectionstring": "my blob only storage connection string"
  }
}

如果要创建BlobTrigger Function,可以指定另一个连接字符串并在每次创建/更新 blob 时创建快照:

[FunctionName("Function1")]
public static async Task Run([BlobTrigger("test-container/{name}",
        Connection = "MyOtherStorageAccountConnectionstring")]CloudBlockBlob myBlob,
        string name, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name}");
    await myBlob.CreateSnapshotAsync();
}

【讨论】:

  • 谢谢,@Thomas,我已经测试了你的代码,它工作正常。实际上,我以前尝试过这种方法,但是我在代码的其他地方犯了一个愚蠢的错误,所以它给了我一个错误。感谢您的分享,希望可以帮助更多的社区成员。
【解决方案2】:

在 Visual Studio 中:

我已尝试为 blob-only 存储创建 快照 命名为 joyblobstorage ,但失败了。我想你应该在屏幕截图中得到同样的错误。

正如错误信息所说Microsoft.Azure.WebJobs.Host: Storage account 'joyblobstorage' is of unsupported type 'Blob-Only/ZRS'. Supported types are 'General Purpose'.

在门户中:

我尝试创建一个功能应用并使用现有存储,但它找不到我的仅限 blob 的存储帐户。门户中的 Azure 函数设置不应允许我们选择仅 blob 的存储帐户。请参考截图。

结论:

不可能为仅限 blob 的存储创建快照。在官方文档中可以看到Storage account requirements。

在应用服务中创建函数应用时,您必须创建或链接到支持 Blob、队列和表存储的通用 Azure 存储帐户。

另外,在App settings reference,你可以看到

AzureWebJobsStorage

Azure Functions 运行时将此存储帐户连接字符串用于除 HTTP 触发函数之外的所有函数。存储帐户必须是支持 Blob、队列和表的通用帐户。

AzureWebJobsDashboard

可选的存储帐户连接字符串,用于存储日志并将其显示在门户的“监视器”选项卡中。存储帐户必须是支持 Blob、队列和表的通用帐户。

这里是Feedback,Azure应用服务团队已经解释了对存储账户的要求,你可以参考一下。

【讨论】:

  • 这并不完全正确,Azure 函数需要通用存储帐户,但您可以为任何类型的存储帐户配置 Blob 触发器,您需要指定不同的连接字符串。
  • @Thomas 我使用了blob-only存储的连接字符串,但是和截图一样失败了。
  • 是的,您需要一个通用存储帐户来配置 AzureWebJobsStorage 和 AzureWebJobsDashboard 设置,但您可以将仅 blob 存储帐户用于其他事情,例如 blob 触发器
  • 当然我明天会发布一些东西,差不多该在这里睡觉了。
  • 我已经添加了答案
猜你喜欢
  • 2019-10-19
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 2022-11-11
  • 2018-01-19
  • 2019-05-17
  • 2016-02-13
  • 1970-01-01
相关资源
最近更新 更多