Zarządzanie kontenerami obiektów blob przy użyciu interfejsu wiersza polecenia platformy Azure

Usługa Microsoft Azure Blob Storage umożliwia przechowywanie dużych ilości danych obiektów bez struktury. Magazyn obiektów blob służy do zbierania lub uwidaczniania danych multimediów, zawartości lub aplikacji dla użytkowników. Ponieważ wszystkie dane obiektów blob są przechowywane w kontenerach, przed rozpoczęciem przekazywania danych należy utworzyć kontener magazynu. Aby dowiedzieć się więcej na temat magazynu obiektów blob, przeczytaj wprowadzenie do usługi Azure Blob Storage.

Interfejs wiersza polecenia platformy Azure to wieloplatformowe środowisko wiersza polecenia platformy Azure do zarządzania zasobami platformy Azure. Można używać go w przeglądarce za pośrednictwem usługi Azure Cloud Shell. Można go również zainstalować w systemie macOS, Linux lub Windows i uruchomić go lokalnie z poziomu wiersza polecenia.

W tym artykule z instrukcjami dowiesz się, jak używać interfejsu wiersza polecenia platformy Azure z powłoką Bash do pracy z obiektami kontenera.

Wymagania wstępne

Aby uzyskać dostęp do usługi Azure Storage, potrzebujesz subskrypcji platformy Azure. Jeśli nie masz jeszcze subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .

Cały dostęp do usługi Azure Storage odbywa się za pośrednictwem konta magazynu. Na potrzeby tego samouczka Szybki start utwórz konto magazynu przy użyciu witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. Aby uzyskać pomoc dotyczącą tworzenia konta magazynu, zobacz Tworzenie konta magazynu.

Przygotowywanie środowiska dla interfejsu wiersza polecenia platformy Azure

  • Zawsze dobrym pomysłem jest zainstalowanie najnowszej wersji interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Autoryzowanie dostępu do usługi Blob Storage

Dostęp do usługi Blob Storage można autoryzować za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu poświadczeń usługi Microsoft Entra lub klucza dostępu do konta magazynu. Korzystanie z poświadczeń firmy Microsoft Entra jest zalecane, a w przykładach tego artykułu są używane wyłącznie identyfikator Microsoft Entra ID.

Polecenia interfejsu wiersza polecenia platformy Azure dla operacji danych w usłudze Blob Storage obsługują --auth-mode parametr, który umożliwia określenie sposobu autoryzowania danej operacji. Ustaw parametr na --auth-mode wartość , aby login autoryzować przy użyciu poświadczeń firmy Microsoft Entra. Aby uzyskać więcej informacji, zobacz Autoryzowanie dostępu do danych obiektów blob lub kolejek za pomocą interfejsu wiersza polecenia platformy Azure.

Uruchom polecenie , login aby otworzyć przeglądarkę i połączyć się z subskrypcją platformy Azure.

az login

Tworzenie kontenera

Aby utworzyć kontener za pomocą interfejsu wiersza polecenia platformy Azure, wywołaj polecenie az storage container create . Poniższy przykład ilustruje trzy opcje tworzenia kontenerów obiektów blob za az storage container create pomocą polecenia . Pierwsze podejście tworzy pojedynczy kontener, podczas gdy pozostałe dwa podejścia używają operacji skryptów powłoki Bash w celu zautomatyzowania tworzenia kontenera.

Aby użyć tego przykładu, podaj wartości zmiennych i upewnij się, że zalogowano się. Pamiętaj, aby zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Approach 1: Create a container
az storage container create \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: Create containers with a loop
for value in {2..5}
do
    az storage container create \
        --name $containerPrefix$value \
        --account-name $storageAccount \
        --auth-mode login
done

# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
    az storage container create \
        --name $container \
        --account-name $storageAccount \
        --auth-mode login
done

Wyświetlanie listy kontenerów

Użyj polecenia , az storage container list aby pobrać listę kontenerów magazynu. Aby zwrócić listę kontenerów, których nazwy zaczynają się od danego ciągu znaków, przekaż ciąg jako wartość parametru --prefix .

