Share via


De aangepaste scriptextensie van Azure versie 2 gebruiken met virtuele Linux-machines

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Houd rekening met uw gebruik en plan dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

De aangepaste scriptextensie versie 2 downloadt en voert scripts uit op virtuele Azure-machines (VM's). Gebruik deze extensie voor configuratie na implementatie, software-installatie of een andere configuratie- of beheertaak. U kunt scripts downloaden van Azure Storage of een andere toegankelijke internetlocatie, of u kunt ze opgeven voor de extensieruntime.

De aangepaste scriptextensie kan worden geïntegreerd met Azure Resource Manager-sjablonen. U kunt deze ook uitvoeren met behulp van de Azure CLI, Azure PowerShell of de REST API van Azure Virtual Machines.

In dit artikel wordt beschreven hoe u de aangepaste scriptextensie gebruikt vanuit de Azure CLI en hoe u de extensie uitvoert met behulp van een Azure Resource Manager-sjabloon. Dit artikel bevat ook stappen voor probleemoplossing voor Linux-systemen.

Er zijn twee versies van de aangepaste scriptextensie:

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

Gebruik versie 2 voor nieuwe en bestaande implementaties. De nieuwe versie is een invalvervanging. De migratie is net zo eenvoudig als het wijzigen van de naam en versie. U hoeft de extensieconfiguratie niet te wijzigen.

Vereisten

Ondersteunde Linux-distributies

Distributie 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+ Niet ondersteund
Oracle Linux 6.4+, 7.x+, 8.x+ Niet ondersteund
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+

Scriptlocatie

U kunt de extensie instellen voor het gebruik van uw Azure Blob Storage-referenties, zodat deze toegang heeft tot Azure Blob Storage. De scriptlocatie kan overal zijn zolang de VM naar dat eindpunt kan worden gerouteerd, bijvoorbeeld GitHub of een interne bestandsserver.

Verbinding met internet

Als u een script extern wilt downloaden, zoals van GitHub of Azure Storage, moet u andere firewall- of netwerkbeveiligingsgroep (NSG)-poorten openen. Als uw script zich bijvoorbeeld in Azure Storage bevindt, kunt u toegang toestaan met Azure NSG-servicetags voor Storage.

Als uw script zich op een lokale server bevindt, moet u mogelijk nog steeds andere firewall- of NSG-poorten openen.

Tips

  • De meeste fouten voor deze extensie worden veroorzaakt door syntaxisfouten in het script. Controleer of het script foutloos wordt uitgevoerd. Plaats meer logboekregistratie in het script om het gemakkelijker te maken om fouten te vinden.
  • Schrijf scripts die idempotent zijn, zodat het systeem niet wordt gewijzigd als de scripts per ongeluk meer dan één keer worden uitgevoerd.
  • Zorg ervoor dat de scripts geen gebruikersinvoer nodig hebben wanneer ze worden uitgevoerd.
  • Het script mag 90 minuten worden uitgevoerd. Een langere periode resulteert in een mislukte inrichting van de extensie.
  • Voeg geen opdrachten voor opnieuw opstarten aan het script toe. Opnieuw opstarten veroorzaakt problemen met andere extensies die worden geïnstalleerd en de extensie blijft niet doorgaan na het opnieuw opstarten.
  • Als u een script hebt dat ervoor zorgt dat u opnieuw moet opstarten voordat u toepassingen installeert en scripts uitvoert, plant u het opnieuw opstarten met behulp van een cron-taak of met behulp van hulpprogramma's zoals DSC-, Chef- of Puppet-extensies.
  • Voer geen script uit dat ervoor zorgt dat de Azure Linux Agent wordt gestopt of bijgewerkt. Het kan de extensie in een overgangsstatus laten en leiden tot een time-out.
  • De extensie voert een script slechts één keer uit. Als u bij elke opstartbewerking een script wilt uitvoeren, kunt u een cloud-init-installatiekopie gebruiken en een Scripts per boot-module gebruiken. U kunt ook het script gebruiken om een systeemservice-eenheid te maken.
  • U kunt slechts één versie van een extensie toepassen op de VM. Als u een tweede aangepast script wilt uitvoeren, werkt u de bestaande extensie bij met een nieuwe configuratie. U kunt de aangepaste scriptextensie ook verwijderen en opnieuw met het bijgewerkte script toepassen.
  • Als u wilt plannen wanneer een script wordt uitgevoerd, gebruikt u de extensie om een cron-taak te maken.
  • Wanneer het script wordt uitgevoerd, ziet u alleen de extensiestatus overgang van Azure Portal of CLI. Als u meer statusupdates voor een actief script wilt, maakt u uw eigen oplossing.
  • De aangepaste scriptextensie biedt geen systeemeigen ondersteuning voor proxyservers. U kunt echter een hulpprogramma voor bestandsoverdracht gebruiken, zoals Curl, dat ondersteuning biedt voor proxyservers in uw script.
  • Houd rekening met niet-standaard maplocaties waar uw scripts of opdrachten eventueel van gebruikmaken. Zorg voor logica om deze situatie aan te pakken.

Extensieschema

De configuratie van de aangepaste scriptextensie geeft zaken op zoals de scriptlocatie en de opdracht die moet worden uitgevoerd. U kunt deze informatie opslaan in configuratiebestanden, deze opgeven op de opdrachtregel of opgeven in een Azure Resource Manager-sjabloon.

U kunt gevoelige gegevens opslaan in een beveiligde configuratie, die is versleuteld en alleen ontsleuteld op de doel-VM. De beveiligde configuratie is handig wanneer de uitvoeringsopdracht geheimen bevat, zoals een wachtwoord. Hier volgt een voorbeeld:

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

Notitie

De managedIdentity eigenschap mag niet worden gebruikt in combinatie met de storageAccountName of storageAccountKey eigenschap.

Eigenschapswaarden

Naam Waarde of voorbeeld Gegevenstype
apiVersion 2019-03-01 datum
Publisher Microsoft.Azure.Extensions tekenreeks
type CustomScript tekenreeks
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py matrix
commandToExecute python MyPythonScript.py \<my-param1> tekenreeks
script IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= tekenreeks
skipDos2Unix false boolean
timestamp 123456789 32-bits geheel getal
storageAccountName examplestorageacct tekenreeks
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== tekenreeks
managedIdentity { }of { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }{ "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } JSON-object

Details van eigenschapswaarde

Eigenschappen Optioneel of vereist DETAILS
apiVersion Niet van toepassing U vindt de meest recente API-versie met behulp van Resource Explorer of met behulp van de opdracht az provider list -o json in de Azure CLI.
fileUris Optioneel URL's voor bestanden die moeten worden gedownload.
commandToExecute Vereist als script deze niet is ingesteld Het invoerpuntscript dat moet worden uitgevoerd. Gebruik deze eigenschap in plaats van script als uw opdracht geheimen bevat, zoals wachtwoorden.
script Vereist als commandToExecute deze niet is ingesteld Een base64-gecodeerd en optioneel gzip'ed script uitgevoerd door /bin/sh.
skipDos2Unix Optioneel Stel deze waarde in op false als u dos2unix-conversie van op scripts gebaseerde bestands-URL's of scripts wilt overslaan.
timestamp Optioneel Wijzig deze waarde alleen om een nieuwe uitvoering van het script te activeren. Een geheel getal is acceptabel, zolang deze verschilt van de vorige waarde.
storageAccountName Optioneel De naam van het opslagaccount. Als u opslagreferenties opgeeft, moeten alle fileUris waarden URL's zijn voor Azure-blobs.
storageAccountKey Optioneel De toegangssleutel van het opslagaccount.
managedIdentity Optioneel De beheerde identiteit voor het downloaden van bestanden. Waarden zijn clientId (optioneel, tekenreeks), de client-id van de beheerde identiteit en objectId (optioneel, tekenreeks), de object-id van de beheerde identiteit.

Openbare instellingen worden in duidelijke tekst verzonden naar de virtuele machine waarop het script wordt uitgevoerd. Beveiligde instellingen worden versleuteld via een sleutel die alleen bekend is bij Azure en de VM. De instellingen worden opgeslagen op de virtuele machine terwijl ze zijn verzonden. Als de instellingen zijn versleuteld, worden ze opgeslagen op de virtuele machine. Het certificaat dat wordt gebruikt om de versleutelde waarden te ontsleutelen, wordt opgeslagen op de virtuele machine. Het certificaat wordt ook gebruikt voor het ontsleutelen van instellingen, indien nodig, tijdens runtime.

Het gebruik van openbare instellingen kan handig zijn voor foutopsporing, maar we raden u ten zeerste aan om beveiligde instellingen te gebruiken.

U kunt de volgende waarden instellen in openbare of beveiligde instellingen. De extensie weigert configuraties waarbij deze waarden zijn ingesteld in zowel openbare als beveiligde instellingen.

  • commandToExecute
  • script
  • fileUris

Eigenschap: skipDos2Unix

De vorige versie van de aangepaste scriptextensie, Microsoft.OSTCExtensions.CustomScriptForLinuxconverteert DOS-bestanden automatisch naar UNIX-bestanden door te vertalen \r\n naar \n. Deze vertaling bestaat nog steeds en is standaard ingeschakeld. Deze conversie wordt toegepast op alle bestanden die zijn gedownload van fileUris of de scriptinstelling op basis van een van de volgende criteria:

  • De extensie is .sh, .txt, .py of .pl. De scriptinstelling komt altijd overeen met dit criterium omdat wordt aangenomen dat het een script wordt uitgevoerd met /bin/sh. De scriptinstelling wordt opgeslagen als script.sh op de virtuele machine.
  • Het bestand begint met #!.

De standaardwaarde is false, wat betekent dat dos2unix-conversie wordt uitgevoerd. U kunt de dos2unix-conversie overslaan door de instelling in te stellen skipDos2Unix op true:

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

Eigenschap: script

De aangepaste scriptextensie ondersteunt de uitvoering van een door de gebruiker gedefinieerd script. De scriptinstellingen combineren commandToExecute en fileUris in één instelling. In plaats van een bestand in te stellen voor downloaden vanuit Azure Storage of een GitHub-gist, kunt u het script coderen als een instelling. U kunt het script gebruiken om te vervangen commandToExecute en fileUris.

Hier volgen enkele vereisten:

  • Het script moet Base64 zijn gecodeerd.
  • Het script kan eventueel gzip'ed zijn.
  • U kunt de scriptinstelling gebruiken in openbare of beveiligde instellingen.
  • De maximale grootte van de gegevens van de scriptparameter is 256 kB. Als het script deze grootte overschrijdt, wordt het niet uitgevoerd.

Het volgende script wordt bijvoorbeeld opgeslagen in het bestand /script.sh/:

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

U maakt de juiste scriptinstelling voor aangepaste scriptextensie door de uitvoer van de volgende opdracht uit te voeren:

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

In de meeste gevallen kan het script desgewenst gzip'ed worden om de grootte verder te verkleinen. De aangepaste scriptextensie detecteert automatisch het gebruik van gzip-compressie.

cat script | gzip -9 | base64 -w 0

De aangepaste scriptextensie gebruikt het volgende algoritme om een script uit te voeren:

  1. Bevestig dat de lengte van de waarde van het script niet groter is dan 256 kB.
  2. Base64 decodeer de waarde van het script.
  3. Probeer de base64-gedecodeerde waarde te gunzipen.
  4. Schrijf de gedecodeerde en eventueel gedecomprimeerde waarde naar schijf: /var/lib/waagent/custom-script/#/script.sh.
  5. Voer het script uit met behulp van _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Eigenschap: managedIdentity

Notitie

Deze eigenschap moet alleen worden opgegeven in beveiligde instellingen.

De aangepaste scriptextensie, versie 2.1 en hoger, ondersteunt beheerde identiteiten voor het downloaden van bestanden uit URL's die zijn opgegeven in de fileUris instelling. Met deze methode kan de aangepaste scriptextensie toegang krijgen tot persoonlijke Azure Storage-blobs of containers zonder dat de gebruiker geheimen moet doorgeven, zoals SAS-tokens (Shared Access Signature) of opslagaccountsleutels.

Als u deze functie wilt gebruiken, voegt u een door het systeem toegewezen of door de gebruiker toegewezen identiteit toe aan de VM of virtuele-machineschaalset waarop de aangepaste scriptextensie naar verwachting wordt uitgevoerd. Verdeel vervolgens de beheerde identiteit toegang tot de Azure Storage-container of -blob.

Als u de door het systeem toegewezen identiteit op de doel-VM of virtuele-machineschaalset wilt gebruiken, stelt u deze in managedidentity op een leeg JSON-object.

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

Als u de door de gebruiker toegewezen identiteit wilt gebruiken op de doel-VM of virtuele-machineschaalset, configureert u managedidentity deze met de client-id of de object-id van de beheerde identiteit.

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

Notitie

De managedIdentity eigenschap mag niet worden gebruikt in combinatie met de storageAccountName of storageAccountKey eigenschap.

Sjabloonimplementatie

U kunt Azure VM-extensies implementeren met behulp van Azure Resource Manager-sjablonen. Het JSON-schema dat in de vorige sectie wordt beschreven, kan worden gebruikt in een Azure Resource Manager-sjabloon om de aangepaste scriptextensie uit te voeren tijdens de implementatie van de sjabloon. U vindt een voorbeeldsjabloon met de aangepaste scriptextensie op 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"
      ]
    }
  }
}

