Azure Blob Storage

Azure Blob Store 状态存储组件的详细信息

组件格式

要设置 Azure Blob Storage 状态存储,需创建类型为 state.azure.blobstorage 的组件。请参阅本指南了解如何创建并应用状态存储配置。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <NAME>
spec:
  type: state.azure.blobstorage
  # 支持 v1 和 v2。用户应始终默认使用 v2。没有从 v1 到 v2 的迁移路径,参见下面的 `versioning`。
  version: v2
  metadata:
  - name: accountName
    value: "[your_account_name]"
  - name: accountKey
    value: "[your_account_key]"
  - name: containerName
    value: "[your_container_name]"

版本

Dapr 有 2 个版本的 Azure Blob Storage 状态存储组件:v1v2。建议所有新应用程序使用 v2v1 被视为旧版本,仅为了与现有应用程序兼容而保留。

v1 中,发现了一个长期存在的实现问题,其中组件错误地剥离了键前缀,其行为本质上就像 keyPrefix 总是被设置为 none
组件的更新版本 v2 修复了此错误行为,并使状态存储正确遵守 keyPrefix 属性。

虽然 v1v2 具有相同的元数据字段,但它们在其他方面不兼容,并且没有从 v1v2 的自动数据迁移路径。

如果您正在使用此组件的 v1 版本,则应继续使用 v1,直到创建新的状态存储。

规格元数据字段

字段必填详情示例
accountNameY存储账户名称"mystorageaccount"
accountKeyY(除非使用 Microsoft Entra ID)主存储密钥或辅助存储密钥"key"
containerNameY用于 Dapr 状态的容器的名称。如果容器不存在,将为您创建该容器"container"
azureEnvironmentN如果使用不同的 Azure 云,则为 Azure 环境的可选名称"AZUREPUBLICCLOUD"(默认值)、"AZURECHINACLOUD""AZUREUSGOVERNMENTCLOUD"
endpointN可选的自定义终结点 URL。当使用 Azurite 模拟器或为 Azure Storage 使用自定义域时(尽管这不是官方支持的),这很有用。终结点必须是完整的基本 URL,包括协议(http://https://)、IP 或 FQDN 以及可选端口。"http://127.0.0.1:10000"
ContentTypeNblob 的内容类型"text/plain"
ContentMD5Nblob 的 MD5 哈希"vZGKbMRDAnMs4BIwlXaRvQ=="
ContentEncodingNblob 的内容编码"UTF-8"
ContentLanguageNblob 的内容语言"en-us"
ContentDispositionNblob 的内容处置。传达有关如何处理响应负载的其他信息"attachment"
CacheControlNblob 的缓存控制"no-cache"

设置 Azure Blob Storage

按照说明从 Azure 文档中了解如何创建 Azure 存储账户。

如果您希望为 Dapr 创建一个要使用的容器,可以预先创建。但是,如果 Blob Storage 状态提供程序不存在,它将自动为您创建一个。

为了将 Azure Blob Storage 设置为状态存储,您需要以下属性:

  • accountName:存储账户名称。例如:mystorageaccount
  • accountKey:主存储账户密钥或辅助存储账户密钥。
  • containerName:用于 Dapr 状态的容器的名称。如果容器不存在,将为您创建该容器。

使用 Microsoft Entra ID 进行身份验证

此组件支持使用 Microsoft Entra ID 进行身份验证,作为使用账户密钥的替代方法。在可能的情况下,建议在生产系统中使用 Microsoft Entra ID 进行身份验证,以利用更好的安全性、精细的访问控制以及为在 Azure 上运行的应用程序使用托管标识的能力。

以下脚本针对 bash 或 zsh shell 进行了优化,并且需要安装以下应用程序:

您还必须在 Azure CLI 中通过 Azure 身份验证。

  1. 要开始使用 Microsoft Entra ID 对 Blob Storage 状态存储组件进行身份验证,请确保您已创建 Microsoft Entra ID 应用程序和服务主体,如向 Azure 进行身份验证文档中所述。
    完成后,使用您创建的服务主体的 ID 设置一个变量:
SERVICE_PRINCIPAL_ID="[your_service_principal_object_id]"
  1. 使用您的 Azure 存储账户的名称及其所在的资源组的名称设置以下变量:
STORAGE_ACCOUNT_NAME="[your_storage_account_name]"
RG_NAME="[your_resource_group_name]"
  1. 使用 RBAC 为我们的服务主体分配一个角色,以便它可以访问存储账户内的数据。
    在这种情况下,您分配的是"Storage blob Data Contributor"角色,该角色具有广泛的访问权限;根据您的应用程序,也可以使用其他更严格的角色。
RG_ID=$(az group show --resource-group ${RG_NAME} | jq -r ".id")
az role assignment create \
  --assignee "${SERVICE_PRINCIPAL_ID}" \
  --role "Storage blob Data Contributor" \
  --scope "${RG_ID}/providers/Microsoft.Storage/storageAccounts/${STORAGE_ACCOUNT_NAME}"

当使用 Microsoft Entra ID 对组件进行身份验证时,不需要 accountKey 字段。相反,请根据向 Azure 进行身份验证文档,在组件的元数据中指定所需的凭据(如果有)。

例如:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <NAME>
spec:
  type: state.azure.blobstorage
  version: v1
  metadata:
  - name: accountName
    value: "[your_account_name]"
  - name: containerName
    value: "[your_container_name]"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId
    value: "[your_client_id]"
  - name: azureClientSecret
    value : "[your_client_secret]"

应用配置

在 Kubernetes 中

要将 Azure Blob Storage 状态存储应用于 Kubernetes,请使用 kubectl CLI:

kubectl apply -f azureblob.yaml

本地运行

要在本地运行,请创建一个包含 YAML 文件的 components 目录,并使用标志 --resources-path 将路径提供给 dapr run 命令。

此状态存储在容器中创建一个 blob 文件,并将原始状态放入其中。

例如,来自名为 myservice 的服务的以下操作:

curl -X POST http://localhost:3500/v1.0/state \
  -H "Content-Type: application/json"
  -d '[
        {
          "key": "nihilus",
          "value": "darth"
        }
      ]'

这将在容器中创建 blob 文件,其中 key 作为文件名,value 作为文件的内容。

并发

根据 Azure Blob Storage 文档,通过使用 ETag 来实现 Azure Blob Storage 状态并发。

相关链接