Parametr --num-results może służyć do ograniczania liczby kontenerów zwracanych przez żądanie. Usługa Azure Storage ogranicza liczbę kontenerów zwracanych przez operację pojedynczej listy do 5000. Ten limit zapewnia pobieranie możliwych do zarządzania ilości danych. Jeśli liczba zwróconych kontenerów przekracza --num-results wartość lub limit usługi, zwracany jest token kontynuacji. Ten token umożliwia pobranie dowolnej liczby kontenerów przy użyciu wielu żądań.

Możesz również użyć parametru --query , aby wykonać zapytanie JMESPath na wynikach poleceń. JMESPath to język zapytań dla formatu JSON, który umożliwia wybieranie i modyfikowanie danych zwracanych z danych wyjściowych interfejsu wiersza polecenia. Zapytania są wykonywane na danych wyjściowych JSON, zanim będzie można je sformatować. Aby uzyskać więcej informacji, zobacz How to query Azure CLI command output using a JMESPath query (Jak wykonywać zapytania dotyczące poleceń interfejsu wiersza polecenia platformy Azure przy użyciu zapytania JMESPath).

W poniższym przykładzie najpierw wymieniono maksymalną liczbę kontenerów (podlega limitowi usługi). Następnie zostanie wyświetlona lista trzech kontenerów, których nazwy zaczynają się od prefiksu kontenera, podając wartości parametrów --num-results i --prefix . Na koniec jeden kontener jest wyświetlany przez podanie znanej nazwy kontenera do parametru --prefix .

Dowiedz się więcej na temat listy az storage container list.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"

# Approach 1: List maximum containers
az storage container list \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: List a defined number of named containers
az storage container list \
    --prefix $containerPrefix \
    --num-results $numResults \
    --account-name $storageAccount \
    --auth-mode login

# Approach 3: List an individual container
az storage container list \
    --prefix $containerPrefix \
    --query "[?name=='$containerName']" \
    --account-name $storageAccount \
    --auth-mode login

Odczytywanie właściwości i metadanych kontenera

Kontener uwidacznia zarówno właściwości systemu, jak i metadane zdefiniowane przez użytkownika. Właściwości systemu istnieją w każdym zasobie magazynu obiektów blob. Niektóre właściwości są tylko do odczytu, podczas gdy inne mogą być odczytywane lub ustawiane. Pod osłonami niektóre właściwości systemu są mapowanie na niektóre standardowe nagłówki HTTP.

Metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość określonej dla zasobu magazynu obiektów blob. Za pomocą metadanych można przechowywać dodatkowe wartości z zasobem. Wartości metadanych są przeznaczone tylko do własnych celów i nie mają wpływu na zachowanie zasobu.

Właściwości kontenera

Aby wyświetlić właściwości kontenera za pomocą interfejsu wiersza polecenia platformy Azure, wywołaj polecenie az storage container show .

W poniższym przykładzie pierwsze podejście wyświetla właściwości pojedynczego nazwanego kontenera. Następnie pobiera wszystkie kontenery z prefiksem demo-container- i iteruje je, wyświetlając ich właściwości. Pamiętaj, aby zastąpić wartości symboli zastępczych własnymi wartościami.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"

# Show a named container's properties
az storage container show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# List several containers and show their properties
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

for row in $containerList
do
  tmpRow=$(echo $row | sed -e 's/\r//g')
  az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done

Odczytywanie i zapisywanie metadanych kontenera

Użytkownicy, którzy mają wiele tysięcy obiektów na koncie magazynu, mogą szybko zlokalizować określone kontenery na podstawie ich metadanych. Aby odczytać metadane, użyjesz az storage container metadata show polecenia . Aby zaktualizować metadane, należy wywołać az storage container metadata update polecenie . Metoda akceptuje tylko pary klucz-wartość oddzielona spacją. Aby uzyskać więcej informacji, zobacz dokumentację az storage container metadata .

Pierwszy przykład poniżej aktualizuje, a następnie pobiera metadane nazwanego kontenera. Drugi przykład iteruje listę kontenerów pasujących do -prefix wartości. Kontenery z nazwami zawierającymi liczby parzystych mają zestaw metadanych z wartościami zawartymi w zmiennej metadanych .

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Create metadata string
metadata="key=value pie=delicious"

