Eseguire una query per un endpoint di Archiviazione BLOB usando la libreria di gestione Archiviazione di Azure
Articolo
Un endpoint Archiviazione BLOB costituisce l'indirizzo di base per tutti gli oggetti all'interno di un account di archiviazione. Quando si crea un account di archiviazione, specificare il tipo di endpoint da usare. Blob Archiviazione supporta due tipi di endpoint:
Un endpoint standard include il nome dell'account di archiviazione univoco insieme a un nome di dominio fisso. Il formato di un endpoint standard è https://<storage-account>.blob.core.windows.net.
Un endpoint di zona DNS di Azure (anteprima) seleziona in modo dinamico una zona DNS di Azure e lo assegna all'account di archiviazione al momento della creazione. Il formato di un endpoint zona DNS di Azure è https://<storage-account>.z[00-99].blob.storage.azure.net.
Quando l'applicazione crea un oggetto client del servizio che si connette alle risorse di dati Archiviazione BLOB, si passa un URI che fa riferimento all'endpoint al costruttore client del servizio. È possibile costruire manualmente la stringa URI oppure eseguire query per l'endpoint di servizio in fase di esecuzione usando la libreria di gestione Archiviazione di Azure.
Importante
Quando si fa riferimento a un endpoint di servizio in un'applicazione client, è consigliabile evitare di assumere una dipendenza da un indirizzo IP memorizzato nella cache. L'indirizzo IP dell'account di archiviazione è soggetto a modifiche e l'utilizzo di un indirizzo IP memorizzato nella cache può comportare un comportamento imprevisto.
I CNAM associati a un endpoint dell'account di archiviazione possono cambiare senza preavviso. L'applicazione non deve dipendere dal numero di record CNAME o dai sottodomini associati a tali record CNAME.
È inoltre consigliabile rispettare la durata (TTL) del record DNS ed evitare di eseguirne l'override. L'override del TTL DNS può comportare un comportamento imprevisto.
La libreria di gestione Archiviazione di Azure fornisce l'accesso a livello di codice al provider di risorse Archiviazione di Azure. Il provider di risorse è l'implementazione Archiviazione di Azure di Azure Resource Manager. La libreria di gestione consente agli sviluppatori di gestire gli account di archiviazione e la configurazione dell'account, nonché di configurare i criteri di gestione del ciclo di vita, i criteri di replica degli oggetti e i criteri di immutabilità.
Questo articolo illustra come eseguire query su un endpoint Archiviazione BLOB usando la libreria di gestione Archiviazione di Azure. Usare quindi l'endpoint per creare un BlobServiceClient oggetto per connettersi alle risorse di dati Archiviazione BLOB.
Impostare il progetto
Per usare gli esempi di codice in questo articolo, seguire questa procedura per configurare il progetto.
Installare i pacchetti
Installare i pacchetti per lavorare con le librerie usate in questo esempio.
Aggiungere azure-sdk-bom per acquisire una dipendenza dalla versione più recente della libreria. Nel frammento di codice seguente sostituire il {bom_version_to_target} segnaposto con il numero di versione. L'uso di azure-sdk-bom impedisce di specificare la versione di ogni singola dipendenza. Per altre informazioni sulla distinta base, vedere il file LEGGIMI DBA di Azure SDK.
Aggiungere quindi gli elementi di dipendenza seguenti al gruppo di dipendenze. La dipendenza azure-identity è necessaria per le connessioni senza password ai servizi di Azure.
Aggiungere le direttive o import necessarie using al codice. Si noti che gli esempi di codice possono suddividere le funzionalità tra file, ma in questa sezione tutte le direttive vengono elencate insieme.
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Informazioni sulla libreria client:
Azure.Identity: fornisce il supporto per l'autenticazione token di Microsoft Entra in Azure SDK ed è necessario per le connessioni senza password ai servizi di Azure.
Azure.ResourceManager. Archiviazione: supporta la gestione delle risorse Archiviazione di Azure, inclusi i gruppi di risorse e gli account di archiviazione.
Azure. Archiviazione. BLOB: contiene le classi primarie che è possibile usare per lavorare con le risorse di dati Archiviazione BLOB.
com.azure.identity: fornisce il supporto per l'autenticazione token di Microsoft Entra in Azure SDK ed è necessario per le connessioni senza password ai servizi di Azure.
com.azure.storage.blob: contiene le classi primarie che è possibile usare per usare blob Archiviazione risorse dati.
com.azure.resourcemanager.storage: supporta la gestione delle risorse Archiviazione di Azure, inclusi i gruppi di risorse e gli account di archiviazione.
Aggiungere le istruzioni seguenti require per caricare i moduli:
@azure/identità: fornisce il supporto per l'autenticazione token di Microsoft Entra in Azure SDK ed è necessario per le connessioni senza password ai servizi di Azure.
@azure/storage-blob: contiene le classi primarie che è possibile usare per lavorare con le risorse di dati Archiviazione BLOB.
@azure/arm-resources: supporta la gestione di risorse e gruppi di risorse di Azure.
@azure/arm-storage: supporta la gestione delle risorse Archiviazione di Azure, inclusi i gruppi di risorse e gli account di archiviazione.
Aggiungere le istruzioni import seguenti:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Informazioni sulla libreria client:
azure-identity: fornisce il supporto per l'autenticazione token di Microsoft Entra in Azure SDK ed è necessario per le connessioni senza password ai servizi di Azure.
azure-storage-blob: contiene le classi primarie che è possibile usare per usare blob Archiviazione risorse dati.
azure-mgmt-resource: supporta la gestione di risorse e gruppi di risorse di Azure.
azure-mgmt-storage: supporta la gestione delle risorse Archiviazione di Azure, inclusi i gruppi di risorse e gli account di archiviazione.
Registrare il provider di risorse Archiviazione con una sottoscrizione
Prima di poterlo usare, è necessario registrare un provider di risorse con la sottoscrizione di Azure. Questo passaggio deve essere eseguito una sola volta per ogni sottoscrizione e si applica solo se il provider di risorse Microsoft.Archiviazione non è attualmente registrato con la sottoscrizione.
È anche possibile usare le librerie di gestione di Azure per controllare lo stato della registrazione e registrare il provider di risorse Archiviazione, come illustrato negli esempi seguenti:
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")
Nota
Per eseguire l'operazione di registrazione, sono necessarie le autorizzazioni per l'azione di controllo degli accessi in base al ruolo di Azure seguente: Microsoft.Archiviazione/register/action. Questa autorizzazione è inclusa nei ruoli Collaboratore e Proprietario .
Query per l'endpoint Archiviazione BLOB
Per recuperare l'endpoint Archiviazione BLOB per un determinato account di archiviazione, è necessario ottenere le proprietà dell'account di archiviazione chiamando l'operazione Get Properties. Gli esempi di codice seguenti usano sia l'accesso ai dati che le librerie di gestione per ottenere un endpoint di Archiviazione BLOB per un account di archiviazione specificato:
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;
}
Per ottenere le proprietà per un account di archiviazione specificato, usare il metodo seguente da un oggetto AzureResourceManager :
Questo metodo restituisce un'interfaccia Archiviazione Account, ovvero una rappresentazione lato client non modificabile dell'account di archiviazione.
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;
}
Questo metodo restituisce un StorageAccount oggetto che rappresenta l'account di archiviazione.
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
Creare un oggetto client usando l'endpoint
Dopo aver creato l'endpoint Archiviazione BLOB per un account di archiviazione, è possibile creare un'istanza di un oggetto client per usare le risorse dati. L'esempio di codice seguente crea un BlobServiceClient oggetto usando l'endpoint recuperato nell'esempio precedente:
// 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 ...
Passaggi successivi
Visualizzare gli esempi di codice completi (GitHub):