Notitie

Deze eigenschapsnamen zijn hoofdlettergevoelig. Gebruik de namen zoals hier wordt weergegeven om implementatieproblemen te voorkomen.

Azure-CLI

Wanneer u de Azure CLI gebruikt om de aangepaste scriptextensie uit te voeren, maakt u een configuratiebestand of -bestanden. Het configuratiebestand moet minimaal het bestand bevatten commandToExecute. De az vm extension set opdracht verwijst naar het configuratiebestand:

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

U kunt ook de instellingen in de opdracht opgeven als een tekenreeks met JSON-indeling. Met deze methode kan de configuratie worden opgegeven tijdens de uitvoering en zonder een afzonderlijk configuratiebestand.

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

Voorbeeld: Openbare configuratie met scriptbestand

In dit voorbeeld wordt het volgende scriptbestand met de naam script-config.json gebruikt:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. Maak het scriptbestand met behulp van de teksteditor van uw keuze of met behulp van de volgende CLI-opdracht:

    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. Voer de volgende opdracht uit:

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

Voorbeeld: Openbare configuratie zonder scriptbestand

In dit voorbeeld wordt de volgende JSON-indeling gebruikt:

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

Voer de volgende opdracht uit:

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

Voorbeeld: Openbare en beveiligde configuratiebestanden