# Update named container metadata
az storage container metadata update \
    --name $containerName \
    --metadata $metadata \
    --account-name $storageAccount \
    --auth-mode login

# Display metadata
az storage container metadata show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Get list of containers
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

# Update and display metadata
for row in $containerList
do
  #Get the container's number
  tmpName=$(echo $row | sed -e 's/\r//g')
  if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
  then
    az storage container metadata update \
        --name $tmpName \
        --metadata $metadata \
        --account-name $storageAccount \
        --auth-mode login
    
    echo $tmpName

    az storage container metadata show \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login    
  fi
done

Usuwanie kontenerów

W zależności od przypadku użycia można usunąć pojedynczy kontener lub grupę kontenerów za az storage container delete pomocą polecenia . Podczas usuwania listy kontenerów należy użyć operacji warunkowych, jak pokazano w poniższych przykładach.

Ostrzeżenie

Uruchomienie poniższych przykładów może trwale usunąć kontenery i obiekty blob. Firma Microsoft zaleca włączenie usuwania nietrwałego kontenera w celu ochrony kontenerów i obiektów blob przed przypadkowym usunięciem. Aby uzyskać więcej informacji, zobacz Usuwanie nietrwałe dla kontenerów.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Delete a single named container
az storage container delete \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Delete containers by iterating a loop
list=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)
for row in $list
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login
done

Jeśli masz włączone usuwanie nietrwałe kontenera dla konta magazynu, możliwe jest pobranie kontenerów, które zostały usunięte. Jeśli opcja ochrony danych usuwania nietrwałego konta magazynu jest włączona, --include-deleted parametr zwróci kontenery usunięte w skojarzonym okresie przechowywania. Parametr --include-deleted może służyć tylko do zwracania kontenerów w przypadku użycia z parametrem --prefix . Aby dowiedzieć się więcej na temat usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla kontenerów .

Skorzystaj z poniższego przykładu, aby pobrać listę kontenerów usuniętych w skojarzonym okresie przechowywania konta magazynu.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"

# Retrieve a list of containers including those recently deleted
az storage container list \
    --prefix $containerPrefix \
    --include-deleted \
    --account-name $storageAccount\
    --auth-mode login

Przywracanie kontenera usuniętego nietrwale

Jak wspomniano w sekcji Wyświetlanie kontenerów , możesz skonfigurować opcję ochrony danych usuwania nietrwałego na koncie magazynu. Po włączeniu można przywrócić kontenery usunięte w skojarzonym okresie przechowywania. Zanim będzie można skorzystać z tego przykładu, musisz włączyć usuwanie nietrwałe i skonfigurować je na co najmniej jednym z kont magazynu.

W poniższych przykładach wyjaśniono, jak przywrócić kontener usunięty nietrwale za az storage container restore pomocą polecenia . Musisz podać wartości parametrów --name i --version , aby upewnić się, że została przywrócona poprawna wersja kontenera. Jeśli nie znasz numeru wersji, możesz użyć az storage container list polecenia , aby pobrać go, jak pokazano w pierwszym przykładzie. Drugi przykład umożliwia znalezienie i przywrócenie wszystkich usuniętych kontenerów na określonym koncie magazynu.

Aby dowiedzieć się więcej na temat opcji ochrony danych usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla kontenerów .

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"

# Restore an individual named container
containerVersion=$(az storage container list \
    --account-name $storageAccount \
    --query "[?name=='$containerName'].[version]" \
    --auth-mode login \
    --output tsv \
    --include-deleted | sed -e 's/\r//g')

az storage container restore \
    --name $containerName \
    --deleted-version $containerVersion \
    --account-name $storageAccount \
    --auth-mode login

# Restore a list of deleted containers
containerList=$(az storage container list \
    --account-name $storageAccount \
    --include-deleted \
    --auth-mode login \
    --query "[?deleted].{name:name,version:version}" \
    -o json)

