Usare l'estensione per script personalizzati di Azure versione 2 con macchine virtuali Linux

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Prendere in considerazione l'uso e il piano di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

L'estensione script personalizzata versione 2 scarica ed esegue script in macchine virtuali (VM) di Azure. Usare questa estensione per la configurazione post-distribuzione, l'installazione del software o qualsiasi altra attività di configurazione o gestione. È possibile scaricare gli script da Archiviazione di Azure, o da un altro percorso Internet accessibile, oppure è possibile fornirli al runtime dell'estensione.

L'estensione per script personalizzati è integrabile con i modelli di Azure Resource Manager. È anche possibile eseguirlo usando l'interfaccia della riga di comando di Azure, Azure PowerShell o l'API REST di Azure Macchine virtuali.

Questo articolo descrive come usare l'estensione script personalizzato dall'interfaccia della riga di comando di Azure e come eseguire l'estensione usando un modello di Azure Resource Manager. Sono inoltre illustrate le procedure di risoluzione dei problemi per i sistemi Linux.

Esistono due versioni dell'estensione per script personalizzati:

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

Usare la versione 2 per le distribuzioni nuove ed esistenti. La nuova versione è una sostituzione di rilascio. La migrazione è semplice come modificare il nome e la versione. Non è necessario modificare la configurazione dell'estensione.

Prerequisiti

Distribuzioni Linux supportate

Distribuzione 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+ Non supportato
Oracle Linux 6.4+, 7.x+, 8.x+ Non supportato
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+

Posizione degli script

È possibile impostare l'estensione per utilizzare le credenziali di Archiviazione BLOB di Azure per accedere ad Archiviazione BLOB di Azure. La posizione dello script può essere ovunque, purché la macchina virtuale sia in grado di connettersi con l'endpoint, ad esempio GitHub o un file server interno.

Connettività Internet

Per scaricare uno script dall'esterno, ad esempio da GitHub o Archiviazione di Azure, è necessario aprire altri firewall o porte NSG del gruppo di sicurezza di rete. Ad esempio, se lo script si trova in Archiviazione di Azure, è possibile consentire l'accesso utilizzando i tag del servizio Azure NSG per Archiviazione.

Se lo script si trova su un server locale, potrebbe essere necessario aprire altri firewall o porte NSG.

Suggerimenti

  • La frequenza di errore più elevata per questa estensione è dovuta a errori di sintassi nello script. Verificare che lo script funzioni senza errori. Inserire un maggior numero di registrazioni nello script per rendere più facile l'individuazione dei problemi.
  • Scrivere script idempotenti, in modo che la loro esecuzione accidentale non causi modifiche al sistema.
  • Controllare che gli script non richiedano l'input dell'utente durante l'esecuzione.
  • Il tempo di esecuzione dello script è di 90 minuti. Una durata superiore comporta il fallimento della fornitura dell'estensione.
  • Non inserire riavvii all'interno dello script. Il riavvio causa problemi con altre estensioni in fase di installazione e l'estensione non continua dopo il riavvio.
  • Se si utilizza uno script che causa un riavvio prima di installare le applicazioni e di eseguire lo script, pianificare il riavvio utilizzando un cron job o strumenti come DSC, Chef o le estensioni di Puppet.
  • Non eseguire uno script che provochi l'arresto o l'aggiornamento di Azure Linux Agent. Potrebbe lasciare l'estensione in uno stato di transizione e portare a un time-out.
  • L'estensione esegue lo script una sola volta. Se si vuole eseguire uno script a ogni avvio, si può usare un'immagine cloud-init e un modulo Scripts per Boot. In alternativa, si può usare lo script per creare un'unità di servizio systemd.
  • È possibile avere una sola versione dell'estensione sulla macchina virtuale. Per eseguire un secondo script personalizzato, aggiornare l'estensione esistente con una nuova configurazione. In alternativa, è possibile rimuovere l'estensione Script personalizzato e riapplicarla con lo script aggiornato.
  • Se si desidera programmare l'esecuzione di uno script, utilizzare l'estensione per creare un cron job.
  • Quando lo script è in esecuzione, lo stato dell'estensione in transizione viene visualizzato solo dal portale Azure o dalla CLI. Se si desiderano aggiornamenti di stato più frequenti per uno script in esecuzione, creare la propria soluzione.
  • L'estensione Script personalizzato non supporta nativamente i server proxy. Tuttavia, è possibile utilizzare uno strumento di trasferimento di fileCurl che supporta i server proxy all'interno dello script.
  • Tenere presente le posizioni delle directory non predefinite su cui potrebbero fare affidamento gli script o i comandi. e includere la logica necessaria per gestirli.

