Blob 存储终结点构成了存储帐户中所有对象的基址。 创建存储帐户时,需要指定要使用的终结点类型。 Blob 存储支持两种类型的终结点:
标准终结点
包含唯一的存储帐户名称和固定域名。 标准终结点的格式为
https://<storage-account>.blob.core.windows.net
。
Azure DNS 区域终结点(预览版)
可动态选择 Azure DNS 区域,并在创建后将其分配给存储帐户。 Azure DNS 区域终结点的格式为
https://<storage-account>.z[00-99].blob.storage.azure.net
。
当应用程序创建连接到 Blob 存储数据资源的服务客户端对象时,需要将引用终结点的 URI 传递给服务客户端构造函数。 可以手动构造 URI 字符串,也可以在运行时使用 Azure 存储管理库查询服务终结点。
Azure 存储管理库提供对
Azure 存储资源提供程序
的编程访问权限。 该资源提供程序是 Azure 资源管理器的 Azure 存储实现。 管理库使开发人员能够管理存储帐户和帐户配置,以及配置生命周期管理策略、对象复制策略和不可变性策略。
本文介绍如何使用 Azure 存储管理库查询 Blob 存储终结点。 然后,使用该终结点创建
BlobServiceClient
对象以连接 Blob 存储数据资源。
要使用本文中的代码示例,请按照以下步骤设置项目。
安装包以使用本示例中使用的库。
JavaScript
Python
使用
dotnet add package
安装以下包:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs
在文本编辑器中打开 pom.xml 文件pom.xml
。
添加 azure-sdk-bom,以在最新版本的库中采用一个依赖项。 在以下代码片段中,将 {bom_version_to_target}
占位符替换为版本号。 使用 azure-sdk-bom 则无需指定每个依赖项的版本。 若要了解有关 BOM 的详细信息,请参阅 Azure SDK BOM 自述文件。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
将以下依赖项元素添加到依赖项组。 与 Azure 服务建立无密码连接需要 azure-identity 依赖项。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager</artifactId>
<version>2.24.0</version>
</dependency>
<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager-storage</artifactId>
<version>2.24.0</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-management</artifactId>
<version>1.10.2</version>
</dependency>
npm install @azure/identity
npm install @azure/storage-blob
npm install @azure/arm-resources
npm install @azure/arm-storage
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
客户端库信息:
Azure.Identity:跨 Azure SDK 提供 Azure Active Directory (Azure AD) 令牌身份验证支持,并且它是与 Azure 服务进行无密码连接所必需的。
Azure.ResourceManager.Storage:支持管理 Azure 存储资源,包括资源组和存储帐户。
Azure.Storage.Blobs:包含可用于处理 Blob 存储数据资源的主要类。
import com.azure.identity.*;
import com.azure.storage.blob.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.models.*;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;
客户端库信息:
com.azure.identity:跨 Azure SDK 提供 Azure Active Directory (Azure AD) 令牌身份验证支持,并且它是与 Azure 服务进行无密码连接所必需的。
com.azure.storage.blob:包含可用于处理 Blob 存储数据资源的主要类。
com.azure.resourcemanager:支持管理 Azure 资源和资源组。
com.azure.resourcemanager.storage:支持管理 Azure 存储资源,包括资源组和存储帐户。
添加以下 require
语句以加载模块:
const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");
const { ResourceManagementClient } = require("@azure/arm-resources");
const { StorageManagementClient } = require("@azure/arm-storage");
客户端库信息:
@azure/identity:跨 Azure SDK 提供 Azure Active Directory (Azure AD) 令牌身份验证支持,并且它是与 Azure 服务进行无密码连接所必需的。
@azure/storage-blob:包含可用于处理 Blob 存储数据资源的主要类。
@azure/arm-resources:支持管理 Azure 资源和资源组。
@azure/arm-storage:支持管理 Azure 存储资源,包括资源组和存储帐户。
添加以下 import
语句:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
客户端库信息:
azure-identity:跨 Azure SDK 提供 Azure Active Directory (Azure AD) 令牌身份验证支持,并且它是与 Azure 服务进行无密码连接所必需的。
azure-storage-blob:包含可用于处理 Blob 存储数据资源的主要类。
azure-mgmt-resource:支持管理 Azure 资源和资源组。
azure-mgmt-storage:支持管理 Azure 存储资源,包括资源组和存储帐户。
在订阅中注册存储资源提供程序
必须先在 Azure 订阅中注册资源提供程序,然后才能使用它。 只需为每个订阅执行此步骤一次,并且仅当资源提供程序 Microsoft.Storage 当前未在订阅中注册时才适用。
可以使用 Azure 门户、Azure CLI 或 Azure PowerShell 注册存储资源提供程序或检查注册状态。
还可以使用 Azure 管理库来检查注册状态并注册存储资源提供程序,如以下示例所示:
JavaScript
Python
public static async Task RegisterSRPInSubscription(SubscriptionResource subscription)
ResourceProviderResource resourceProvider =
await subscription.GetResourceProviderAsync("Microsoft.Storage");
// Check the registration state of the resource provider and register, if needed
if (resourceProvider.Data.RegistrationState == "NotRegistered")
resourceProvider.Register();
public void RegisterSRPInSubscription(AzureResourceManager armClient) {
// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
armClient.providers().register("Microsoft.Storage");
async function registerSRPInSubscription(resourceMgmtClient /*: ResourceManagementClient*/) {
// Check the registration state of the resource provider and register, if needed
if (resourceMgmtClient.providers.get("Microsoft.Storage").registrationState == "NotRegistered")
resourceMgmtClient.providers.register("Microsoft.Storage");
def register_srp_in_subscription(self, resource_mgmt_client: ResourceManagementClient):
if (resource_mgmt_client.providers.get("Microsoft.Storage").registration_state == "NotRegistered"):
resource_mgmt_client.providers.register("Microsoft.Storage")
若要执行注册操作,需要具有以下 Azure RBAC 操作的相关权限:Microsoft.Storage/register/action。 此权限包含在“参与者”和“所有者”角色中。
查询 Blob 存储终结点
若要检索给定存储帐户的 Blob 存储终结点,需要通过调用“获取属性”操作来获取存储帐户属性。 以下代码示例使用数据访问和管理库来获取指定存储帐户的 Blob 存储终结点:
JavaScript
Python
此方法将返回一个表示存储帐户的 StorageAccountResource 对象。
public static async Task<Uri> GetBlobServiceEndpoint(
string storageAccountName,
TokenCredential credential)
// TODO: replace with your subscription ID and resource group name
// You can locate your subscription ID on the Subscriptions blade
// of the Azure portal (https://portal.azure.com)
const string subscriptionId = "<subscription-id>";
const string rgName = "<resource-group-name>";
ArmClient armClient = new(credential);
// Create a resource identifier, then get the subscription resource
ResourceIdentifier resourceIdentifier = new($"/subscriptions/{subscriptionId}");
SubscriptionResource subscription = armClient.GetSubscriptionResource(resourceIdentifier);
// Get a resource group
ResourceGroupResource resourceGroup = await subscription.GetResourceGroupAsync(rgName);
// Get a collection of storage account resources
StorageAccountCollection accountCollection = resourceGroup.GetStorageAccounts();
// Get the properties for the specified storage account
StorageAccountResource storageAccount = await accountCollection.GetAsync(storageAccountName);
// Return the primary endpoint for the blob service
return storageAccount.Data.PrimaryEndpoints.BlobUri;
此方法将返回一个 StorageAccount 接口,该接口是存储帐户的不可变客户端表示形式。
public String GetBlobServiceEndpoint(String saName, DefaultAzureCredential credential) {
String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
AzureResourceManager azureResourceManager = AzureResourceManager
.configure()
.authenticate(credential, profile)
.withSubscription(subscriptionID);
StorageAccount storageAccount = azureResourceManager.storageAccounts()
.getByResourceGroup(rgName, saName);
String endpoint = storageAccount.endPoints().primary().blob();
return endpoint;
storageAccounts.getProperties
此方法将返回一个表示存储帐户的 Promise<StorageAccountsGetPropertiesResponse>
。
async function getBlobServiceEndpoint(saName, credential) {
const subscriptionId = "<subscription-id>";
const rgName = "<resource-group-name>";
const storageMgmtClient = new StorageManagementClient(
credential,
subscriptionId
// Get the properties for the specified storage account
const storageAccount = await storageMgmtClient.storageAccounts.getProperties(
rgName,
saName
// Get the primary endpoint for the blob service
const endpoint = storageAccount.primaryEndpoints.blob;
return endpoint;
此方法将返回一个表示存储帐户的 StorageAccount
对象。
def get_blob_service_endpoint(self, storage_account_name, credential: DefaultAzureCredential) -> str:
subscription_id = "<subscription-id>"
rg_name = "<resource-group-name>"
storage_mgmt_client = StorageManagementClient(
credential=credential,
subscription_id=subscription_id
# Get the properties for the specified storage account
storage_account = storage_mgmt_client.storage_accounts.get_properties(
resource_group_name=rg_name,
account_name=storage_account_name
# Get blob service endpoint
endpoint = storage_account.primary_endpoints.blob
return endpoint
使用终结点创建客户端对象
拥有存储帐户的 Blob 存储终结点后,可以实例化客户端对象以使用数据资源。 以下代码示例使用我们在前面示例中检索到的终结点来创建 BlobServiceClient
对象:
JavaScript
Python
// Create an instance of DefaultAzureCredential for authorization
TokenCredential credential = new DefaultAzureCredential();
// TODO: replace with your storage account name
string storageAccountName = "<storage-account-name>";
// Call out to our function that retrieves the blob service endpoint for the given storage account
Uri blobURI = await AccountProperties.GetBlobServiceEndpoint(storageAccountName, credential);
Console.WriteLine($"URI: {blobURI}");
// Now that we know the endpoint, create the client object
BlobServiceClient blobServiceClient = new(blobURI, credential);
// Do something with the storage account or its resources ...
String saName = "<storage-account-name>";
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
AccountProperties accountProps = new AccountProperties();
String blobEndpoint = accountProps.GetBlobServiceEndpoint(saName, credential);
System.out.printf("URI: %s", blobEndpoint);
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint(blobEndpoint)
.credential(credential)
.buildClient();
// Do something with the storage account or its resources ...
// For client-side applications running in the browser, use InteractiveBrowserCredential instead of DefaultAzureCredential.
// See https://aka.ms/azsdk/js/identity/examples for more details.
const saName = "<storage-account-name>";
const credential = new DefaultAzureCredential();
// Call out to our function that retrieves the blob service endpoint for a storage account
const endpoint = await getBlobServiceEndpoint(saName, credential)
console.log(endpoint);
// Now that we know the endpoint, create the client object
const blobServiceClient = new BlobServiceClient(
endpoint,
credential);
// Do something with the storage account or its resources ...
sample = BlobEndpointSample()
# Call out to our function that retrieves the blob service endpoint for a storage account
endpoint = sample.get_blob_service_endpoint(storage_account_name, credential)
print(f"URL: {endpoint}")
# Now that we know the endpoint, create the client object
blob_service_client = BlobServiceClient(account_url=endpoint, credential=credential)
# Do something with the storage account or its resources ...
查看完整的代码示例 (GitHub):
JavaScript
Python
若要详细了解如何创建客户端对象,请参阅创建和管理与数据资源交互的客户端对象。