Udostępnij za pomocą


Używanie rozszerzenia niestandardowego skryptu Azure w wersji 2 z maszynami wirtualnymi z systemem Linux

Rozszerzenie niestandardowego skryptu w wersji 2 pobiera i uruchamia skrypty na maszynach wirtualnych platformy Azure. To rozszerzenie służy do konfigurowania po wdrożeniu, instalacji oprogramowania lub innego zadania konfiguracji lub zarządzania. Skrypty można pobrać z usługi Azure Storage lub innej dostępnej lokalizacji internetowej albo udostępnić je środowisku uruchomieniowemu rozszerzenia.

Rozszerzenie skryptu niestandardowego integruje się z szablonami Azure Resource Manager. Można go również uruchomić przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub interfejsu API REST usługi Azure Virtual Machines.

W tym artykule opisano sposób używania rozszerzenia niestandardowego skryptu z poziomu interfejsu wiersza polecenia platformy Azure oraz sposobu uruchamiania rozszerzenia przy użyciu szablonu usługi Azure Resource Manager. Ten artykuł zawiera również kroki rozwiązywania problemów z systemami Linux.

Istnieją dwie wersje rozszerzenia niestandardowego skryptu:

  • Wersja 1: Microsoft.OSTCExtensions.CustomScriptForLinux
  • Wersja 2: Microsoft.Azure.Extensions.CustomScript

Użyj wersji 2 dla nowych i istniejących wdrożeń. Nowa wersja jest bezpośrednim zamiennikiem. Migracja jest tak łatwa, jak zmiana nazwy i wersji. Nie musisz zmieniać konfiguracji rozszerzenia.

Uwaga

Wypróbuj pomoc maszyny wirtualnej, aby uzyskać szybszą diagnostykę. Zalecamy uruchomienie asysty maszyny wirtualnej dla systemu Windows lub asystenta maszyny wirtualnej dla systemu Linux. Te narzędzia diagnostyczne oparte na skryptach ułatwiają identyfikowanie typowych problemów, które mają wpływ na agenta gościa maszyny wirtualnej platformy Azure i ogólną kondycję maszyny wirtualnej.

Jeśli występują problemy z wydajnością maszyn wirtualnych, przed skontaktowaniem się z pomocą techniczną uruchom te narzędzia.

Wymagania wstępne

Obsługiwane dystrybucje systemu Linux

Publisher Dystrybucja x64 ARM64
Społeczność Alma Linux Alma Linux 8.x+, 9.x+ 8.x+, 9.x+
Credativ Debian Ponad 10 11.x+
Kinvolk Flatcar Linux 3374.2.x+ 3374.2.x+
Microsoft Azure Linux 2.x 2.x
openSUSE Project openSUSE 12.3+ nieobsługiwane.
Oracle Oracle Linux 6.4+, 7.x+, 8.x+ nieobsługiwane.
Red Hat Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+, 10.x+ 8.6+, 9.0+, 10.x+
CIQ Rocky Linux 9.x+ 9.x+
SUSE SLES 12.x+, 15.x+ 15.x SP4+
Canonical Ubuntu (wersje LTS) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Lokalizacja skryptu

Możesz ustawić rozszerzenie tak, aby używało poświadczeń usługi Azure Blob Storage w celu uzyskania dostępu do usługi Azure Blob Storage. Lokalizacja skryptu może znajdować się w dowolnym miejscu, jeśli maszyna wirtualna może kierować do tego punktu końcowego, na przykład do usługi GitHub lub wewnętrznego serwera plików.

Łączność z Internetem

Aby pobrać skrypt zewnętrznie, na przykład z usługi GitHub lub Usługi Azure Storage, musisz otworzyć inne porty zapory lub sieciowej grupy zabezpieczeń. Jeśli na przykład skrypt znajduje się w usłudze Azure Storage, możesz zezwolić na dostęp przy użyciu tagów usługi Azure NSG dla usługi Storage.

