Cloud-Dateiübertragungen effizient mit Azure CLI automatisieren
Die Azure CLI ist ein vielseitiges Werkzeug, mit dem Sie Dateiübertragungen automatisieren und Azure Storage effizient verwalten. Dieser Leitfaden bietet praktische Beispiele und Schritt-für-Schritt-Anleitungen, um Ihre Cloud-Workflows zu optimieren.
Installation und Einrichtung
Installieren Sie die Azure CLI auf Ihrem System. Führen Sie die Beispiele nach der Installation in Bash aus (verwenden Sie unter Windows WSL oder Azure Cloud Shell). Für die Kontoerstellung und den Speicher fallen Azure-Gebühren an; nutzen Sie eine dedizierte Test-Ressourcengruppe und nicht sensible Beispieldateien.
Unter Windows
winget install -e --id Microsoft.AzureCLI
Unter macOS
brew install azure-cli
Unter Linux (Ubuntu/Debian)
# Install pre-requisites
sudo apt-get update
sudo apt-get install -y ca-certificates curl apt-transport-https lsb-release gnupg
# Download and install the Microsoft signing key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc |
gpg --dearmor |
sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg
# Add the Azure CLI software repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" |
sudo tee /etc/apt/sources.list.d/azure-cli.list
# Update repository information and install the azure-cli package
sudo apt-get update
sudo apt-get install azure-cli
Authentifizieren Sie sich nach der Installation bei Azure:
az login
Für in Azure gehostete Automatisierung empfiehlt sich eine zugewiesene verwaltete Identität. Ersetzen Sie auf dem Azure-Host mit dieser Identität die interaktive Anmeldung durch:
az login --identity
Überprüfen Sie die Installation und prüfen Sie die Version:
az --version
Ein Speicherkonto erstellen
Wählen Sie das gewünschte Abonnement mit az account set --subscription YOUR_SUBSCRIPTION_ID aus. Setzen Sie diese
Variablen in derselben Bash-Sitzung und wählen Sie dabei einen global eindeutigen
Speicherkontonamen mit 3-24 Kleinbuchstaben und Ziffern:
export RESOURCE_GROUP="file-transfer-demo"
export STORAGE_ACCOUNT="youruniquestorageaccount"
export CONTAINER_NAME="transfers"
export SOURCE_DIR="/path/to/local/files"
location="eastus"
Das folgende Konto erlaubt authentifizierten HTTPS-Zugriff von Ihrer Arbeitsstation und verweigert zugleich anonymen Blob-Zugriff sowie die Shared-Key-Authentifizierung. Es macht den Netzwerkendpunkt nicht privat. Konfigurieren Sie für ein ausschließlich privates Konto zuerst einen erreichbaren privaten Endpunkt und DNS; wenn Sie den öffentlichen Netzwerkzugriff vorher deaktivieren, blockiert das die späteren Übertragungen. Siehe die CLI-Referenz für Speicherkonten.
# Create resource group
az group create --name "$RESOURCE_GROUP" --location "$location"
# Create storage account with security settings
az storage account create \
--name "$STORAGE_ACCOUNT" \
--resource-group "$RESOURCE_GROUP" \
--location "$location" \
--kind StorageV2 \
--sku Standard_LRS \
--min-tls-version TLS1_2 \
--allow-blob-public-access false \
--allow-shared-key-access false \
--public-network-access Enabled \
--https-only true \
--encryption-services blob
Authentifizierung mit Microsoft Entra ID verwenden
Das Erstellen eines Kontos gewährt noch keinen Zugriff auf Blob-Daten. Eine Person mit
Administratorrechten für Rollenzuweisungen muss dem interaktiven Benutzer die Rolle
Storage Blob Data Contributor für dieses Konto zuweisen. Weisen
Sie die Rolle für Automatisierung stattdessen der Prinzipal-Objekt-ID der verwalteten Identität zu,
mit dem Prinzipaltyp ServicePrincipal. Rollenzuweisungen können einige Minuten
benötigen, bis sie wirksam werden.
storage_account_id=$(az storage account show \
--name "$STORAGE_ACCOUNT" --resource-group "$RESOURCE_GROUP" --query id --output tsv)
user_id=$(az ad signed-in-user show --query id --output tsv)
# For the interactive user logged in above
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee-object-id "$user_id" \
--assignee-principal-type User \
--scope "$storage_account_id"
Dateien mit der Azure CLI übertragen
Dateien hochladen
Laden Sie Dateien mit der Microsoft-Entra-ID-Authentifizierung hoch:
# Create a container
az storage container create \
--name "$CONTAINER_NAME" \
--account-name "$STORAGE_ACCOUNT" \
--auth-mode login
# Upload a file
az storage blob upload \
--container-name "$CONTAINER_NAME" \
--file /path/to/local/file.txt \
--name remote-file.txt \
--account-name "$STORAGE_ACCOUNT" \
--overwrite false \
--auth-mode login
Dateien herunterladen
Rufen Sie Dateien mit der Microsoft-Entra-ID-Authentifizierung ab:
az storage blob download \
--container-name "$CONTAINER_NAME" \
--name remote-file.txt \
--file /path/to/local/destination.txt \
--account-name "$STORAGE_ACCOUNT" \
--overwrite false \
--auth-mode login
Stapelweise Dateiübertragungen mit der Azure CLI automatisieren
Speichern Sie dieses Bash-Skript und führen Sie es aus, nachdem Sie die obige Konfiguration exportiert und den Container erstellt haben. Es berücksichtigt versteckte reguläre Dateien, überspringt Verzeichnisse und symbolische Links und unternimmt höchstens drei Versuche pro Datei. Es ersetzt niemals vorhandene Blobs und gibt einen Status ungleich null zurück, wenn ein Upload fehlschlägt, einschließlich einer Namenskollision. Verwenden Sie für einen neuen Stapel einen neuen Container oder eindeutige Namen. Ein Wiederholungsversuch nach einer unklaren Antwort ist kein Beweis dafür, dass die frühere Anfrage fehlgeschlagen ist: Prüfen Sie das entfernte Objekt, bevor Sie sich für ein Ersetzen entscheiden.
#!/bin/bash
set -euo pipefail
shopt -s nullglob dotglob
: "${SOURCE_DIR:?Set SOURCE_DIR}"
: "${CONTAINER_NAME:?Set CONTAINER_NAME}"
: "${STORAGE_ACCOUNT:?Set STORAGE_ACCOUNT}"
if [ ! -d "$SOURCE_DIR" ]; then
printf 'Source directory does not exist\n' >&2
exit 1
fi
failed=0
max_retries=3
for file in "$SOURCE_DIR"/*; do
[ -f "$file" ] && [ ! -L "$file" ] || continue
filename=${file##*/}
retry_count=0
while [ $retry_count -lt $max_retries ]; do
if az storage blob upload \
--container-name "$CONTAINER_NAME" \
--file "$file" \
--name "$filename" \
--account-name "$STORAGE_ACCOUNT" \
--auth-mode login \
--overwrite false \
--only-show-errors --output none; then
printf 'Uploaded: %s\n' "$filename"
break
else
retry_count=$((retry_count + 1))
if [ $retry_count -lt $max_retries ]; then
printf 'Retry %s for %s\n' "$retry_count" "$filename" >&2
sleep 5
else
printf 'Failed to upload %s after %s attempts\n' "$filename" "$max_retries" >&2
failed=1
fi
fi
done
done
exit "$failed"
Übertragungsleistung optimieren
Bei großen Stapeln delegiert az storage copy die Übertragungen an AzCopy. Folgen Sie
der Kopier-Referenz der Azure CLI
und erlauben Sie bei entsprechender Aufforderung deren AzCopy-Einrichtung. Dieses Beispiel kopiert
den Verzeichnisinhalt rekursiv, ohne vorhandene Objekte zu ersetzen:
az storage copy \
--source "$SOURCE_DIR/*" \
--destination "https://$STORAGE_ACCOUNT.blob.core.windows.net/$CONTAINER_NAME" \
--recursive \
--put-md5 \
--auth-mode login \
-- --overwrite=false
Dateizugriff mit Azure Storage verwalten
Erzeugen Sie ein kurzlebiges SAS-Token mit Benutzerdelegierung und ausschließlichem Lesezugriff. Es gewährt Zugriff auf bekannte Blob-Namen im gesamten Container, verwenden Sie daher einen dedizierten Container oder ein auf einen Blob beschränktes SAS, wenn Sie eine einzelne Datei teilen. Behandeln Sie die Ausgabe als Secret: Nehmen Sie sie nicht in Logs, in die Versionsverwaltung oder in öffentliche URLs auf. Python 3 bietet unter macOS und Linux eine portable Berechnung des UTC-Ablaufzeitpunkts:
end_time=$(python3 -c 'from datetime import datetime, timedelta, timezone; print((datetime.now(timezone.utc) + timedelta(minutes=30)).strftime("%Y-%m-%dT%H:%MZ"))')
az storage container generate-sas \
--name "$CONTAINER_NAME" \
--account-name "$STORAGE_ACCOUNT" \
--permissions r \
--expiry "$end_time" \
--auth-mode login \
--as-user \
--https-only --output tsv
Überwachung und Protokollierung
Um Anfrageprotokolle aufzubewahren, verwenden Sie einen vorhandenen Log-Analytics-Arbeitsbereich und
eine Identität, die Diagnoseeinstellungen konfigurieren darf. Setzen Sie
WORKSPACE_GROUP und WORKSPACE_NAME auf die Ressourcengruppe und den
Namen dieses Arbeitsbereichs. Für die Erfassung und Aufbewahrung von Protokollen fallen Gebühren an.
Konfigurieren Sie die Blob-Dienst-Ressource, nicht nur das übergeordnete Speicherkonto, wie im
Leitfaden zur Überwachung von Blob Storage beschrieben:
: "${WORKSPACE_GROUP:?Set WORKSPACE_GROUP}"
: "${WORKSPACE_NAME:?Set WORKSPACE_NAME}"
log_analytics_workspace_id=$(az monitor log-analytics workspace show \
--resource-group "$WORKSPACE_GROUP" --workspace-name "$WORKSPACE_NAME" \
--query id --output tsv)
workspace_id=$(az monitor log-analytics workspace show \
--resource-group "$WORKSPACE_GROUP" --workspace-name "$WORKSPACE_NAME" \
--query customerId --output tsv)
az monitor diagnostic-settings create \
--name "storage-diagnostics" \
--resource "$storage_account_id/blobServices/default" \
--logs '[{"category": "StorageRead","enabled": true},{"category": "StorageWrite","enabled": true}]' \
--export-to-resource-specific true \
--workspace "$log_analytics_workspace_id"
# List all blobs in a container
az storage blob list \
--container-name "$CONTAINER_NAME" \
--account-name "$STORAGE_ACCOUNT" \
--auth-mode login \
--output table
Bewährte Verfahren
-
Verwaltete Identitäten einsetzen: Nutzen Sie zur Authentifizierung verwaltete Identitäten von Microsoft Entra ID anstelle von Speicherkontoschlüsseln.
-
Vorläufiges Löschen aktivieren: Schützen Sie sich vor versehentlichen Löschvorgängen.
az storage account blob-service-properties update \ --delete-retention-days 7 \ --enable-delete-retention true \ --account-name "$STORAGE_ACCOUNT" \ --resource-group "$RESOURCE_GROUP" -
Private Endpunkte bei Bedarf verwenden: Konfigurieren Sie ein erreichbares virtuelles Netzwerk und privates DNS, überprüfen Sie den Zugriff vom Übertragungshost aus und schränken Sie anschließend den öffentlichen Zugriff ein. Das bloße Erstellen eines Endpunkts deaktiviert den öffentlichen Endpunkt nicht. Folgen Sie der Einrichtung privater Endpunkte.
-
Versionierung aktivieren: Behalten Sie mehrere Versionen Ihrer Dateien bei.
az storage account blob-service-properties update \ --account-name "$STORAGE_ACCOUNT" \ --resource-group "$RESOURCE_GROUP" \ --enable-versioning true -
Lebenszyklusverwaltung einrichten: Prüfen Sie die Kosten für Aufbewahrung und Abruf, bevor Sie eine Richtlinie anwenden. Beschränken Sie sie auf das vorgesehene Blob-Präfix und validieren Sie sie an Testdaten; Löschregeln entfernen Dateien. Nutzen Sie den Leitfaden zu Lebenszyklusrichtlinien.
-
Wählen Sie die Infrastrukturverschlüsselung bei Bedarf bereits beim Erstellen des Kontos. Sie lässt sich nicht nachträglich per Kontoaktualisierung umschalten. Siehe Infrastrukturverschlüsselung.
Häufige Probleme beheben
-
Prüfen Sie die Einstellungen für Firewall und öffentliche Endpunkte. Diese Abfrage der Verwaltungsebene belegt keinen Datenzugriff; führen Sie zusätzlich die folgende authentifizierte Blob-Auflistung aus:
az storage account show \ --name "$STORAGE_ACCOUNT" --resource-group "$RESOURCE_GROUP" \ --query '{publicNetworkAccess:publicNetworkAccess,networkRuleSet:networkRuleSet}' -
Sehen Sie sich die Vorgangsprotokolle an, nachdem Sie die obige Diagnoseeinstellung aktiviert haben. Der Abfragebefehl fordert möglicherweise zur Installation der Log-Analytics-Erweiterung für die Azure CLI auf:
az monitor log-analytics query \ --workspace "$workspace_id" \ --analytics-query "StorageBlobLogs | where TimeGenerated > ago(1h) | take 20" -
Testen Sie den Zugriff auf das Speicherkonto:
az storage blob list \ --container-name "$CONTAINER_NAME" --account-name "$STORAGE_ACCOUNT" \ --auth-mode login --output tableEin Berechtigungsfehler kann bedeuten, dass die Datenrolle noch nicht wirksam ist, dass die falsche Identität angemeldet ist oder dass der Netzwerkpfad blockiert ist.
az storage account check-nameprüft nur die Verfügbarkeit des Namens; es ist kein Zugriffstest.
Nächste Schritte
- Richten Sie Ihre erste automatisierte Dateiübertragung ein.
- Konfigurieren Sie die Lebenszyklusverwaltung für Ihr Speicherkonto.
- Aktivieren Sie die Versionierung für kritische Dateien.
Müssen Sie komplexe Workflows zur Dateiverarbeitung abwickeln? Werfen Sie einen Blick auf Transloadit für umfassende Dienste zum Dateiimport und Dateiexport.