for row in $(echo "${containerList}" | jq -c '.[]' )
do
    tmpName=$(echo $row | jq -r '.name')
    tmpVersion=$(echo $row | jq -r '.version')
    az storage container restore \
        --account-name $storageAccount \
        --name $tmpName \
        --deleted-version $tmpVersion \
        --auth-mode login
done

Uzyskiwanie sygnatury dostępu współdzielonego dla kontenera

Sygnatura dostępu współdzielonego (SAS) zapewnia delegowany dostęp do zasobów platformy Azure. Sygnatura dostępu współdzielonego zapewnia szczegółową kontrolę nad sposobem uzyskiwania dostępu do danych przez klienta. Można na przykład określić, które zasoby są dostępne dla klienta. Można również ograniczyć typy operacji, które klient może wykonać, i określić interwał, dla którego sygnatura dostępu współdzielonego jest prawidłowa.

Sygnatura dostępu współdzielonego jest często używana do zapewnienia tymczasowego i bezpiecznego dostępu do klienta, który normalnie nie ma uprawnień. Aby wygenerować sygnaturę dostępu współdzielonego usługi lub konta, musisz podać wartości parametrów --account-name i --account-key . Przykładem tego scenariusza jest usługa, która umożliwia użytkownikom odczytywanie i zapisywanie własnych danych na koncie magazynu.

Usługa Azure Storage obsługuje trzy typy sygnatur dostępu współdzielonego: delegowanie użytkownika, usługę i sygnaturę dostępu współdzielonego konta. Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz artykuł Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego.

Uwaga

Każdy klient, który posiada prawidłową sygnaturę dostępu współdzielonego, może uzyskać dostęp do danych na koncie magazynu zgodnie z zezwoleniem na ten sygnaturę dostępu współdzielonego. Ważne jest, aby chronić sygnaturę dostępu współdzielonego przed złośliwym lub niezamierzonym użyciem. Użyj uznania w dystrybucji sygnatury dostępu współdzielonego i zaplanuj odwołanie naruszonej sygnatury dostępu współdzielonego.

Poniższy przykład ilustruje proces konfigurowania sygnatury dostępu współdzielonego usługi dla określonego kontenera az storage container generate-sas przy użyciu polecenia . Ponieważ generuje sygnaturę dostępu współdzielonego usługi, w przykładzie najpierw pobierany jest klucz konta magazynu, który zostanie przekazany jako --account-key wartość.

W przykładzie zostanie skonfigurowana sygnatura dostępu współdzielonego z czasem rozpoczęcia i wygaśnięcia oraz protokołem. Określi również uprawnienia usuwania, odczytu, zapisu i listy w sygnaturze dostępu współdzielonego przy użyciu parametru --permissions . Pełną tabelę uprawnień można uzyskać w artykule Tworzenie sygnatury dostępu współdzielonego usługi .

Skopiuj i wklej wartość tokenu SAS obiektu blob w bezpiecznej lokalizacji. Będzie on wyświetlany tylko raz i nie można go pobrać po zamknięciu powłoki Bash. Aby utworzyć adres URL sygnatury dostępu współdzielonego, dołącz token SAS (URI) do adresu URL usługi magazynu.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`

accountKey=$(az storage account keys list \
    --account-name $storageAccount \
    --query "[?permissions == 'FULL'].[value]" \
    --output tsv)

accountKey=$( echo $accountKey | cut -d' ' -f1 )
 
az storage container generate-sas \
    --name $containerName \
    --https-only \
    --permissions dlrw \
    --expiry $expiry \
    --account-key $accountKey \
    --account-name $storageAccount

Uwaga

Token SAS zwrócony przez interfejs wiersza polecenia platformy Azure nie zawiera znaku ogranicznika ('?') dla ciągu zapytania adresu URL. Jeśli dołączasz token SAS do adresu URL zasobu, pamiętaj, aby dołączyć znak ogranicznika do adresu URL zasobu przed dołączeniem tokenu SAS.

Następne kroki

W tym artykule z instrukcjami przedstawiono sposób zarządzania kontenerami w usłudze Blob Storage. Aby dowiedzieć się więcej na temat pracy z usługą Blob Storage przy użyciu interfejsu wiersza polecenia platformy Azure, wybierz opcję poniżej.