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 Blob Storage stanowi podstawowy adres dla wszystkich obiektów w koncie magazynowym. Podczas tworzenia konta pamięci należy określić typ punktu końcowego, którego zamierzasz 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 Azure DNS (wersja próbna) dynamicznie wybiera strefę Azure DNS i przypisuje ją do konta magazynowego przy jego tworzeniu. 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 CNAME skojarzone z punktem końcowym konta magazynowego 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 TTL 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 azure-sdk-bom, aby skorzystać z zależności od najnowszej wersji biblioteki. W poniższym fragmencie kodu zastąp {bom_version_to_target} symbol zastępczy numerem wersji. Korzystanie z azure-sdk-bom eliminuje konieczność określania wersji każdej poszczególnej zależności. Aby dowiedzieć się więcej na temat BOM, zobacz 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 dyrektywy using 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/identity: zapewnia obsługę uwierzytelniania tokenu Microsoft Entra w całym zestawie Azure SDK i jest niezbędny do połączeń bez użycia 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 korzystają zarówno z bibliotek dostępu do danych, jak i bibliotek zarządzania, aby uzyskać punkt końcowy usługi Blob Storage dla określonego konta magazynowego.
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;
}
Aby uzyskać właściwości określonego konta magazynu, użyj następującej metody z obiektu AzureResourceManager :
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;
}
Aby uzyskać właściwości określonego konta magazynu, użyj następującej metody z obiektu StorageManagementClient :
Ta metoda zwraca StorageAccount obiekt reprezentujący konto magazynowe.
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 uzyskaniu punktu końcowego Blob Storage dla konta przechowywania, można zainicjować obiekt klienta, aby pracować z zasobami danych. Poniższy przykładowy kod tworzy obiekt BlobServiceClient 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 ...