Schema dell'estensione

La configurazione dell'estensione script personalizzata specifica informazioni come il percorso dello script e il comando da eseguire. È possibile archiviare queste informazioni nei file di configurazione, specificarla nella riga di comando o specificarla in un modello di Azure Resource Manager.

È possibile archiviare i dati sensibili in una configurazione protetta, crittografata e decrittografata solo nella macchina virtuale di destinazione. La configurazione protetta è utile quando il comando di esecuzione include segreti, ad esempio una password. Ecco un esempio:

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

Nota

La managedIdentity proprietà non deve essere utilizzata insieme alla storageAccountName proprietà o storageAccountKey .

Valori delle proprietà

Nome Valore o esempio Tipo di dati
apiVersion 2019-03-01 data
publisher Microsoft.Azure.Extensions string
type CustomScript string
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py array
commandToExecute python MyPythonScript.py \<my-param1> string
script IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= string
skipDos2Unix false boolean
timestamp 123456789 Intero a 32 bit
storageAccountName examplestorageacct string
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== string
managedIdentity { } o { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } o { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } Oggetto JSON

Dettagli sui valori delle proprietà

Proprietà Facoltativo o obbligatorio Dettagli
apiVersion Non applicabile È possibile trovare la versione più aggiornata dell'API usando Esplora risorse o usando il comando nell'interfaccia della riga di comando az provider list -o json di Azure.
fileUris Facoltativo URL per i file da scaricare.
commandToExecute Obbligatorio se script non è impostato Script del punto di ingresso da eseguire. Usare questa proprietà anziché script se il comando contiene segreti, ad esempio password.
script Obbligatorio se commandToExecute non è impostato Uno script con codifica Base64 e facoltativamente gzip'ed eseguito da /bin/sh.
skipDos2Unix Facoltativo Impostare questo valore su false se si desidera ignorare la conversione dos2unix di URL o script di file basati su script.
timestamp Facoltativo Modificare questo valore solo per attivare una riesecuzione dello script. Qualsiasi valore intero è accettabile, purché sia diverso dal valore precedente.
storageAccountName Facoltativo Nome dell'account di archiviazione. Se si specificano le credenziali di archiviazione, tutti i fileUris valori devono essere URL per i BLOB di Azure.
storageAccountKey Facoltativo Chiave di accesso dell'account di archiviazione.
managedIdentity Facoltativo Identità gestita per il download dei file. I valori sono clientId (facoltativo, stringa), ovvero l'ID client dell'identità gestita e objectId (facoltativo, stringa), ovvero l'ID oggetto dell'identità gestita.

Le impostazioni pubbliche vengono inviate in testo non crittografato alla macchina virtuale in cui viene eseguito lo script. Le impostazioni protette vengono crittografate tramite una chiave nota solo per Azure e per la macchina virtuale. Le impostazioni vengono salvate nella macchina virtuale man mano che sono state inviate. Ovvero, se le impostazioni sono state crittografate, vengono salvate crittografate nella macchina virtuale. Il certificato usato per decrittografare i valori crittografati viene archiviato nella macchina virtuale. Il certificato viene usato anche per decrittografare le impostazioni, se necessario, in fase di esecuzione.

L'uso delle impostazioni pubbliche può essere utile per il debug, ma è consigliabile usare le impostazioni protette.

È possibile impostare i valori seguenti in impostazioni pubbliche o protette. L'estensione rifiuta qualsiasi configurazione in cui questi valori vengono impostati in impostazioni pubbliche e protette.

  • commandToExecute
  • script
  • fileUris

Proprietà: skipDos2Unix

