Um endpoint do Armazenamento de Blobs constitui o endereço base para todos os objetos dentro de uma conta de armazenamento. Ao criar uma conta de armazenamento, especifique qual tipo de ponto de extremidade você deseja usar. Armazenamento de Blobs dá suporte a dois tipos de pontos de extremidade:
- Um endpoint padrão inclui o nome exclusivo da conta de armazenamento, juntamente com um nome de domínio fixo. O formato de um endpoint padrão é
https://<storage-account>.blob.core.windows.net.
- Um ponto de extremidade de zona DNS do Azure (versão prévia) seleciona dinamicamente uma zona DNS do Azure e a associa à conta de armazenamento quando a conta de armazenamento é criada. O formato de um endpoint de zona DNS do Azure é
https://<storage-account>.z[00-99].blob.storage.azure.net.
Quando seu aplicativo cria um objeto cliente de serviço que se conecta a recursos de dados Armazenamento de Blobs, você passa um URI referenciando o ponto de extremidade para o construtor do cliente de serviço. Você pode construir a string de URI manualmente ou consultar o ponto de extremidade do serviço em tempo de execução usando a biblioteca de gerenciamento do Armazenamento do Azure.
Importante
Ao fazer referência a um ponto de extremidade de serviço em um aplicativo cliente, é recomendável evitar a dependência de um endereço IP armazenado em cache. O endereço IP da conta de armazenamento está sujeito a alterações, e confiar em um endereço IP armazenado em cache pode resultar em um comportamento inesperado.
CNAMEs associadas a um ponto de extremidade de conta de armazenamento podem ser alterados sem aviso prévio. Seu aplicativo não deve depender do número de registros CNAME ou dos subdomínios associados a esses registros CNAME.
Além disso, é recomendável respeite a vida útil (TTL) do registro DNS e evite substituí-la. A substituição da TTL do DNS pode resultar em um comportamento inesperado.
Para obter mais informações, consulte registros CNAME, subdomínios e endereços IP.
A biblioteca de gerenciamento de Armazenamento do Azure fornece acesso programático ao provedor de recursos Armazenamento do Azure. O provedor de recursos é a implementação Armazenamento do Azure do Azure Resource Manager. A biblioteca de gerenciamento permite que os desenvolvedores gerenciem contas de armazenamento e configuração de conta, bem como configurem políticas de gerenciamento de ciclo de vida, políticas de replicação de objeto e políticas de imutabilidade.
Neste artigo, você aprenderá como consultar um endpoint do Armazenamento de Blobs usando a biblioteca de gerenciamento do Armazenamento do Azure. Em seguida, use esse endpoint para criar um objeto BlobServiceClient para se conectar aos recursos de dados do Armazenamento de Blobs.
Configure seu projeto
Para trabalhar com os exemplos de código neste artigo, siga estas etapas para configurar seu projeto.
Instalar pacotes
Instale pacotes para trabalhar com as bibliotecas usadas neste exemplo.
Instale os seguintes pacotes por meio de dotnet add package:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs
Abra o arquivo pom.xml no seu editor de texto.
Adicione azure-sdk-bom para assumir uma dependência da versão mais recente da biblioteca. No snippet a seguir, substitua o marcador {bom_version_to_target} pelo número de versão. O uso do azure-sdk-bom impede que você precise especificar a versão de cada dependência individual. Para saber mais sobre o BOM, consulte o SDK do Azure BOM 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>
Em seguida, adicione os seguintes elementos de dependência ao grupo de dependências. A dependência azure-identity é necessária para conexões sem senha com os serviços do 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>
Instale os seguintes pacotes por meio de npm install:
npm install @azure/identity
npm install @azure/storage-blob
npm install @azure/arm-resources
npm install @azure/arm-storage
Instale os seguintes pacotes por meio de pip install:
pip install azure-identity
pip install azure-storage-blob
pip install azure-mgmt-resource
pip install azure-mgmt-storage
Configurar o código do aplicativo
Adicione as diretivas necessárias usingimport ao código. Observe que os exemplos de código podem dividir a funcionalidade entre arquivos, mas nesta seção todas as diretivas são listadas juntas.
Adicione as seguintes using diretivas:
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Informações da biblioteca de clientes:
-
Azure.Identity: Fornece suporte à autenticação por token do Microsoft Entra em todo o SDK do Azure e é necessário para conexões sem senha com os serviços do Azure.
-
Azure. ResourceManager.Storage: dá suporte ao gerenciamento de recursos Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
-
Azure. Storage.Blobs: contém as classes primárias que você pode usar para trabalhar com Armazenamento de Blobs recursos de dados.
Adicione as seguintes import diretivas:
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.*;
Informações da biblioteca de clientes:
-
com.azure.identity: fornece suporte à autenticação de token Microsoft Entra em todo o SDK do Azure e é necessário para conexões sem senha com serviços de Azure.
-
com.azure.storage.blob: contém as classes primárias que você pode usar para trabalhar com Armazenamento de Blobs recursos de dados.
-
com.azure.resourcemanager: dá suporte ao gerenciamento de recursos Azure e grupos de recursos.
-
com.azure.resourcemanager.storage: dá suporte ao gerenciamento de recursos Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
Adicione as seguintes require instruções para carregar os módulos:
const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");
const { ResourceManagementClient } = require("@azure/arm-resources");
const { StorageManagementClient } = require("@azure/arm-storage");
Informações da biblioteca de clientes:
-
@azure/identidade: fornece suporte à autenticação de token Microsoft Entra em todo o SDK do Azure e é necessário para conexões sem senha com serviços Azure.
-
@azure/storage-blob: contém as classes primárias que você pode usar para trabalhar com Armazenamento de Blobs recursos de dados.
-
@azure/arm-resources: dá suporte ao gerenciamento de recursos Azure e grupos de recursos.
-
@azure/arm-storage: dá suporte ao gerenciamento de recursos Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
Adicione as seguintes import declarações:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Informações da biblioteca de clientes:
-
azure-identity: fornece suporte à autenticação por token do Microsoft Entra em todo o SDK do Azure e é necessário para conexões sem senha com serviços do Azure.
-
azure-storage-blob: contém as classes primárias que você pode usar para trabalhar com Armazenamento de Blobs recursos de dados.
-
azure-mgmt-resource: dá suporte ao gerenciamento de recursos Azure e grupos de recursos.
-
azure-mgmt-storage: dá suporte ao gerenciamento de recursos Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
Registrar o provedor de recursos de armazenamento com uma assinatura
Um provedor de recursos deve ser registrado com sua assinatura do Azure antes que você possa trabalhar com ele. Essa etapa só precisa ser realizada uma vez por assinatura e só se aplica se o provedor de recursos Microsoft.Storage não estiver atualmente registrado na sua assinatura.
Você pode registrar o provedor de recursos de armazenamento ou verificar o status do registro usando o portal do Azure, a CLI do Azure ou o Azure PowerShell.
Você também pode usar as bibliotecas de gerenciamento de Azure para verificar o status de registro e registrar o provedor de recursos de armazenamento, conforme mostrado nos seguintes exemplos:
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")
Note
Para realizar a operação de registro, você precisará de permissões para a seguinte ação RBAC do Azure: Microsoft.Storage/register/action. Essa permissão está incluída nas funções Colaborador e Proprietário .
Consultar um ponto de extremidade do Armazenamento de Blobs
Para recuperar o ponto de extremidade do Armazenamento de Blobs para uma determinada conta de armazenamento, precisamos obter as propriedades da conta de armazenamento chamando a operação Obter Propriedades. Os exemplos de código a seguir usam as bibliotecas de gerenciamento e acesso a dados para obter um ponto de extremidade Armazenamento de Blobs para uma conta de armazenamento especificada:
Para obter as propriedades de uma conta de armazenamento especificada, use o seguinte método de um objeto StorageAccountCollection :
Esse método retorna um objeto StorageAccountResource , que representa a conta de armazenamento.
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;
}
Para obter as propriedades de uma conta de armazenamento especificada, use o seguinte método de um objeto AzureResourceManager :
Esse método retorna uma interface StorageAccount , que é uma representação imutável do lado do cliente da conta de armazenamento.
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;
}
Para obter as propriedades de uma conta de armazenamento especificada, use o seguinte método de um objeto StorageManagementClient :
Esse método retorna um Promise<StorageAccountsGetPropertiesResponse>, que representa a conta de armazenamento.
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;
}
Para obter as propriedades de uma conta de armazenamento especificada, use o seguinte método de um objeto StorageManagementClient :
Esse método retorna um StorageAccount objeto, que representa a conta de armazenamento.
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
Criar um objeto cliente usando o endpoint
Depois de ter o ponto de extremidade do Armazenamento de Blobs para uma conta de armazenamento, você poderá instanciar um objeto cliente para trabalhar com recursos de dados. O exemplo de código a seguir cria um BlobServiceClient objeto usando o ponto de extremidade que recuperamos no exemplo anterior:
// 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 ...
Próximas Etapas
Exibir os exemplos de código completo (GitHub):
Para saber mais sobre como criar objetos cliente, consulte Criar e gerenciar objetos cliente que interagem com recursos de dados.