【问题标题】: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 函数需要存储帐户,因为它使用存储表来保存数据。这是使用AzureWebJobsStorageAzureWebJobsDashboard 配置的,但您可以配置blobtrigger 函数以使用不同的连接字符串。这对你有意义吗?你想要一些代码示例吗?
  • 是的,它是一个 blob 触发器。我将如何使函数使用不同的连接字符串?根据 Microsoft 文档,存储帐户必须是通用的才能连接到函数触发器。在 UI 中,我的存储容器永远不是一个选项。

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


【解决方案1】:

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

需要通用存储帐户来配置 AzureWebJobsStorageAzureWebJobsDashboard 设置(Azure 门户中的local.settings.jsonAppsettings 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、队列和表的通用帐户。

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

【讨论】:

  • 这并不完全正确,Azure 函数需要通用存储帐户,但您可以为任何类型的存储帐户配置 Blob 触发器,您需要指定不同的连接字符串。
  • @Thomas 我使用了blob-only存储的连接字符串,但是和截图一样失败了。
  • 是的,您需要一个通用存储帐户来配置 AzureWebJobsStorageAzureWebJobsDashboard 设置,但您可以将仅 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
相关资源
最近更新 更多