La versione precedente dell'estensione per script personalizzati, Microsoft.OSTCExtensions.CustomScriptForLinux, converte automaticamente i file DOS in file UNIX convertendo \r\n in \n. Questa traduzione esiste ancora ed è attivata per impostazione predefinita. Questa conversione viene applicata a tutti i file scaricati da fileUris o all'impostazione dello script in base a uno dei criteri seguenti:

  • L'estensione è .sh, .txt, .py o .pl. L'impostazione dello script corrisponde sempre a questo criterio perché si presuppone che sia uno script eseguito con /bin/sh. L'impostazione dello script viene salvata come script.sh nella macchina virtuale.
  • Il file inizia con #!.

Il valore predefinito è false, ovvero viene eseguita la conversione dos2unix. È possibile ignorare la conversione dos2unix impostando su skipDos2Unixtrue:

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

Proprietà: script

L'estensione script personalizzato supporta l'esecuzione di uno script definito dall'utente. Le impostazioni dello script combinano commandToExecute e fileUris in un'unica impostazione. Invece di dover configurare un file per il download da Archiviazione di Azure o da un gist gitHub, è possibile codificare lo script come impostazione. È possibile usare lo script per sostituire commandToExecute e fileUris.

Ecco alcuni requisiti:

  • Lo script deve essere codificato in Base64.
  • Lo script può essere facoltativamente compresso con GZip.
  • È possibile usare l'impostazione dello script nelle impostazioni pubbliche o protette.
  • La dimensione massima dei dati del parametro script è 256 KB. Se lo script supera questa dimensione, non viene eseguito.

Ad esempio, lo script seguente viene salvato nel file /script.sh/:

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

Per costruire l'impostazione dello script di estensione script personalizzata corretta, eseguire l'output del comando seguente:

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

Nella maggior parte dei casi, lo script può facoltativamente essere gzip'ed per ridurre ulteriormente le dimensioni. L'estensione script personalizzata rileva automaticamente l'uso della compressione gzip.

cat script | gzip -9 | base64 -w 0

L'estensione script personalizzata usa l'algoritmo seguente per eseguire uno script:

  1. Asserire che la lunghezza del valore dello script non supera 256 KB.
  2. Decodificare il valore dello script in Base64.
  3. Provare a gunzip il valore decodificato Base64.
  4. Scrivere il valore decodificato e facoltativamente decompresso su disco: /var/lib/waagent/custom-script/#/script.sh.
  5. Eseguire lo script usando _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Proprietà: managedIdentity

Nota

Questa proprietà deve essere specificata solo nelle impostazioni protette.

L'estensione per script personalizzati, versione 2.1 e successive, supporta le identità gestite per scaricare i file dagli URL forniti nell'impostazione fileUris . Questo approccio consente all'estensione per script personalizzati di accedere Archiviazione di Azure BLOB o contenitori privati senza che l'utente deve passare segreti come token di firma di accesso condiviso o chiavi dell'account di archiviazione.

Per usare questa funzionalità, aggiungere un'identità assegnata dal sistema o assegnata dall'utente alla macchina virtuale o al set di scalabilità di macchine virtuali in cui è prevista l'esecuzione dell'estensione script personalizzata. Concedere quindi all'identità gestita l'accesso al contenitore o al BLOB Archiviazione di Azure.

Per usare l'identità assegnata dal sistema nella macchina virtuale di destinazione o nel set di scalabilità di macchine virtuali, impostare su managedidentity un oggetto JSON vuoto.

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

Per usare l'identità assegnata dall'utente nella macchina virtuale di destinazione o nel set di scalabilità di macchine virtuali, configurare managedidentity con l'ID client o l'ID oggetto dell'identità gestita.

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

Nota

La managedIdentity proprietà non deve essere utilizzata insieme alla storageAccountName proprietà o storageAccountKey .

Distribuzione del modello

È possibile distribuire le estensioni di macchine virtuali di Azure usando i modelli di Azure Resource Manager. Lo schema JSON descritto nella sezione precedente può essere usato in un modello di Azure Resource Manager per eseguire l'estensione script personalizzato durante la distribuzione del modello. È possibile trovare un modello di esempio che include l'estensione per script personalizzati in 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"
      ]
    }
  }
}

Nota

Questi nomi di proprietà fanno distinzione tra maiuscole e minuscole. Per evitare problemi nella distribuzione, usare i nomi come indicato di seguito.

