Query's uitvoeren op een Blob Storage-eindpunt met behulp van de Azure Storage-beheerbibliotheek
Artikel
Een Blob Storage-eindpunt vormt het basisadres voor alle objecten in een opslagaccount. Wanneer u een opslagaccount maakt, geeft u op welk type eindpunt u wilt gebruiken. Blob Storage ondersteunt twee typen eindpunten:
Een standaardeindpunt bevat de unieke naam van het opslagaccount, samen met een vaste domeinnaam. De indeling van een standaardeindpunt is https://<storage-account>.blob.core.windows.net.
Een Azure DNS-zone-eindpunt (preview) selecteert dynamisch een Azure DNS-zone en wijst dit toe aan het opslagaccount wanneer het wordt gemaakt. De indeling van een Azure DNS-zone-eindpunt is https://<storage-account>.z[00-99].blob.storage.azure.net.
Wanneer uw toepassing een serviceclientobject maakt dat verbinding maakt met Blob Storage-gegevensbronnen, geeft u een URI door die verwijst naar het eindpunt naar de serviceclientconstructor. U kunt de URI-tekenreeks handmatig maken of u kunt tijdens runtime een query uitvoeren op het service-eindpunt met behulp van de Azure Storage-beheerbibliotheek.
Belangrijk
Wanneer u verwijst naar een service-eindpunt in een clienttoepassing, wordt u aangeraden geen afhankelijkheid te maken van een IP-adres in de cache. Het IP-adres van het opslagaccount is onderhevig aan wijzigingen en het vertrouwen op een IP-adres in de cache kan leiden tot onverwacht gedrag.
CNAM's die zijn gekoppeld aan een eindpunt van een opslagaccount, kunnen zonder kennisgeving worden gewijzigd. Uw toepassing mag geen afhankelijkheid hebben van het aantal CNAME-records of de subdomeinen die zijn gekoppeld aan deze CNAME-records.
Daarnaast is het raadzaam om de time-to-live (TTL) van de DNS-record te respecteren en te voorkomen dat u deze overschrijft. Het overschrijven van de DNS-TTL kan leiden tot onverwacht gedrag.
De Azure Storage-beheerbibliotheek biedt programmatische toegang tot de Azure Storage-resourceprovider. De resourceprovider is de Azure Storage-implementatie van Azure Resource Manager. Met de beheerbibliotheek kunnen ontwikkelaars opslagaccounts en accountconfiguratie beheren, evenals beleid voor levenscyclusbeheer, beleid voor objectreplicatie en onveranderbaarheidsbeleid configureren.
In dit artikel leert u hoe u een query uitvoert op een Blob Storage-eindpunt met behulp van de Azure Storage-beheerbibliotheek. Vervolgens gebruikt u dat eindpunt om een BlobServiceClient object te maken om verbinding te maken met Blob Storage-gegevensbronnen.
Uw project instellen
Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.
Pakketten installeren
Installeer pakketten om te werken met de bibliotheken die in dit voorbeeld worden gebruikt.
Voeg azure-sdk-bom toe om een afhankelijkheid te maken van de nieuwste versie van de bibliotheek. Vervang in het volgende codefragment de {bom_version_to_target} tijdelijke aanduiding door het versienummer. Als u azure-sdk-bom gebruikt, hoeft u niet de versie van elke afzonderlijke afhankelijkheid op te geven. Zie de Azure SDK BOM README voor meer informatie over de BOM.
Voeg vervolgens de volgende afhankelijkheidselementen toe aan de groep afhankelijkheden. De azure-identity-afhankelijkheid is nodig voor verbindingen zonder wachtwoord met Azure-services.
Voeg de benodigde using of import instructies toe aan de code. Houd er rekening mee dat de codevoorbeelden functionaliteit tussen bestanden kunnen splitsen, maar in deze sectie worden alle instructies samen weergegeven.
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Clientbibliotheekgegevens:
Azure.Identity: biedt ondersteuning voor Microsoft Entra-tokenverificatie in de Azure SDK en is nodig voor verbindingen zonder wachtwoorden met Azure-services.
Azure.ResourceManager.Storage: ondersteunt het beheer van Azure Storage-resources, waaronder resourcegroepen en opslagaccounts.
Azure.Storage.Blobs: bevat de primaire klassen die u kunt gebruiken om met Blob Storage-gegevensbronnen te werken.
com.azure.identity: biedt ondersteuning voor Microsoft Entra-tokenverificatie in de Azure SDK en is nodig voor verbindingen zonder wachtwoord met Azure-services.
com.azure.storage.blob: bevat de primaire klassen die u kunt gebruiken om te werken met Blob Storage-gegevensbronnen.
@azure/identiteit: biedt ondersteuning voor Microsoft Entra-tokenverificatie in de Azure SDK en is nodig voor verbindingen zonder wachtwoord met Azure-services.
@azure/storage-blob: bevat de primaire klassen die u kunt gebruiken om met Blob Storage-gegevensbronnen te werken.
@azure/arm-resources: ondersteunt het beheer van Azure-resources en -resourcegroepen.
@azure/arm-storage: ondersteunt het beheer van Azure Storage-resources, waaronder resourcegroepen en opslagaccounts.
Voeg de volgende import instructies toe:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Clientbibliotheekgegevens:
azure-identity: biedt ondersteuning voor Microsoft Entra-tokenverificatie in de Azure SDK en is nodig voor verbindingen zonder wachtwoord met Azure-services.
azure-storage-blob: bevat de primaire klassen die u kunt gebruiken om te werken met Blob Storage-gegevensbronnen.
azure-mgmt-resource: ondersteunt het beheer van Azure-resources en -resourcegroepen.
azure-mgmt-storage: ondersteunt het beheer van Azure Storage-resources, waaronder resourcegroepen en opslagaccounts.
De opslagresourceprovider registreren bij een abonnement
Een resourceprovider moet zijn geregistreerd bij uw Azure-abonnement voordat u ermee kunt werken. Deze stap hoeft slechts eenmaal per abonnement te worden uitgevoerd en is alleen van toepassing als de resourceprovider Microsoft.Storage momenteel niet is geregistreerd bij uw abonnement.
U kunt ook de Azure-beheerbibliotheken gebruiken om de registratiestatus te controleren en de opslagresourceprovider te registreren, zoals wordt weergegeven in de volgende voorbeelden:
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")
Notitie
Als u de registratiebewerking wilt uitvoeren, hebt u machtigingen nodig voor de volgende Azure RBAC-actie: Microsoft.Storage/register/action. Deze machtiging is opgenomen in de rollen Inzender en Eigenaar .
Query uitvoeren op het Blob Storage-eindpunt
Als u het Blob Storage-eindpunt voor een bepaald opslagaccount wilt ophalen, moeten we de eigenschappen van het opslagaccount ophalen door de bewerking Eigenschappen ophalen aan te roepen. In de volgende codevoorbeelden worden zowel de gegevenstoegang als beheerbibliotheken gebruikt om een Blob Storage-eindpunt op te halen voor een opgegeven opslagaccount:
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;
}
Als u de eigenschappen voor een opgegeven opslagaccount wilt ophalen, gebruikt u de volgende methode van een AzureResourceManager-object :
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;
}
Gebruik de volgende methode van een StorageManagementClient-object om de eigenschappen voor een opgegeven opslagaccount op te halen:
Met deze methode wordt een StorageAccount object geretourneerd dat het opslagaccount vertegenwoordigt.
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
Een clientobject maken met behulp van het eindpunt
Zodra u het Blob Storage-eindpunt voor een opslagaccount hebt, kunt u een clientobject instantiƫren om met gegevensbronnen te werken. In het volgende codevoorbeeld wordt een BlobServiceClient object gemaakt met behulp van het eindpunt dat we in het vorige voorbeeld hebben opgehaald:
// 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 ...