Použití rozšíření vlastních skriptů Azure verze 2 s linuxovými virtuálními počítači

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Konec životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.

Rozšíření vlastních skriptů verze 2 stáhne a spustí skripty na virtuálních počítačích Azure. Toto rozšíření použijte pro konfiguraci po nasazení, instalaci softwaru nebo jakoukoli jinou úlohu konfigurace nebo správy. Skripty si můžete stáhnout ze služby Azure Storage nebo jiného přístupného internetového umístění nebo je můžete poskytnout modulu runtime rozšíření.

Rozšíření vlastních skriptů se integruje se šablonami Azure Resource Manageru. Můžete ho také spustit pomocí Azure CLI, Azure PowerShellu nebo rozhraní REST API služby Azure Virtual Machines.

Tento článek popisuje, jak používat rozšíření vlastních skriptů z Azure CLI a jak rozšíření spustit pomocí šablony Azure Resource Manageru. Tento článek obsahuje také postup řešení potíží pro systémy Linux.

Existují dvě verze rozšíření vlastních skriptů:

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

Použijte verzi 2 pro nová a existující nasazení. Nová verze je nahrazením. Migrace je stejně snadná jako změna názvu a verze. Konfiguraci rozšíření nemusíte měnit.

Požadavky

Podporované linuxové distribuce

Distribuce x64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Nepodporuje se
Oracle Linux 6.4+, 7.x+, 8.x+ Nepodporuje se
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+ 8,6+, 9.x+
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Umístění skriptu

Rozšíření můžete nastavit tak, aby používalo vaše přihlašovací údaje do služby Azure Blob Storage, a tak mělo přístup ke službě Azure Blob Storage. Skript může být umístěn kdekoli, pokud může virtuální počítač k tomuto koncovému bodu směrovat, například GitHub nebo interní souborový server.

Připojení k internetu

Chcete-li skript stáhnout zvenčí, například ze služby GitHub nebo Azure Storage, musíte otevřít další porty brány firewall nebo skupiny zabezpečení sítě (NSG). Pokud je váš skript například umístěn na úložišti Azure Storage, můžete povolit přístup pomocí značek služeb Azure NSG pro úložiště.

Pokud je váš skript na místním serveru, možná budete muset otevřít další porty brány firewall nebo NSG.

Tipy

  • K selhání tohoto rozšíření nejčastěji dochází kvůli chybám syntaxe ve skriptu. Ověřte, že skript běží bez chyb. Vložte do skriptu více protokolování, aby bylo snazší najít chyby.
  • Pište skripty, které jsou idempotentní, aby jejich náhodné spuštění více než jednou nezpůsobilo systémové změny.
  • Ujistěte se, že skripty při svém spuštění nevyžadují vstup uživatele.
  • Skript má povoleno běžet 90 minut. Cokoli delšího má za následek neúspěšné nasazení rozšíření.
  • Nepoužívejte ve skriptu restartování. Restartování způsobuje problémy s dalšími instalovanými rozšířeními a rozšíření po restartu nepokračuje.
  • Pokud máte skript, který způsobí restart před instalací aplikací a spuštěním skriptů, naplánujte restart pomocí úlohy cron nebo pomocí nástrojů, jako jsou rozšíření DSC, Chef nebo Puppet.
  • Nespouštějte skript, který způsobí zastavení nebo aktualizaci agenta Azure pro Linux. Rozšíření by tak mohlo zůstat ve stavu přechodu a vést k vypršení časového limitu.
  • Rozšíření spustí skript pouze jednou. Pokud chcete spustit skript při každém spuštění, můžete použít obraz cloud-init a použít modul Scripts Per Boot. Případně můžete skript použít k vytvoření servisní jednotky systemd.
  • Na virtuálním počítači můžete použít pouze jednu verzi rozšíření. Chcete-li spustit druhý vlastní skript, aktualizujte stávající rozšíření pomocí nové konfigurace. Případně můžete rozšíření Custom Script Extension odebrat a znovu ho použít s aktualizovaným skriptem.
  • Pokud chcete naplánovat spuštění skriptu, použijte rozšíření k vytvoření úlohy cron.
  • Pokud skript běží, vidíte pouze stav přechodu rozšíření z portálu Azure nebo CLI. Pokud chcete častější aktualizace stavu spuštěného skriptu, vytvořte si vlastní řešení.
  • Rozšíření Custom Script Extension nativně nepodporuje proxy servery. Můžete však použít nástroj pro přenos souborů, například Curl, který podporuje proxy servery ve vašem skriptu.
  • Pamatujte na nevýchozí umístění adresářů, na která mohou vaše skripty nebo příkazy odkazovat. Zajistěte logiku pro řešení takové situace.