Interfaccia della riga di comando di Azure

Quando si usa l'interfaccia della riga di comando di Azure per eseguire l'estensione script personalizzata, creare un file di configurazione o file. Come minimo, il file di configurazione deve contenere commandToExecute. Il az vm extension set comando fa riferimento al file di configurazione:

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

In alternativa, è possibile specificare le impostazioni nel comando come stringa in formato JSON. Questo approccio consente di specificare la configurazione durante l'esecuzione e senza un file di configurazione separato.

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

Esempio: Configurazione pubblica con il file di script

In questo esempio viene usato il file di script seguente denominato 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. Creare il file di script usando l'editor di testo preferito o usando il comando dell'interfaccia della riga di comando seguente:

    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. Esegui questo comando:

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

Esempio: Configurazione pubblica senza file script

In questo esempio viene usato il contenuto in formato JSON seguente:

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

Esegui questo comando:

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

Esempio: File di configurazione pubblici e protetti

Usare un file di configurazione pubblico per specificare l'URI del file di script:

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

Usare un file di configurazione protetto per specificare il comando da eseguire:

{
  "commandToExecute": "./config-music.sh"
}
  1. Creare il file di configurazione pubblico usando l'editor di testo preferito o usando il comando dell'interfaccia della riga di comando seguente:

    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. Creare il file di configurazione protetto usando l'editor di testo preferito o usando il comando dell'interfaccia della riga di comando seguente:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Esegui questo comando:

    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
    

Set di scalabilità di macchine virtuali

Se si distribuisce l'estensione script personalizzata dal portale di Azure, non si ha il controllo sulla scadenza del token di firma di accesso condiviso per accedere allo script nell'account di archiviazione. La distribuzione iniziale funziona, ma quando scade il token di firma di accesso condiviso dell'account di archiviazione, qualsiasi operazione di ridimensionamento successiva ha esito negativo perché l'estensione per script personalizzati non può più accedere all'account di archiviazione.

È consigliabile usare PowerShell, l'interfaccia della riga di comando di Azure o un modello di Azure Resource Manager quando si distribuisce l'estensione script personalizzata in un set di scalabilità di macchine virtuali. In questo modo, è possibile scegliere di usare un'identità gestita o di avere il controllo diretto della scadenza del token di firma di accesso condiviso per l'accesso allo script nell'account di archiviazione, purché sia necessario.

Risoluzione dei problemi

Quando viene eseguita l'estensione per script personalizzati, lo script viene creato o scaricato in una directory simile all'esempio seguente. Anche l'output del comando viene salvato in questa directory, nei file stdout e stderr.

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

Per risolvere i problemi, controllare prima di tutto il log dell'agente Linux e assicurarsi che l'estensione sia stata eseguita:

sudo cat /var/log/waagent.log

Cercare l'esecuzione dell'estensione. L'aspetto è simile al seguente:

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

Nell'output precedente:

  • Enable è all'avvio dell'esecuzione del comando.
  • Download si riferisce al download del pacchetto di estensione per script personalizzati da Azure, non ai file di script specificati in fileUris.

L'estensione per script di Azure genera un log che è possibile trovare in questo percorso:

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

Cercare l'esecuzione singola. L'aspetto è simile al seguente:

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

È possibile visualizzare:

  • Comando enable che avvia questo log.
  • Impostazioni passate all'estensione.
  • Estensione che scarica il file e il risultato di tale azione.
  • Il comando in esecuzione e il relativo risultato.

È anche possibile recuperare lo stato di esecuzione dell'estensione script personalizzato, inclusi gli argomenti effettivi passati come commandToExecute, usando l'interfaccia della riga di comando di Azure:

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

L'output ha un aspetto simile al testo seguente:

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

Problemi di sintassi dell'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure può essere eseguita in diversi ambienti della shell, ma con lievi variazioni di formato. Se si hanno risultati imprevisti con i comandi dell'interfaccia della riga di comando di Azure, vedere Come usare correttamente l'interfaccia della riga di comando di Azure.

Passaggi successivi

Per visualizzare il codice, i problemi correnti e le versioni, vedere custom-script-extension-linux.