Конечная точка хранилища BLOB-объектов формирует базовый адрес для всех объектов в учетной записи хранения. При создании учетной записи хранения укажите тип конечной точки, которую вы хотите использовать. Хранилище BLOB-объектов поддерживает два типа конечных точек:
-
Стандартная конечная точка включает уникальное имя учетной записи хранения вместе с фиксированным доменным именем. Формат стандартной конечной точки.
https://<storage-account>.blob.core.windows.net
-
Конечная точка зоны Azure DNS (предварительная версия) динамически выбирает зону Azure DNS и назначает ее учетной записи хранения при его создании. Формат конечной точки зоны DNS Azure.
https://<storage-account>.z[00-99].blob.storage.azure.net
Когда ваше приложение создает объект клиента службы, который подключается к ресурсам данных объектного хранилища BLOB, вы передаете URI, ссылающийся на конечную точку, в конструктор клиента службы. Вы можете создать строку URI вручную или запросить конечную точку службы во время выполнения с помощью библиотеки управления хранилища Azure.
Это важно
При ссылке на конечную точку службы в клиентском приложении рекомендуется избегать использования зависимостей от кэшированного IP-адреса. IP-адрес учетной записи хранения может быть изменен, и использование кэшированного IP-адреса может привести к непредвиденному поведению.
CNAMEs, связанные с конечной точкой учетной записи хранения, могут изменяться без уведомления. Приложение не должно зависеть от количества записей CNAME или вложенных доменов, связанных с этими записями CNAME.
Кроме того, рекомендуется учитывать время жизни (TTL) записи DNS и не переопределять ее. Переопределение TTL для DNS может привести к неожиданному поведению.
Дополнительные сведения см. в записях CNAME, поддоменах и IP-адресах.
Библиотека управления службами хранилища Azure предоставляет программный доступ к поставщику ресурсов службы хранилища Azure. Поставщик ресурсов — это реализация службы хранилища Azure в Azure Resource Manager. Библиотека управления позволяет разработчикам управлять учетными записями хранения и конфигурацией учетной записи, а также настраивать политики управления жизненным циклом, политики репликации объектов и политики неизменяемости.
Из этой статьи вы узнаете, как запросить конечную точку хранилища BLOB-объектов с помощью библиотеки управления хранилищем Azure. Затем вы используете эту конечную BlobServiceClient
точку для создания объекта, чтобы соединиться с ресурсами данных Blob-хранилища.
Настройка проекта
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Установка пакетов
Установите пакеты для работы с библиотеками, используемыми в этом примере.
Установите следующие пакеты с помощью dotnet add package
:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs
Откройте файл pom.xml
в текстовом редакторе.
Добавьте azure-sdk-bom , чтобы получить зависимость от последней версии библиотеки. В следующем фрагменте замените заполнитель {bom_version_to_target}
номером версии. Использование azure-sdk-bom избавляет от необходимости указывать версию каждой отдельной зависимости. Дополнительные сведения о BOM см. в статье BOM SDK azure README.
<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-identity необходима для безпарольных подключений к службам Azure.
<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
:
npm install @azure/identity
npm install @azure/storage-blob
npm install @azure/arm-resources
npm install @azure/arm-storage
Установите следующие пакеты с помощью pip install
:
pip install azure-identity
pip install azure-storage-blob
pip install azure-mgmt-resource
pip install azure-mgmt-storage
Настройка кода приложения
Добавьте необходимые using
или import
директивы в код. Обратите внимание, что примеры кода могут разделить функциональные возможности между файлами, но в этом разделе перечислены все директивы вместе.
Затем добавьте следующие using
директивы:
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Сведения о клиентской библиотеке:
-
Azure.Identity: обеспечивает поддержку проверки подлинности маркера Microsoft Entra в пакете SDK Azure и требуется для подключений без пароля к службам Azure.
-
Azure.ResourceManager.Storage: поддерживает управление ресурсами службы хранилища Azure, включая группы ресурсов и учетные записи хранения.
-
Azure.Storage.Blobs: содержит основные классы, которые можно использовать для работы с ресурсами хранилища BLOB-объектов.
Затем добавьте следующие import
директивы:
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: обеспечивает поддержку проверки подлинности маркера Microsoft Entra в пакете SDK Azure и требуется для подключений без пароля к службам 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: Обеспечивает поддержку проверки подлинности токенов Microsoft Entra в пакете SDK Azure и необходимо для безпарольных подключений к службам 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: обеспечивает поддержку проверки подлинности маркера Microsoft Entra в пакете SDK Azure и требуется для подключений без пароля к службам Azure.
-
azure-storage-blob: содержит основные классы, которые можно использовать для работы с ресурсами данных хранилища BLOB-объектов.
-
azure-mgmt-resource: поддерживает управление ресурсами и группами ресурсов Azure.
-
azure-mgmt-storage: поддерживает управление ресурсами службы хранилища Azure, включая группы ресурсов и учетные записи хранения.
Зарегистрируйте поставщика ресурсов хранилища в подписке.
Ваш подписчик Azure должен зарегистрировать поставщика ресурсов, прежде чем вы сможете работать с ним. Этот шаг необходимо выполнить только один раз на подписку, и применяется только в том случае, если поставщик ресурсов Microsoft.Storage в настоящее время не зарегистрирован в вашей подписке.
Вы можете зарегистрировать поставщика ресурсов хранилища или проверить состояние регистрации, используя портал Azure, Azure CLI или Azure PowerShell.
Вы также можете использовать библиотеки управления Azure для проверки состояния регистрации и регистрации поставщика ресурсов хранилища, как показано в следующих примерах:
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-объектов для данной учетной записи хранения, необходимо получить свойства учетной записи хранения, вызвав операцию Get Properties . В следующих примерах кода используются библиотеки доступа к данным и управления для получения конечной точки Blob-хранилища для указанной учетной записи хранилища.
Чтобы получить свойства для указанной учетной записи хранения, используйте следующий метод из объекта StorageAccountCollection :
Этот метод возвращает объект 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;
}
Чтобы получить свойства для указанной учетной записи хранения, используйте следующий метод из объекта AzureResourceManager :
Этот метод возвращает интерфейс 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;
}
Чтобы получить свойства для указанной учетной записи хранения, используйте следующий метод из объекта StorageManagementClient :
Этот метод возвращает значение 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;
}
Чтобы получить свойства для указанной учетной записи хранения, используйте следующий метод из объекта StorageManagementClient :
Этот метод возвращает 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
, полученной в предыдущем примере.
// 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 ...
storage_account_name = "<storage-account-name>"
credential = DefaultAzureCredential()
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):
Дополнительные сведения о создании клиентских объектов см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.