Schéma rozšíření

Konfigurace rozšíření vlastních skriptů určuje například umístění skriptu a příkaz, který se má spustit. Tyto informace můžete uložit do konfiguračních souborů, zadat je na příkazovém řádku nebo je zadat v šabloně Azure Resource Manageru.

Citlivá data můžete ukládat v chráněné konfiguraci, která se šifruje a dešifruje jenom na cílovém virtuálním počítači. Chráněná konfigurace je užitečná, když spouštěcí příkaz obsahuje tajné kódy, jako je heslo. Tady je příklad:

{
  "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>"
    }
  }
}

Poznámka:

Vlastnost managedIdentitynesmí být použita ve spojení s storageAccountName vlastností nebo storageAccountKey vlastností.

Hodnoty vlastností

Název Hodnota nebo příklad Datový typ
apiVersion 2019-03-01 datum
Vydavatel Microsoft.Azure.Extensions string
type CustomScript string
typeHandlerVersion 2.1 int
identifikátory fileUris https://github.com/MyProject/Archive/MyPythonScript.py pole
commandToExecute python MyPythonScript.py \<my-param1> string
. IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= string
skipDos2Unix false boolean
časové razítko 123456789 32bitové celé číslo
storageAccountName examplestorageacct string
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== string
managedIdentity { }nebo { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }{ "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } Objekt JSON

Podrobnosti o hodnotě vlastnosti

Vlastnost Volitelné nebo povinné Detaily
apiVersion Nelze použít Nejnovější verzi rozhraní API najdete pomocí Průzkumníka prostředků nebo pomocí příkazu az provider list -o json v Azure CLI.
identifikátory fileUris Volitelné Adresy URL souborů, které se mají stáhnout.
commandToExecute Vyžaduje se, pokud script není nastavená. Skript vstupního bodu, který se má spustit. Tuto vlastnost použijte místo script toho, pokud váš příkaz obsahuje tajné kódy, jako jsou hesla.
. Vyžaduje se, pokud commandToExecute není nastavená. Kódování Base64 a volitelně gzip'ed skript spuštěný /bin/sh.
skipDos2Unix Volitelné Tuto hodnotu nastavte, false pokud chcete přeskočit dos2unix převod adres URL souborů nebo skriptů založených na skriptech.
časové razítko Volitelné Tuto hodnotu změňte pouze tak, aby se aktivovalo opětovné spuštění skriptu. Jakákoli celočíselná hodnota je přijatelná, pokud se liší od předchozí hodnoty.
storageAccountName Volitelné Název účtu úložiště. Pokud zadáte přihlašovací údaje úložiště, fileUris všechny hodnoty musí být adresy URL pro objekty blob Azure.
storageAccountKey Volitelné Přístupový klíč účtu úložiště.
managedIdentity Volitelné Spravovaná identita pro stahování souborů. Hodnoty jsou clientId (volitelné, řetězec), což je ID klienta spravované identity a objectId (volitelné, řetězec), což je ID objektu spravované identity.

Veřejné nastavení se do virtuálního počítače, na kterém běží skript, odesílá ve formátu prostého textu. Chráněná nastavení se šifrují prostřednictvím klíče známého jenom v Azure a virtuálním počítači. Nastavení se uloží na virtuální počítač při jejich odeslání. To znamená, že pokud se nastavení zašifrovalo, uloží se na virtuální počítač zašifrované. Certifikát, který slouží k dešifrování šifrovaných hodnot, je uložený na virtuálním počítači. Certifikát se také používá k dešifrování nastavení v případě potřeby za běhu.

Použití veřejných nastavení může být užitečné pro ladění, ale důrazně doporučujeme používat chráněná nastavení.

Následující hodnoty můžete nastavit buď ve veřejném, nebo chráněném nastavení. Rozšíření odmítne jakoukoli konfiguraci, ve které jsou tyto hodnoty nastavené ve veřejném i chráněném nastavení.

  • commandToExecute
  • script
  • fileUris

Vlastnost: skipDos2Unix

Předchozí verze rozšíření vlastních skriptů , Microsoft.OSTCExtensions.CustomScriptForLinuxautomaticky převede soubory DOS na systém UNIX soubory překladem \r\n na \n. Tento překlad stále existuje a je ve výchozím nastavení zapnutý. Tento převod se použije u všech souborů stažených z fileUris nebo nastavení skriptu na základě některého z následujících kritérií:

  • Rozšíření je .sh, .txt, .py nebo .pl. Nastavení skriptu vždy odpovídá tomuto kritériu, protože se předpokládá, že se jedná o spuštění skriptu s parametrem /bin/sh. Nastavení skriptu se uloží jako script.sh na virtuálním počítači.
  • Soubor začíná #!na .

Výchozí hodnota je false, což znamená dos2unix převod je proveden. Převod dos2unix můžete přeskočit nastavením skipDos2Unix na true:

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

Vlastnost: skript

Rozšíření vlastních skriptů podporuje spuštění uživatelem definovaného skriptu. Nastavení skriptu se zkombinuje commandToExecute do fileUris jednoho nastavení. Místo toho, abyste museli nastavit soubor ke stažení ze služby Azure Storage nebo gist GitHubu, můžete skript zakódovat jako nastavení. Skript můžete použít k nahrazení commandToExecute a fileUris.

Tady jsou některé požadavky:

  • Skript musí být kódovaný v base64.
  • Skript může být volitelně gzip.
  • Nastavení skriptu můžete použít ve veřejném nebo chráněném nastavení.
  • Maximální velikost dat parametru skriptu je 256 kB. Pokud skript tuto velikost překročí, nespustí se.

Například následující skript se uloží do souboru /script.sh/:

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

Pomocí výstupu následujícího příkazu byste vytvořili správné nastavení skriptu rozšíření vlastních skriptů:

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

Ve většině případů může být skript volitelně gzipován, aby se zmenšila velikost. Rozšíření vlastních skriptů automaticky rozpozná použití komprese gzip.

cat script | gzip -9 | base64 -w 0

Rozšíření vlastních skriptů používá ke spuštění skriptu následující algoritmus:

  1. Ověřte, že délka hodnoty skriptu nepřesahuje 256 kB.
  2. Base64 dekóduje hodnotu skriptu.
  3. Zkuste zastřelit hodnotu dekódovanou base64.
  4. Zapište dekódovanou a volitelně dekomprimovanou hodnotu na disk: /var/lib/waagent/custom-script/#/script.sh.
  5. Spusťte skript pomocí příkazu _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Vlastnost: managedIdentity

Poznámka:

Tato vlastnost musí být zadána pouze v chráněných nastaveních.

Rozšíření vlastních skriptů verze 2.1 a novější podporuje spravované identity pro stahování souborů z adres URL uvedených v fileUris nastavení. Tento přístup umožňuje rozšíření vlastních skriptů přistupovat k privátním objektům blob nebo kontejnerům Azure Storage, aniž by uživatel musel předávat tajné kódy, jako jsou tokeny sdíleného přístupového podpisu (SAS) nebo klíče účtu úložiště.

Pokud chcete tuto funkci použít, přidejte identitu přiřazenou systémem nebo uživatelem přiřazenou k virtuálnímu počítači nebo škálovací sadě virtuálních počítačů, kde se očekává spuštění rozšíření vlastních skriptů. Potom udělte spravované identitě přístup ke kontejneru nebo objektu blob služby Azure Storage.

Pokud chcete použít identitu přiřazenou systémem na cílovém virtuálním počítači nebo ve škálovací sadě virtuálních počítačů, nastavte managedidentity na prázdný objekt JSON.

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

Pokud chcete použít identitu přiřazenou uživatelem na cílovém virtuálním počítači nebo škálovací sadě virtuálních počítačů, nakonfigurujte managedidentity ID klienta nebo ID objektu spravované identity.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" }
}