Jeśli skrypt znajduje się na serwerze lokalnym, może być konieczne otwarcie innych portów zapory ogniowej lub portów grupy zabezpieczeń sieci.

Wskazówki

  • Najwyższy odsetek awarii dotyczących tego rozszerzenia jest spowodowany błędami składni w skrypcie. Sprawdź, czy skrypt działa bez błędów. Umieść więcej logowania do skryptu, aby ułatwić znajdowanie błędów.
  • Pisz skrypty idempotentne, aby w razie ich ponownego uruchomienia przez przypadek więcej niż jeden raz nie nastąpiły zmiany systemu.
  • Upewnij się, że skrypty nie wymagają udziału użytkownika w trakcie działania.
  • Dozwolone jest działanie skryptu przez 90 minut. Każda próba wydłużenia spowoduje niepowodzenie w dostarczeniu rozszerzenia.
  • Nie umieszczaj w skrypcie operacji ponownego uruchamiania. Ponowne uruchamianie powoduje problemy z innymi zainstalowanymi rozszerzeniami, a rozszerzenie nie będzie kontynuowane po ponownym uruchomieniu.
  • Jeśli masz skrypt, który powoduje ponowne uruchomienie przed zainstalowaniem aplikacji i uruchomieniem skryptów, zaplanuj ponowne uruchomienie przy użyciu zadania cron lub przy użyciu narzędzi, takich jak rozszerzenia DSC, Chef lub Puppet.
  • Nie uruchamiaj skryptu, który powoduje zatrzymanie lub aktualizację agenta systemu Linux platformy Azure. Może to pozostawić rozszerzenie w stanie przejściowym i może skutkować przekroczeniem limitu czasu.
  • Rozszerzenie uruchomi skrypt tylko raz. Jeśli chcesz uruchomić skrypt przy każdym uruchomieniu, możesz użyć obrazu cloud-init i modułu Skrypty na rozruch. Alternatywnie możesz użyć skryptu do utworzenia jednostki serwisowej systemd.
  • Do maszyny wirtualnej można zastosować tylko jedną wersję rozszerzenia. Aby uruchomić drugi skrypt niestandardowy, zaktualizuj istniejące rozszerzenie przy użyciu nowej konfiguracji. Alternatywnie możesz usunąć rozszerzenie niestandardowego skryptu i ponownie zastosować go za pomocą zaktualizowanego skryptu.
  • Jeśli chcesz zaplanować, kiedy skrypt jest uruchamiany, użyj rozszerzenia, aby utworzyć zadanie cron.
  • Podczas działania skryptu będziesz widzieć tylko stan rozszerzenia przechodzenie w portalu Azure lub w interfejsie wiersza polecenia. Jeśli potrzebujesz częstszych aktualizacji stanu działającego skryptu, musisz utworzyć własne rozwiązanie.
  • Niestandardowe rozszerzenie skryptu nie obsługuje natywnie serwerów proxy. Jednak możesz użyć w swoim skrypcie narzędzia do transferu plików, takiego jak Curl, które obsługuje serwery proxy.
  • Pamiętaj, że skrypty lub polecenia mogą polegać na lokalizacjach katalogów innych niż domyślne. Przygotuj logikę obsługującą taką sytuację.

Schemat rozszerzenia

Konfiguracja rozszerzenia niestandardowego skryptu określa elementy, takie jak lokalizacja skryptu i polecenie do uruchomienia. Te informacje można przechowywać w plikach konfiguracji, określać je w wierszu polecenia lub określać je w szablonie usługi Azure Resource Manager.

Poufne dane można przechowywać w chronionej konfiguracji, która jest szyfrowana i odszyfrowywane tylko na docelowej maszynie wirtualnej. Chroniona konfiguracja jest przydatna, gdy polecenie wykonywania zawiera wpisy tajne, takie jak hasło. Oto przykład:

