Un punto de conexión de Blob Storage forma la dirección base de todos los objetos de una cuenta de almacenamiento. Al crear una cuenta de almacenamiento, especifique qué tipo de punto de conexión desea usar. Blob Storage admite dos tipos de puntos de conexión:
- Un punto de conexión estándar incluye el nombre de la cuenta de almacenamiento único junto con un nombre de dominio fijo. El formato de un punto de conexión estándar es
https://<storage-account>.blob.core.windows.net.
- Un punto de conexión de zona Azure DNS (versión preliminar) selecciona dinámicamente una zona Azure DNS y la asigna a la cuenta de almacenamiento cuando se crea. El formato de un punto de conexión de zona de Azure DNS es
https://<storage-account>.z[00-99].blob.storage.azure.net.
Cuando la aplicación crea un objeto de cliente de servicio que se conecta a Blob Storage recursos de datos, se pasa un URI que hace referencia al punto de conexión al constructor de cliente de servicio. Puede construir manualmente la cadena de URI o puede consultar el punto de conexión de servicio en tiempo de ejecución mediante la biblioteca de administración de Azure Storage.
Importante
Al hacer referencia a un punto de conexión de servicio en una aplicación cliente, se recomienda evitar la dependencia de una dirección IP almacenada en caché. La dirección IP de la cuenta de almacenamiento está sujeta a cambios y, por su parte, confiar en una dirección IP almacenada en caché podría dar lugar a comportamientos inesperados.
Los CNAME asociados a un punto de conexión de cuenta de almacenamiento pueden cambiar sin previo aviso. La aplicación no debe depender del número de registros CNAME o de los subdominios asociados a esos registros CNAME.
Además, se recomienda respetar el período de vida (TTL) del registro DNS y evitar reemplazarlo. La invalidación del TTL de DNS podría dar lugar a comportamientos inesperados.
Para obtener más información, consulte registros CNAME, subdominios y direcciones IP.
La biblioteca de administración de Azure Storage proporciona acceso mediante programación al proveedor de recursos Azure Storage. El proveedor de recursos es la implementación Azure Storage del Azure Resource Manager. La biblioteca de administración permite a los desarrolladores administrar cuentas de almacenamiento y configuración de cuentas, así como configurar directivas de administración del ciclo de vida, directivas de replicación de objetos y directivas de inmutabilidad.
En este artículo, aprenderá a consultar un punto de conexión de Blob Storage mediante la biblioteca de administración de Azure Storage. Después, use ese punto de conexión para crear un BlobServiceClient objeto para conectarse con Blob Storage recursos de datos.
Configura tu proyecto
Para trabajar con los ejemplos de código de este artículo, siga los pasos siguientes a fin de configurar el proyecto.
Instalación de paquetes
Instale paquetes para trabajar con las bibliotecas usadas en este ejemplo.
Instale los siguientes paquetes mediante dotnet add package:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs
Abra el archivo pom.xml en el editor de texto.
Agregue azure-sdk-bom para depender de la versión más reciente de la biblioteca. En el fragmento de código siguiente, reemplace el marcador de posición {bom_version_to_target} por el número de versión. El uso de azure-sdk-bom le impide tener que especificar la versión de cada dependencia individual. Para obtener más información sobre el BOM, consulte el README del BOM del SDK de 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>
A continuación, agregue los siguientes elementos de dependencia al grupo de dependencias. La dependencia azure-identity es necesaria para las conexiones sin contraseña a los servicios de 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 los siguientes paquetes mediante npm install:
npm install @azure/identity
npm install @azure/storage-blob
npm install @azure/arm-resources
npm install @azure/arm-storage
Instale los siguientes paquetes mediante pip install:
pip install azure-identity
pip install azure-storage-blob
pip install azure-mgmt-resource
pip install azure-mgmt-storage
Configuración del código de la aplicación
Agregue las directivas necesarias using o import al código. Tenga en cuenta que los ejemplos de código pueden dividir la funcionalidad entre archivos, pero en esta sección todas las directivas se enumeran juntas.
Agregue las siguientes using directivas:
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Información de la biblioteca cliente:
-
Azure.Identity: proporciona compatibilidad con la autenticación mediante tokens de Microsoft Entra en todo el SDK de Azure, y es necesaria para las conexiones sin contraseña a los servicios de Azure.
-
Azure. ResourceManager.Storage: admite la administración de recursos de Azure Storage, incluidos los grupos de recursos y las cuentas de almacenamiento.
-
Azure. Storage.Blobs: contiene las clases principales que puede usar para trabajar con Blob Storage recursos de datos.
Agregue las siguientes import directivas:
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.*;
Información de la biblioteca cliente:
-
com.azure.identity: proporciona compatibilidad con la autenticación de tokens de Microsoft Entra en la SDK de Azure y es necesaria para las conexiones sin contraseña a los servicios de Azure.
-
com.azure.storage.blob: contiene las clases principales que puede usar para trabajar con recursos de datos Blob Storage.
-
com.azure.resourcemanager: admite la administración de recursos y grupos de recursos de Azure.
-
com.azure.resourcemanager.storage: admite la administración de recursos de Azure Storage, incluidos los grupos de recursos y las cuentas de almacenamiento.
Agregue las siguientes require instrucciones para cargar los 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");
Información de la biblioteca cliente:
-
@azure/identity: proporciona compatibilidad con la autenticación de tokens Microsoft Entra en la SDK de Azure y es necesaria para las conexiones sin contraseña a los servicios de Azure.
-
@azure/storage-blob: contiene las clases principales que puede usar para trabajar con recursos de datos de Blob Storage.
-
@azure/arm-resources: admite la administración de recursos y grupos de recursos de Azure.
-
@azure/arm-storage: admite la administración de recursos de Azure Storage, incluidos los grupos de recursos y las cuentas de almacenamiento.
Agregue las siguientes import declaraciones:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Información de la biblioteca cliente:
-
azure-identity: proporciona compatibilidad con la autenticación de tokens de Microsoft Entra en la SDK de Azure y es necesaria para las conexiones sin contraseña a los servicios de Azure.
-
azure-storage-blob: contiene las clases principales que puede usar para trabajar con Blob Storage recursos de datos.
-
azure-mgmt-resource: admite la administración de recursos y grupos de recursos de Azure.
-
azure-mgmt-storage: admite la administración de recursos de Azure Storage, incluidos los grupos de recursos y las cuentas de almacenamiento.
Registro de un proveedor de recursos de Storage con una suscripción
Un proveedor de recursos debe registrarse con su suscripción de Azure para poder trabajar con él. Este paso solo debe realizarse una vez por suscripción y solo se aplica si el proveedor de recursos Microsoft. El almacenamiento no está registrado actualmente con la suscripción.
Puede registrar el proveedor de recursos de Storage o comprobar el estado de registro mediante Azure Portal, la CLI de Azure o Azure PowerShell.
También puede usar las bibliotecas de administración de Azure para comprobar el estado de registro y registrar el proveedor de recursos storage, como se muestra en los ejemplos siguientes:
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 la operación de registro, necesitará permisos para la siguiente acción de Azure RBAC: Microsoft.Storage/register/action. Este permiso se incluye en los roles Colaborador y Propietario .
Consulta del punto de conexión de Blob Storage
Para recuperar el punto de conexión de Blob Storage para una cuenta de almacenamiento determinada, es necesario obtener las propiedades de la cuenta de almacenamiento llamando a la operación Obtener propiedades. En los ejemplos de código siguientes se usan las bibliotecas de administración y acceso a datos para obtener un punto de conexión de Blob Storage para una cuenta de almacenamiento especificada:
Para obtener las propiedades de una cuenta de almacenamiento especificada, use el método siguiente desde un objeto StorageAccountCollection :
Este método devuelve un objeto StorageAccountResource , que representa la cuenta de almacenamiento.
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 obtener las propiedades de una cuenta de almacenamiento especificada, use el método siguiente desde un objeto AzureResourceManager :
Este método devuelve una interfaz StorageAccount , que es una representación inmutable del lado cliente de la cuenta de almacenamiento.
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 obtener las propiedades de una cuenta de almacenamiento especificada, use el siguiente método desde un objeto StorageManagementClient :
Este método devuelve un Promise<StorageAccountsGetPropertiesResponse>, que representa la cuenta de almacenamiento.
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 obtener las propiedades de una cuenta de almacenamiento especificada, use el siguiente método desde un objeto StorageManagementClient :
Este método devuelve un StorageAccount objeto , que representa la cuenta de almacenamiento.
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
Cree un objeto cliente usando el punto de conexión
Una vez que tenga el punto de conexión de Blob Storage para una cuenta de almacenamiento, puede crear instancias de un objeto de cliente para trabajar con recursos de datos. En el ejemplo de código siguiente se crea un BlobServiceClient objeto mediante el punto de conexión recuperado en el ejemplo 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 ...
Pasos siguientes
Ver los ejemplos de código completos (GitHub):
Para obtener más información sobre la creación de objetos de cliente, consulte Creación y administración de objetos de cliente que interactúan con los recursos de datos.