Wykonywanie zapytań dotyczących punktu końcowego usługi Blob Storage przy użyciu biblioteki zarządzania usługi Azure Storage
Artykuł
Punkt końcowy usługi Blob Storage stanowi podstawowy adres dla wszystkich obiektów na koncie magazynu. Podczas tworzenia konta magazynu należy określić typ punktu końcowego, którego chcesz użyć. Usługa Blob Storage obsługuje dwa typy punktów końcowych:
Standardowy punkt końcowy zawiera unikatową nazwę konta magazynu wraz ze stałą nazwą domeny. Format standardowego punktu końcowego to https://<storage-account>.blob.core.windows.net.
Punkt końcowy strefy DNS platformy Azure (wersja zapoznawcza) dynamicznie wybiera strefę usługi Azure DNS i przypisuje ją do konta magazynu podczas jego tworzenia. Format punktu końcowego strefy DNS platformy Azure to https://<storage-account>.z[00-99].blob.storage.azure.net.
Gdy aplikacja tworzy obiekt klienta usługi łączący się z zasobami danych usługi Blob Storage, przekazujesz identyfikator URI odwołujący się do punktu końcowego do konstruktora klienta usługi. Możesz utworzyć ciąg identyfikatora URI ręcznie lub wykonać zapytanie dotyczące punktu końcowego usługi w czasie wykonywania przy użyciu biblioteki zarządzania usługi Azure Storage.
Ważne
W przypadku odwoływania się do punktu końcowego usługi w aplikacji klienckiej zaleca się unikanie zależności od buforowanego adresu IP. Adres IP konta magazynu może ulec zmianie, a poleganie na buforowanym adresie IP może spowodować nieoczekiwane zachowanie.
Rekordy CNAM skojarzone z punktem końcowym konta magazynu mogą ulec zmianie bez powiadomienia. Aplikacja nie powinna mieć zależności od liczby rekordów CNAME ani domen podrzędnych skojarzonych z tymi rekordami CNAME.
Ponadto zaleca się honorowanie czasu wygaśnięcia (TTL) rekordu DNS i unikanie zastępowania go. Zastąpienie czasu wygaśnięcia DNS może spowodować nieoczekiwane zachowanie.
Biblioteka zarządzania usługi Azure Storage zapewnia programowy dostęp do dostawcy zasobów usługi Azure Storage. Dostawca zasobów to implementacja usługi Azure Storage usługi Azure Resource Manager. Biblioteka zarządzania umożliwia deweloperom zarządzanie kontami magazynu i konfiguracją konta, a także konfigurowanie zasad zarządzania cyklem życia, zasad replikacji obiektów i zasad niezmienności.
Z tego artykułu dowiesz się, jak wykonywać zapytania dotyczące punktu końcowego usługi Blob Storage przy użyciu biblioteki zarządzania usługi Azure Storage. Następnie użyjesz tego punktu końcowego do utworzenia BlobServiceClient obiektu w celu nawiązania połączenia z zasobami danych usługi Blob Storage.
konfigurowanie projektu
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj pakiety do pracy z bibliotekami używanymi w tym przykładzie.
Dodaj element azure-sdk-bom , aby pobrać zależność od najnowszej wersji biblioteki. W poniższym fragmencie kodu zastąp {bom_version_to_target} symbol zastępczy numerem wersji. Korzystanie z zestawu azure-sdk-bom uniemożliwia określenie wersji poszczególnych zależności. Aby dowiedzieć się więcej na temat modelu BOM, zobacz ARTYKUŁ README zestawu Azure SDK BOM.
Następnie dodaj następujące elementy zależności do grupy zależności. Zależność azure-identity jest wymagana w przypadku połączeń bez hasła z usługami platformy Azure.
Dodaj niezbędne using dyrektywy lub import do kodu. Należy pamiętać, że przykłady kodu mogą dzielić funkcje między plikami, ale w tej sekcji wszystkie dyrektywy są wymienione razem.
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Informacje o bibliotece klienta:
Azure.Identity: zapewnia obsługę uwierzytelniania tokenów entra firmy Microsoft w zestawie Azure SDK i jest wymagany do połączeń bez hasła z usługami platformy Azure.
Azure.ResourceManager.Storage: obsługuje zarządzanie zasobami usługi Azure Storage, w tym grupami zasobów i kontami magazynu.
Azure.Storage.Blobs: zawiera klasy podstawowe, których można użyć do pracy z zasobami danych usługi Blob Storage.
com.azure.identity: zapewnia obsługę uwierzytelniania tokenów entra firmy Microsoft w zestawie Azure SDK i jest wymagany do połączeń bez hasła z usługami platformy Azure.
com.azure.storage.blob: zawiera klasy podstawowe, których można użyć do pracy z zasobami danych usługi Blob Storage.
@azure/tożsamość: zapewnia obsługę uwierzytelniania tokenów entra firmy Microsoft w zestawie Azure SDK i jest wymagany do połączeń bez hasła z usługami platformy Azure.
@azure/storage-blob: zawiera klasy podstawowe, których można użyć do pracy z zasobami danych usługi Blob Storage.
@azure/arm-resources: obsługuje zarządzanie zasobami i grupami zasobów platformy Azure.
@azure/arm-storage: obsługuje zarządzanie zasobami usługi Azure Storage, w tym grupami zasobów i kontami magazynu.
Dodaj następujące instrukcje import:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Informacje o bibliotece klienta:
azure-identity: zapewnia obsługę uwierzytelniania tokenów entra firmy Microsoft w zestawie Azure SDK i jest wymagany do połączeń bez hasła z usługami platformy Azure.
azure-storage-blob: zawiera klasy podstawowe, których można użyć do pracy z zasobami danych usługi Blob Storage.
azure-mgmt-resource: obsługuje zarządzanie zasobami i grupami zasobów platformy Azure.
azure-mgmt-storage: obsługuje zarządzanie zasobami usługi Azure Storage, w tym grupami zasobów i kontami magazynu.
Rejestrowanie dostawcy zasobów usługi Storage przy użyciu subskrypcji
Przed rozpoczęciem pracy z dostawcą zasobów należy zarejestrować się w ramach subskrypcji platformy Azure. Ten krok należy wykonać tylko raz na subskrypcję i ma zastosowanie tylko wtedy, gdy dostawca zasobów Microsoft.Storage nie jest obecnie zarejestrowany w ramach subskrypcji.
Możesz również użyć bibliotek zarządzania platformy Azure, aby sprawdzić stan rejestracji i zarejestrować dostawcę zasobów usługi Storage, jak pokazano w poniższych przykładach:
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")
Uwaga
Aby wykonać operację rejestrowania, musisz mieć uprawnienia do następującej akcji RBAC platformy Azure: Microsoft.Storage/register/action. To uprawnienie jest uwzględniane w rolach Współautor i Właściciel .
Zapytanie dotyczące punktu końcowego usługi Blob Storage
Aby pobrać punkt końcowy usługi Blob Storage dla danego konta magazynu, musimy pobrać właściwości konta magazynu, wywołując operację Pobierz właściwości . Poniższe przykłady kodu używają bibliotek dostępu do danych i zarządzania, aby uzyskać punkt końcowy usługi Blob Storage dla określonego konta magazynu:
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;
}
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;
}
Ta metoda zwraca StorageAccount obiekt reprezentujący konto magazynu.
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
Tworzenie obiektu klienta przy użyciu punktu końcowego
Po utworzeniu punktu końcowego usługi Blob Storage dla konta magazynu można utworzyć wystąpienie obiektu klienta, aby pracować z zasobami danych. Poniższy przykładowy kod tworzy BlobServiceClient obiekt przy użyciu punktu końcowego pobranego we wcześniejszym przykładzie:
// 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 ...