{
  "name": "config-app",
  "type": "Extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "skipDos2Unix":false,
      "timestamp":123456789
    },
    "protectedSettings": {
       "commandToExecute": "<command-to-execute>",
       "script": "<base64-script-to-execute>",
       "storageAccountName": "<storage-account-name>",
       "storageAccountKey": "<storage-account-key>",
       "fileUris": ["https://.."],
       "managedIdentity" : "<managed-identity-identifier>"
    }
  }
}

Uwaga

Właściwość managedIdentitynie powinna być używana w połączeniu z właściwością storageAccountName lub storageAccountKey.

Wartości właściwości

Nazwa Wartość lub przykład Typ danych
apiVersion 2019-03-01 termin
wydawca Microsoft.Azure.Extensions ciąg
typ CustomScript ciąg
wersjaTypeHandlera 2.1 Int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py macierz
commandToExecute python MyPythonScript.py \<my-param1> ciąg
skrypt IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= ciąg
skipDos2Unix false typ logiczny (boolowski)
sygnatura czasowa 123456789 32-bitowa liczba całkowita
storageAccountName examplestorageacct ciąg
kluczKontaPrzechowywania TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== ciąg
managedIdentity { } lub { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } lub { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" } Obiekt JSON

Szczegóły wartości właściwości

Majątek Opcjonalne lub wymagane Szczegóły
apiVersion Nie dotyczy Najbardziej aktualną wersję interfejsu API można znaleźć przy użyciu Resource Explorer lub za pomocą polecenia az provider list -o json w wierszu polecenia platformy Azure.
fileUris Opcjonalnie Adresy URL plików do pobrania.
commandToExecute Wymagane, jeśli script nie ustawiono Skrypt wejściowy do uruchomienia. Użyj tej właściwości zamiast script , jeśli polecenie zawiera wpisy tajne, takie jak hasła.
skrypt Wymagane, jeśli commandToExecute nie ustawiono Skrypt zakodowany w formacie Base64 i opcjonalnie skompresowany przy użyciu gzip, uruchamiany przez /bin/sh.
skipDos2Unix Opcjonalnie Ustaw tę wartość na false, jeśli chcesz pominąć konwersję dos2unix adresów URL plików opartych na skryptach lub samych skryptów.
sygnatura czasowa Opcjonalnie Zmień tę wartość tylko, aby wyzwolić ponowne uruchomienie skryptu. Dowolna wartość całkowita jest akceptowalna, o ile różni się od poprzedniej wartości.
storageAccountName Opcjonalnie Nazwa konta magazynu. Jeśli określisz poświadczenia magazynu, wszystkie fileUris wartości muszą być adresami URL dla obiektów blob platformy Azure.
kluczKontaPrzechowywania Opcjonalnie Klucz dostępu konta przechowywania.
managedIdentity Opcjonalnie Tożsamość zarządzana do pobierania plików. Wartości to clientId (opcjonalnie, ciąg), czyli identyfikator klienta tożsamości zarządzanej i objectId (opcjonalnie ciąg), czyli identyfikator obiektu tożsamości zarządzanej.

Ustawienia publiczne są wysyłane w postaci zwykłego tekstu do maszyny wirtualnej, na której jest uruchamiany skrypt. Ustawienia chronione są szyfrowane za pośrednictwem klucza znanego tylko dla platformy Azure i maszyny wirtualnej. Ustawienia są zapisywane na maszynie wirtualnej podczas ich wysyłania. Oznacza to, że jeśli ustawienia zostały zaszyfrowane, są one zapisywane jako zaszyfrowane na maszynie wirtualnej. Certyfikat używany do odszyfrowywania zaszyfrowanych wartości jest przechowywany na maszynie wirtualnej. Certyfikat jest również używany do odszyfrowywania ustawień, w razie potrzeby, w czasie wykonywania.

Używanie ustawień publicznych może być przydatne do debugowania, ale zdecydowanie zalecamy używanie ustawień chronionych.

Następujące wartości można ustawić w ustawieniach publicznych lub chronionych. Rozszerzenie odrzuca dowolną konfigurację, w której te wartości są ustawiane zarówno w ustawieniach publicznych, jak i chronionych.

  • commandToExecute
  • script
  • fileUris

Właściwość: skipDos2Unix

Poprzednia wersja rozszerzenia niestandardowego skryptu Microsoft.OSTCExtensions.CustomScriptForLinux automatycznie konwertuje pliki DOS-owe na pliki systemu UNIX, tłumacząc \r\n na \n. To tłumaczenie nadal istnieje i jest domyślnie włączone. Ta konwersja jest stosowana do wszystkich plików pobranych z fileUris lub ustawienia skryptu w oparciu o jedno z następujących kryteriów:

  • Rozszerzenie jest .sh, .txt, .py lub .pl. Ustawienie skryptu zawsze pasuje do tego kryterium, ponieważ zakłada się, że jest to skrypt uruchamiany z /bin/sh. Ustawienie skryptu jest zapisywane jako script.sh na maszynie wirtualnej.
  • Plik rozpoczyna się od #!.

Wartość domyślna to false, co oznacza, że konwersja dos2unix jest wykonywana. Konwersję dos2unix można pominąć, ustawiając wartość skipDos2Unix :true

{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>",
  "skipDos2Unix": true
}

Właściwość: skrypt

Rozszerzenie Niestandardowych Skryptów obsługuje wykonywanie skryptu zdefiniowanego przez użytkownika. Ustawienia skryptu łączą commandToExecute i fileUris w jedno ustawienie. Zamiast konfigurować plik do pobrania z usługi Azure Storage lub repozytorium GitHub, możesz zakodować skrypt jako ustawienie. Możesz użyć skryptu, aby zastąpić commandToExecute i fileUris.

Oto kilka wymagań:

  • Skrypt musi być zakodowany w formacie Base64.
  • Skrypt można opcjonalnie skompresować za pomocą gzip.
  • Możesz użyć ustawienia skryptu w ustawieniach publicznych lub chronionych.
  • Maksymalny rozmiar danych parametru skryptu to 256 KB. Jeśli skrypt przekroczy ten rozmiar, nie zostanie uruchomiony.

Na przykład następujący skrypt jest zapisywany w pliku /script.sh/:

#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata

Aby skonstruować poprawne ustawienie rozszerzenia niestandardowego skryptu, należy wykorzystać dane wyjściowe następującego polecenia:

cat script.sh | base64 -w0
{
  "script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}

W większości przypadków skrypt można opcjonalnie skompresować używając gzip w celu dalszego zmniejszenia rozmiaru. Niestandardowe rozszerzenie skryptu automatycznie wykrywa użycie kompresji gzip.

cat script | gzip -9 | base64 -w 0

Rozszerzenie skryptu niestandardowego używa następującego algorytmu do uruchomienia skryptu.

  1. Twierdzenie, że długość wartości skryptu nie przekracza 256 KB.
  2. Zdekoduj wartość skryptu za pomocą Base64.
  3. Spróbuj rozpakować zdekodowaną wartość Base64.
  4. Zapisz zdekodowaną i opcjonalnie dekompresowaną wartość na dysku: /var/lib/waagent/custom-script/#/script.sh.
  5. Uruchom skrypt przy użyciu polecenia _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Właściwość: managedIdentity

Uwaga

Ta właściwość musi być określona tylko w ustawieniach chronionych.

Rozszerzenie niestandardowego skryptu w wersji 2.1 lub nowszej obsługuje tożsamości zarządzane do pobierania plików z adresów URL podanych w ustawieniu fileUris . Takie podejście umożliwia rozszerzenie skryptu niestandardowego na dostęp do prywatnych blobów lub kontenerów usługi Azure Storage bez konieczności przekazywania przez użytkownika danych autoryzacyjnych, takich jak tokeny sygnatury dostępu współdzielonego (SAS) lub klucze konta magazynu.

Aby użyć tej funkcji, dodaj tożsamość przypisaną przez system lub przypisaną przez użytkownika do maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych, w którym ma zostać uruchomione rozszerzenie niestandardowego skryptu. Następnie przyznaj tożsamości zarządzanej dostęp do kontenera lub obiektu blob usługi Azure Storage.

Aby użyć tożsamości przypisanej przez system na docelowej maszynie wirtualnej lub zestawie skalowania maszyn wirtualnych, ustaw parametr managedidentity na pusty obiekt JSON.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : {}
}

Aby użyć tożsamości przypisanej przez użytkownika na docelowej maszynie wirtualnej lub docelowym zestawie skalowania maszyn wirtualnych, skonfiguruj managedidentity przy użyciu identyfikatora klienta lub identyfikatora obiektu tożsamości zarządzanej.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }
}

