Udostępnij za pomocą


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, należy utworzyć kontener pamięci, zanim rozpocznie się przesyłanie danych. Aby dowiedzieć się więcej na temat magazynu obiektów blob, przeczytaj wprowadzenie do usługi Azure Blob Storage.

Azure CLI to wieloplatformowe środowisko wiersza polecenia do zarządzania zasobami 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 dowiesz się, jak używać Azure CLI w połączeniu z powłoką Bash do zarządzania obiektami kontenerowymi.

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 magazynowania. Na potrzeby tego szybkiego startu utwórz konto magazynu w portalu Azure, programie Azure PowerShell lub interfejsie wiersza polecenia platformy Azure. Aby uzyskać pomoc dotyczącą tworzenia konta magazynowego, zobacz Tworzenie konta magazynowego.

Przygotuj swoje środowisko dla Azure CLI

  • 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

Możesz autoryzować dostęp do Blob storage z poziomu interfejsu wiersza polecenia Azure, korzystając z poświadczeń Microsoft Entra lub klucza dostępu do konta magazynowego. Zaleca się korzystanie z poświadczeń Microsoft Entra, a w przykładach tego artykułu używane jest wyłącznie Microsoft Entra ID.

Polecenia Azure CLI dla operacji danych w usłudze Blob Storage obsługują parametr --auth-mode, który umożliwia określenie sposobu autoryzowania danej operacji. Ustaw parametr --auth-mode na login, aby autoryzować przy użyciu poświadczeń 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 przy użyciu polecenia az storage container create. 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ę listowania 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 kontenerów az storage.

#!/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 pamięci masowej 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ą mapowane na standardowe nagłówki HTTP.

Metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość, które określasz dla zasobu przechowywania 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 zastępcze 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 w swoim koncie przechowywania, 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ść oddzielone 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, które pasują do wartości -prefix. 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 bloby. Microsoft zaleca włączenie miękkiego usuwania kontenerów, aby chronić kontenery i bloby przed przypadkowym usunięciem. Aby uzyskać więcej informacji, zobacz Miękkie usuwanie 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 miękkie usuwanie kontenera dla konta przechowywania, możliwe jest pobranie kontenerów, które zostały usunięte. Jeśli opcja ochrony danych dla miękkiego usuwania konta magazynu jest włączona, parametr --include-deleted zwróci kontenery usunięte w skojarzonym okresie retencji. 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 miękkiego usuwania, przeczytaj artykuł Miękkie usuwanie 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 tymczasowo usuniętego

Jak wspomniano w sekcji Lista kontenerów, możesz skonfigurować opcję ochrony danych przy użyciu miękkiego usuwania w Twoim koncie magazynowym. Po włączeniu można przywrócić kontenery usunięte w skojarzonym okresie przechowywania. Zanim będziesz mógł skorzystać z tego przykładu, musisz włączyć miękkie usuwanie i skonfigurować je na co najmniej jednym z kont magazynowego.

W poniższych przykładach wyjaśniono, jak przywrócić miękko usunięty kontener za pomocą polecenia az storage container restore. 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 poprzez miękkie usuwanie, zapoznaj się z artykułem Miękkie usuwanie 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 dokładną kontrolę nad tym, w jaki sposób klient może uzyskiwać dostęp do danych. 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ć okres, przez który sygnatura dostępu współdzielonego (SAS) 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 ich własnych danych na koncie magazynowym.

Usługa Azure Storage obsługuje trzy typy podpisów wspólnego dostępu: upoważnienie użytkownika, podpis serwisowy i podpis 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 .

Ostrzeżenie

Każdy klient, który posiada prawidłową sygnaturę dostępu współdzielonego, może uzyskać dostęp do danych na koncie magazynowym, zgodnie z uprawnieniami tej sygnatury. Ważne jest, aby chronić SAS (Podpis 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 usługi SAS (Service Shared Access Signature) dla określonego kontenera przy użyciu polecenia az storage container generate-sas. Ponieważ generowany jest token SAS dla usługi, w przykładzie najpierw pobierany jest klucz konta magazynu, który zostanie użyty jako wartość --account-key.

W przykładzie zostanie skonfigurowany Shared Access Signature (SAS) z ustawieniami początkowego czasu, czasu wygaśnięcia oraz protokołem. Określi również uprawnienia do usuwania, odczytu, zapisu i listowania w udostępnionej sygnaturze dostępu (SAS) za pomocą parametru --permissions. Można odnieść się do pełnej tabeli uprawnień w artykule Tworzenie sygnatury usługi SAS.

Skopiuj wartość tokenu SAS obiektu blob i wklej ją w bezpiecznym miejscu. Będzie on wyświetlany tylko raz i nie można go pobrać po zamknięciu powłoki Bash. Aby utworzyć adres URL SAS, 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 / Notatka

Token SAS zwrócony przez Azure CLI nie zawiera znaku ogranicznika ('?') dla parametrów zapytania 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.

Dalsze 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.