Poznámka:

Vlastnost managedIdentitynesmí být použita ve spojení s storageAccountName vlastností nebo storageAccountKey vlastností.

Nasazení šablon

Rozšíření virtuálních počítačů Azure můžete nasadit pomocí šablon Azure Resource Manageru. Schéma JSON podrobně popsané v předchozí části se dá použít v šabloně Azure Resource Manageru ke spuštění rozšíření vlastních skriptů během nasazení šablony. Ukázkovou šablonu, která obsahuje rozšíření vlastních skriptů, najdete na GitHubu.

{
  "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"
      ]
    }
  }
}

Poznámka:

V těchto názvech vlastností se rozlišují malá a velká písmena. Pokud se chcete vyhnout problémům s nasazením, použijte názvy, jak je znázorněno tady.

Azure CLI

Pokud ke spuštění rozšíření vlastních skriptů použijete Azure CLI, vytvořte konfigurační soubor nebo soubory. Konfigurační soubor musí obsahovat commandToExecuteminimálně . Příkaz az vm extension set odkazuje na konfigurační soubor:

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

Případně můžete zadat nastavení v příkazu jako řetězec ve formátu JSON. Tento přístup umožňuje zadat konfiguraci během provádění a bez samostatného konfiguračního souboru.

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"}'

Příklad: Veřejná konfigurace se souborem skriptu