Uwaga

Właściwość managedIdentitynie powinna być używana w połączeniu z właściwością storageAccountName lub storageAccountKey.

Template deployment

Rozszerzenia maszyn wirtualnych platformy Azure można wdrożyć przy użyciu szablonów usługi Azure Resource Manager. Schemat JSON opisany w poprzedniej sekcji może zostać użyty w szablonie Azure Resource Manager do uruchomienia rozszerzenia Custom Script Extension podczas wdrażania tego szablonu. Przykładowy szablon zawierający rozszerzenie niestandardowego skryptu można znaleźć w witrynie GitHub.

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <param2>",
      "fileUris": ["https://github.com/MyProject/Archive/hello.sh"
      ]
    }
  }
}

Uwaga

Te nazwy właściwości są uwzględniane w wielkości liter. Aby uniknąć problemów z wdrażaniem, użyj nazw, jak pokazano tutaj.

Azure CLI

Gdy używasz Azure CLI do uruchamiania Custom Script Extension, utwórz jeden lub więcej plików konfiguracji. Plik konfiguracji musi zawierać co najmniej commandToExecute. Polecenie az vm extension set odwołuje się do pliku konfiguracji:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings ./script-config.json

Alternatywnie możesz określić ustawienia w poleceniu jako ciąg w formacie JSON. Takie podejście umożliwia określenie konfiguracji podczas wykonywania i bez oddzielnego pliku konfiguracji.

