Dotazování na koncový bod služby Blob Storage pomocí knihovny pro správu služby Azure Storage
Článek
Koncový bod služby Blob Storage tvoří základní adresu všech objektů v rámci účtu úložiště. Při vytváření účtu úložiště určíte, jaký typ koncového bodu chcete použít. Blob Storage podporuje dva typy koncových bodů:
Standardní koncový bod obsahuje jedinečný název účtu úložiště spolu s pevným názvem domény. Formát standardního koncového bodu je https://<storage-account>.blob.core.windows.net.
Koncový bod zóny Azure DNS (Preview) dynamicky vybere zónu Azure DNS a přiřadí ji k účtu úložiště při jeho vytvoření. Formát koncového bodu zóny Azure DNS je https://<storage-account>.z[00-99].blob.storage.azure.net.
Když vaše aplikace vytvoří objekt klienta služby, který se připojuje k datovým prostředkům služby Blob Storage, předáte identifikátor URI odkazující na koncový bod do konstruktoru klienta služby. Řetězec identifikátoru URI můžete sestavit ručně nebo můžete za běhu zadat dotaz na koncový bod služby pomocí knihovny pro správu služby Azure Storage.
Důležité
Při odkazování na koncový bod služby v klientské aplikaci se doporučuje vyhnout se závislosti na IP adrese uložené v mezipaměti. IP adresa účtu úložiště se může změnit a spoléhat se na IP adresu uloženou v mezipaměti může vést k neočekávanému chování.
CNAMEs, které jsou přidružené ke koncovému bodu účtu úložiště, se můžou bez předchozího upozornění změnit. Vaše aplikace by neměla záviset na počtu záznamů CNAME ani poddoménách přidružených k těmto záznamům CNAME.
Kromě toho doporučujeme dodržovat hodnotu TTL (Time to Live) záznamu DNS a vyhnout se jeho přepsání. Přepsání hodnoty TTL DNS může vést k neočekávanému chování.
Knihovna pro správu Azure Storage poskytuje programový přístup k poskytovateli prostředků Azure Storage. Poskytovatel prostředků je implementace Azure Storage Azure Resource Manageru. Knihovna pro správu umožňuje vývojářům spravovat účty úložiště a konfiguraci účtu a také konfigurovat zásady správy životního cyklu, zásady replikace objektů a zásady neměnnosti.
V tomto článku se dozvíte, jak dotazovat koncový bod služby Blob Storage pomocí knihovny pro správu služby Azure Storage. Tento koncový bod pak použijete k vytvoření objektu BlobServiceClient pro připojení k datovým prostředkům blob Storage.
Nastavení projektu
Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.
Instalace balíčků
Nainstalujte balíčky pro práci s knihovnami použitými v tomto příkladu.
Přidejte azure-sdk-bom , abyste mohli využívat závislost na nejnovější verzi knihovny. V následujícím fragmentu {bom_version_to_target} kódu nahraďte zástupný symbol číslem verze. Použití azure-sdk-bom vám umožní určit verzi jednotlivých závislostí. Další informace o kusovníku najdete v souboru README pro Azure SDK.
Přidejte do kódu potřebné using direktivy nebo import direktivy. Všimněte si, že příklady kódu mohou rozdělit funkce mezi soubory, ale v této části jsou všechny direktivy uvedeny společně.
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
Informace o klientské knihovně:
Azure.Identity: Poskytuje podporu ověřování tokenů Microsoft Entra napříč sadou Azure SDK a je potřeba pro připojení bez hesla ke službám Azure.
@azure/arm-storage: Podporuje správu prostředků Azure Storage, včetně skupin prostředků a účtů úložiště.
Přidejte následující příkazy import:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Informace o klientské knihovně:
azure-identity: Poskytuje podporu ověřování tokenů Microsoft Entra napříč sadou Azure SDK a je potřeba pro připojení bez hesla ke službám Azure.
azure-storage-blob: Obsahuje primární třídy, které můžete použít pro práci s datovými prostředky služby Blob Storage.
azure-mgmt-storage: Podporuje správu prostředků Azure Storage, včetně skupin prostředků a účtů úložiště.
Registrace poskytovatele prostředků úložiště v předplatném
Než s ním budete moct pracovat, musí být poskytovatel prostředků zaregistrovaný ve vašem předplatném Azure. Tento krok je potřeba provést jenom jednou pro každé předplatné a platí jenom v případě, že poskytovatel prostředků Microsoft.Storage není aktuálně zaregistrovaný ve vašem předplatném.
Knihovny pro správu Azure můžete také použít ke kontrole stavu registrace a registraci poskytovatele prostředků úložiště, jak je znázorněno v následujících příkladech:
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")
Poznámka:
K provedení operace registrace budete potřebovat oprávnění pro následující akci Azure RBAC: Microsoft.Storage/register/action. Toto oprávnění je součástí rolí Přispěvatel a Vlastník .
Dotaz na koncový bod služby Blob Storage
K načtení koncového bodu služby Blob Storage pro daný účet úložiště potřebujeme získat vlastnosti účtu úložiště voláním operace Získat vlastnosti . Následující ukázky kódu používají k získání koncového bodu služby Blob Storage pro zadaný účet úložiště jak přístup k datům, tak knihovny pro správu:
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;
}
K získání vlastností pro zadaný účet úložiště použijte následující metodu z objektu 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;
}
Pokud chcete získat vlastnosti pro zadaný účet úložiště, použijte následující metodu z objektu StorageManagementClient :
Tato metoda vrátí StorageAccount objekt, který představuje účet úložiště.
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
Vytvoření objektu klienta pomocí koncového bodu
Jakmile budete mít koncový bod služby Blob Storage pro účet úložiště, můžete vytvořit instanci klientského objektu pro práci s datovými prostředky. Následující ukázka kódu vytvoří BlobServiceClient objekt pomocí koncového bodu, který jsme získali v předchozím příkladu:
// 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 ...