Tento příklad používá následující soubor skriptu s názvem 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. Vytvořte soubor skriptu pomocí textového editoru podle vašeho výběru nebo pomocí následujícího příkazu rozhraní příkazového řádku:

    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. Spusťte následující příkaz:

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

Příklad: Veřejná konfigurace bez souboru skriptu

V tomto příkladu se používá následující obsah ve formátu JSON:

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

Spusťte následující příkaz:

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"}'

Příklad: Veřejné a chráněné konfigurační soubory

Pomocí veřejného konfiguračního souboru zadejte identifikátor URI souboru skriptu:

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

Pomocí chráněného konfiguračního souboru zadejte příkaz, který se má spustit:

{
  "commandToExecute": "./config-music.sh"
}
  1. Vytvořte veřejný konfigurační soubor pomocí textového editoru podle vašeho výběru nebo pomocí následujícího příkazu rozhraní příkazového řádku:

    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. Vytvořte chráněný konfigurační soubor pomocí textového editoru podle vašeho výběru nebo pomocí následujícího příkazu rozhraní příkazového řádku:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Spusťte následující příkaz:

    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

Pokud nasadíte rozšíření vlastních skriptů z webu Azure Portal, nemáte kontrolu nad vypršením platnosti tokenu SAS pro přístup ke skriptu ve vašem účtu úložiště. Počáteční nasazení funguje, ale když vyprší platnost tokenu SAS účtu úložiště, všechny následné operace škálování selžou, protože rozšíření vlastních skriptů už nemá přístup k účtu úložiště.

Při nasazování rozšíření vlastních skriptů do škálovací sady virtuálních počítačů doporučujeme použít PowerShell, Azure CLI nebo šablonu Azure Resource Manageru. Tímto způsobem se můžete rozhodnout použít spravovanou identitu nebo mít přímou kontrolu nad vypršením platnosti tokenu SAS pro přístup ke skriptu v účtu úložiště, pokud potřebujete.

Řešení problému

Po spuštění rozšíření vlastních skriptů se skript vytvoří nebo stáhne do adresáře, který je podobný následujícímu příkladu. Výstup příkazu se také uloží do tohoto adresáře a stdoutstderr do souborů.

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

Při řešení potíží nejprve zkontrolujte protokol agenta Linuxu a ujistěte se, že se rozšíření spustilo:

sudo cat /var/log/waagent.log

Vyhledejte spuštění rozšíření. Vypadá nějak takto:

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

V předchozím výstupu:

  • Enable je při spuštění příkazu.
  • Download se vztahuje ke stažení balíčku rozšíření vlastních skriptů z Azure, nikoli souborů skriptů zadaných v fileUris.

Rozšíření skriptů Azure vytvoří protokol, který najdete tady:

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

Vyhledejte jednotlivé spuštění. Vypadá nějak takto:

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

Tady můžete vidět:

  • Příkaz enable , který spustí tento protokol.
  • Nastavení předaná rozšíření.
  • Přípona stahuje soubor a výsledek této akce.
  • Příkaz, který se spouští, a výsledek.

Pomocí Azure CLI můžete také načíst stav spuštění rozšíření vlastních skriptů, včetně skutečných argumentů předaných jako commandToExecute:

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

Výstup vypadá jako následující text:

[
  {
    "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"
  }
]

Problémy se syntaxí Azure CLI

Azure CLI může běžet v několika prostředích prostředí, ale s mírnými variacemi formátu. Pokud máte neočekávané výsledky s příkazy Azure CLI, přečtěte si, jak úspěšně používat Azure CLI.

Další kroky

Informace o kódu, aktuálních problémech a verzích najdete v souboru custom-script-extension-linux.