Um endpoint Armazenamento de Blobs forma o endereço base para todos os objetos dentro de uma conta de armazenamento. Quando crias uma conta de armazenamento, especificas que tipo de endpoint queres usar. Armazenamento de Blobs suporta dois tipos de endpoints:
- Um endpoint padrão inclui o nome único da conta de armazenamento juntamente com um nome de domínio fixo. O formato de um ponto final padrão é
https://<storage-account>.blob.core.windows.net.
- Um endpoint de zona DNS do Azure (pré-visualização) seleciona dinamicamente uma zona DNS do Azure e atribui-a à conta de armazenamento quando esta é criada. O formato de um endpoint do DNS do Azure Zone é
https://<storage-account>.z[00-99].blob.storage.azure.net.
Quando a sua aplicação cria um objeto cliente de serviço que se liga aos recursos de dados do Armazenamento de Blobs, passa um URI referenciando o endpoint ao construtor cliente de serviço. Pode construir a cadeia de URI manualmente, ou pode consultar o endpoint de serviço em tempo de execução usando a biblioteca de gestão do Armazenamento do Azure.
Important
Ao fazer referência a um ponto de extremidade de serviço em um aplicativo cliente, é recomendável evitar depender 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.
Os CNAMEs associados a um endpoint de conta de armazenamento podem mudar sem aviso. A sua aplicação não deve depender do número de registos CNAME ou dos subdomínios associados a esses registos CNAME.
Além disso, é recomendável que você honre o tempo de vida (TTL) do registro DNS e evite substituí-lo. Sobrepor o TTL DNS pode resultar em comportamento inesperado.
Para mais informações, consulte registos CNAME, subdomínios e endereços IP.
A biblioteca de gestão do Armazenamento do Azure fornece acesso programático ao fornecedor de recursos do Armazenamento do Azure. O fornecedor de recursos é a implementação do Armazenamento do Azure do Azure Resource Manager. A biblioteca de gestão permite aos programadores gerir contas de armazenamento e configuração de contas, bem como configurar políticas de gestão do ciclo de vida, políticas de replicação de objetos e políticas de imutabilidade.
Neste artigo, aprende como consultar um endpoint Armazenamento de Blobs usando a biblioteca de gestão Armazenamento do Azure. Depois usas esse endpoint para criar um BlobServiceClient objeto que se ligue aos recursos de dados do Armazenamento de Blobs.
Configure o seu projeto
Para trabalhar com os exemplos de código neste artigo, siga estas etapas para configurar seu projeto.
Instalar pacotes
Instale pacotes para funcionar com as bibliotecas usadas neste exemplo.
Instale os seguintes pacotes usando dotnet add package:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs
Abra o ficheiro pom.xml no seu editor de texto.
Adicione azure-sdk-bom para depender da versão mais recente da biblioteca. No trecho a seguir, substitua o espaço reservado {bom_version_to_target} pelo número da versão. Usar azure-sdk-bom evita que você precise especificar a versão de cada dependência individual. Para saber mais sobre o BOM, consulte o arquivo README do BOM do SDK do Azure.
<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 ligações sem palavra-passe aos 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 usando 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 usando 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 ao código as diretivas using ou import necessárias. Note-se que os exemplos de código podem dividir funcionalidades entre ficheiros, mas nesta secção todas as diretivas estão listadas em conjunto.
Aditar 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ção sobre a biblioteca do cliente:
-
Azure. Identidade: Fornece suporte para autenticação de tokens Microsoft Entra em todo o SDK do Azure, sendo necessário para ligações sem palavra-passe aos serviços Azure.
-
Azure. ResourceManager.Storage: Suporta a gestão dos recursos do Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
-
Azure. Storage.Blobs: Contém as classes principais que pode usar para trabalhar com os recursos de dados do Armazenamento de Blobs.
Aditar 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ção sobre a biblioteca do cliente:
-
com.azure.identity: Fornece suporte para autenticação de tokens Microsoft Entra em todo o SDK do Azure, sendo necessário para ligações sem palavra-passe aos serviços Azure.
-
com.azure.storage.blob: Contém as classes principais que pode usar para trabalhar com os recursos de dados do Armazenamento de Blobs.
-
com.azure.resourcemanager: Suporta a gestão de recursos e grupos de recursos do Azure.
-
com.azure.resourcemanager.storage: Suporta a gestão dos recursos do 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ção sobre a biblioteca do cliente:
-
@azure/identity: Fornece suporte para autenticação de tokens Microsoft Entra em todo o SDK do Azure, sendo necessário para ligações sem palavra-passe aos serviços Azure.
-
@azure/storage-blob: Contém as classes principais que pode usar para trabalhar com Armazenamento de Blobs recursos de dados.
-
@azure/arm-resources: Suporta a gestão de recursos e grupos de recursos do Azure.
-
@azure/arm-storage: Suporta a gestão de recursos Armazenamento do Azure, incluindo grupos de recursos e contas de armazenamento.
Adicione as declarações import a seguir:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Informação sobre a biblioteca do cliente:
-
Azure-identity: Fornece suporte para autenticação de tokens Microsoft Entra em todo o SDK do Azure, sendo necessário para ligações sem palavra-passe a serviços Azure.
-
azure-storage-blob: Contém as classes principais que pode usar para trabalhar com os recursos de dados do Armazenamento de Blobs.
-
Azure-mgmt-resource: Suporta a gestão de recursos e grupos de recursos do Azure.
-
azure-mgmt-storage: Suporta a gestão de recursos do 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. Este passo só precisa de ser efetuado uma vez por subscrição e só se aplica se o fornecedor de recursos Microsoft.Storage não estiver atualmente registado na sua subscrição.
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.
Também pode usar as bibliotecas de gestão do Azure para verificar o estado do registo e registar o fornecedor de recursos de armazenamento, como 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")
Observação
Para realizar a operação de registo, precisará de permissões para a seguinte ação Azure RBAC: Microsoft. Armazenamento/registo/ação. Esta permissão está incluída nos papéis de Contribuinte e Proprietário .
Consulta do ponto final do Armazenamento de Blobs
Para recuperar o endpoint Armazenamento de Blobs para uma dada conta de armazenamento, precisamos de obter as propriedades da conta de armazenamento chamando a operação Get Properties. Os seguintes exemplos de código utilizam tanto as bibliotecas de acesso como de gestão de dados para obter um endpoint Armazenamento de Blobs para uma conta de armazenamento especificada:
Para obter as propriedades de uma conta de armazenamento especificada, utilize o seguinte método a partir de um objeto StorageAccountCollection :
Este método devolve 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 a partir de um objeto AzureResourceManager :
Este método devolve 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 :
Este método devolve 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 :
Este método devolve 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
Crie um objeto cliente usando o endpoint
Depois de ter o endpoint Armazenamento de Blobs para uma conta de armazenamento, pode instanciar um objeto cliente para trabalhar com recursos de dados. O exemplo de código seguinte cria um BlobServiceClient objeto usando o endpoint que recuperámos 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óximos passos
Veja os exemplos completos de código (GitHub):
Para saber mais sobre a criação de objetos cliente, consulte Criar e gerir objetos cliente que interagem com recursos de dados.