az vm extension set \
  --resource-group exttest \
  --vm-name exttest \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'

Przykład: Publiczna konfiguracja z plikiem skryptu

W tym przykładzie użyto następującego pliku skryptu o nazwie script-config.json:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. Utwórz plik skryptu przy użyciu wybranego edytora tekstów lub za pomocą następującego polecenia interfejsu wiersza polecenia:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  2. Uruchom następujące polecenie:

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json
    

Przykład: Publiczna konfiguracja bez pliku skryptu

W tym przykładzie użyto następującej zawartości w formacie JSON:

{
  "commandToExecute": "apt-get -y update && apt-get install -y apache2"
}

Uruchom następujące polecenie:

az vm extension set \
  --resource-group tim0329vmRG \
  --vm-name tim0329vm --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'

Przykład: pliki konfiguracji publicznej i chronionej

Użyj pliku konfiguracji publicznej, aby określić identyfikator URI pliku skryptu:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}

Użyj chronionego pliku konfiguracji, aby określić polecenie do uruchomienia:

{
  "commandToExecute": "./config-music.sh"
}
  1. Utwórz plik konfiguracji publicznej przy użyciu wybranego edytora tekstów lub za pomocą następującego polecenia interfejsu wiersza polecenia:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
    }
    EOF
    
  2. Utwórz chroniony plik konfiguracji przy użyciu wybranego edytora tekstów lub za pomocą następującego polecenia interfejsu wiersza polecenia:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Uruchom następujące polecenie:

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json \
      --protected-settings ./protected-config.json
    

Virtual Machine Scale Sets