Gebruik een openbaar configuratiebestand om de URI van het scriptbestand op te geven:

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

Gebruik een beveiligd configuratiebestand om de opdracht op te geven die moet worden uitgevoerd:

{
  "commandToExecute": "./config-music.sh"
}
  1. Maak het openbare configuratiebestand met behulp van de teksteditor van uw keuze of met behulp van de volgende CLI-opdracht:

    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. Maak het beveiligde configuratiebestand met behulp van de teksteditor van uw keuze of met behulp van de volgende CLI-opdracht:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Voer de volgende opdracht uit:

    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
    

Virtuele-machineschaalsets

Als u de aangepaste scriptextensie implementeert vanuit Azure Portal, hebt u geen controle over het verlopen van het SAS-token om toegang te krijgen tot het script in uw opslagaccount. De eerste implementatie werkt, maar wanneer het SAS-token van het opslagaccount verloopt, mislukt elke volgende schaalbewerking omdat de aangepaste scriptextensie geen toegang meer heeft tot het opslagaccount.

U wordt aangeraden PowerShell, de Azure CLI of een Azure Resource Manager-sjabloon te gebruiken wanneer u de aangepaste scriptextensie implementeert op een virtuele-machineschaalset. Op deze manier kunt u ervoor kiezen om een beheerde identiteit te gebruiken of direct controle te hebben over de vervaldatum van het SAS-token voor toegang tot het script in uw opslagaccount, zolang u dat nodig hebt.

Probleemoplossing

Wanneer de aangepaste scriptextensie wordt uitgevoerd, wordt het script gemaakt of gedownload naar een map die vergelijkbaar is met het volgende voorbeeld. De uitvoer van de opdracht wordt ook opgeslagen in deze map in stdout en stderr bestanden.

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

Als u problemen wilt oplossen, controleert u eerst het logboek van de Linux-agent en controleert u of de extensie is uitgevoerd:

sudo cat /var/log/waagent.log

Zoek naar de uitvoering van de extensie. Het ziet er ongeveer als volgt uit:

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

In de voorgaande uitvoer geldt het volgende:

  • Enable is wanneer de opdracht wordt uitgevoerd.
  • Download heeft betrekking op het downloaden van het pakket aangepaste scriptextensie van Azure, niet de scriptbestanden die zijn opgegeven in fileUris.

De Azure-scriptextensie produceert een logboek, dat u hier kunt vinden:

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

Zoek naar de afzonderlijke uitvoering. Het ziet er ongeveer als volgt uit:

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

Hier ziet u:

  • De enable opdracht waarmee dit logboek wordt gestart.
  • De instellingen zijn doorgegeven aan de extensie.
  • De extensie die het bestand downloadt en het resultaat van die actie.
  • De opdracht die wordt uitgevoerd en het resultaat.

U kunt ook de uitvoeringsstatus van de aangepaste scriptextensie ophalen, inclusief de werkelijke argumenten die zijn doorgegeven als commandToExecute, met behulp van de Azure CLI:

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

De uitvoer ziet eruit als de volgende tekst:

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

Problemen met azure CLI-syntaxis

De Azure CLI kan in verschillende shell-omgevingen worden uitgevoerd, maar met kleine variaties in de indeling. Als u onverwachte resultaten hebt met Azure CLI-opdrachten, raadpleegt u De Azure CLI gebruiken.

Volgende stappen

Zie custom-script-extension-linux voor meer informatie over de code, huidige problemen en versies.