Jeśli wdrożysz rozszerzenie niestandardowego skryptu z portalu Azure, nie masz kontroli nad wygaśnięciem tokenu SAS w celu uzyskania dostępu do skryptu w koncie magazynu. Początkowe wdrożenie działa, ale gdy token SAS konta magazynu wygaśnie, każda kolejna operacja skalowania kończy się niepowodzeniem, ponieważ rozszerzenie niestandardowego skryptu nie może już uzyskać dostępu do konta magazynu.

Zalecamy użycie programu PowerShell, interfejsu wiersza polecenia platformy Azure lub szablonu usługi Azure Resource Manager podczas wdrażania rozszerzenia niestandardowego skryptu w zestawie skalowania maszyn wirtualnych. W ten sposób możesz użyć tożsamości zarządzanej lub mieć bezpośrednią kontrolę nad czasem wygaśnięcia tokenu SAS na potrzeby uzyskiwania dostępu do skryptu na koncie magazynu tak długo, jak tego potrzebujesz.

Rozwiązywanie problemów

Po uruchomieniu rozszerzenia niestandardowego skryptu skrypt zostanie utworzony lub pobrany do katalogu podobnego do poniższego przykładu. Dane wyjściowe polecenia są również zapisywane w tym katalogu w plikach stdout i stderr .

sudo ls -l /var/lib/waagent/custom-script/download/0/

Aby rozwiązać problemy, najpierw sprawdź dziennik agenta systemu Linux i upewnij się, że rozszerzenie jest uruchomione:

sudo cat /var/log/waagent.log

Sprawdź wykonanie rozszerzenia Wygląda to następująco:

2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc

W poprzednich danych wyjściowych:

  • Enable to moment rozpoczęcia działania polecenia.
  • Download odnosi się do pobierania pakietu Custom Script Extension z platformy Azure, a nie określonych plików skryptów w fileUris.

Rozszerzenie skryptu platformy Azure tworzy dziennik, który można znaleźć tutaj:

sudo cat /var/log/azure/custom-script/handler.log

Poszukaj pojedynczego wykonania. Wygląda to następująco:

time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end

W tym miejscu można zobaczyć:

  • Polecenie enable uruchamiające ten dziennik.
  • Ustawienia przekazane do rozszerzenia.
  • Rozszerzenie pobierające plik i wynik tej akcji.
  • Wykonywane polecenie i wynik.

Można również pobrać stan wykonywania rozszerzenia niestandardowego skryptu, w tym rzeczywiste argumenty przekazane jako commandToExecute, przy użyciu interfejsu wiersza polecenia platformy Azure:

az vm extension list -g myResourceGroup --vm-name myVM

Dane wyjściowe wyglądają podobnie do następującego tekstu:

[
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
    "resourceGroup": "rgname",
    "settings": {
      "commandToExecute": "sh script.sh > ",
      "fileUris": [
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
      ]
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "2.0",
    "virtualMachineExtensionType": "CustomScript"
  },
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
    "instanceView": null,
    "location": "eastus",
    "name": "OmsAgentForLinux",
    "protectedSettings": null,
    "provisioningState": "Succeeded",
    "publisher": "Microsoft.EnterpriseCloud.Monitoring",
    "resourceGroup": "rgname",
    "settings": {
      "workspaceId": "workspaceid"
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "1.0",
    "virtualMachineExtensionType": "OmsAgentForLinux"
  }
]

Problemy ze składnią interfejsu wiersza polecenia platformy Azure

Interfejs wiersza poleceń platformy Azure może działać w kilku środowiskach powłoki, ale z drobnymi różnicami w formacie. Jeśli masz nieoczekiwane wyniki za pomocą poleceń interfejsu wiersza polecenia platformy Azure, zobacz Jak pomyślnie używać interfejsu wiersza polecenia platformy Azure.

Następne kroki

Aby wyświetlić kod, bieżące problemy i wersje, zobacz custom-script-extension-linux.