Condividi tramite


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

L'Estensione per script personalizzati versione 2 scarica ed esegue script nelle macchine virtuali di Azure. Usare questa estensione è utile per la configurazione post-distribuzione, l'installazione di software o altre 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 eseguirla tramite l'interfaccia della riga di comando di Azure, Azure PowerShell o l'API REST di Macchine virtuali di Azure.

Questo articolo descrive come usare l'Estensione per script personalizzati dall'interfaccia della riga di comando di Azure ed 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.

Annotazioni

Utilizza VM Assist per una diagnostica più rapida. Consigliamo di eseguire VM assist per Windows o VM assist per Linux. Questi strumenti di diagnostica basati su script consentono di identificare i problemi comuni che influiscono sull'agente guest della macchina virtuale di Azure e sull'integrità complessiva delle macchine virtuali.

Prerequisiti

Distribuzioni Linux supportate

Editore Distribuzione x64 ARM64
Alma Linux Community Alma Linux 8.x+, 9.x+ 8.x+, 9.x+
Credativ Debian 10+ 11.x+
Kinvolk Flatcar Linux 3374.2.x+ 3374.2.x+
Microsoft Azure Linux 2.x 2.x
Progetto openSUSE openSUSE 12.3+ Non supportato
Oracle Oracle Linux 6.4+, 7.x+, 8.x+ Non supportato
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 (versioni LTS) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Posizione degli script

È possibile impostare l'estensione per usare 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 possa eseguire l'instradamento a tale endpoint, ad esempio GitHub o un file server interno.

Connettività Internet

Per scaricare uno script esternamente, ad esempio da GitHub o Archiviazione di Azure, è necessario aprire altre porte del firewall o del gruppo di sicurezza di rete (NSG). Ad esempio, se lo script è collocato in Archiviazione di Azure, è possibile consentire l'accesso usando i tag del servizio per archiviazione NSG di Azure.

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

Suggerimenti

  • La frequenza di errore più elevata per questa estensione è dovuta a errori di sintassi nello script. Verificare che lo script venga eseguito senza errori. Inserire un maggior numero di registrazioni nello script per facilitare l'individuazione dei problemi.
  • Scrivere script idempotenti, in modo che la loro esecuzione accidentale più di una volta non causi modifiche al sistema.
  • Assicurarsi che gli script non richiedano l'input dell'utente durante l'esecuzione.
  • Il tempo consentito per l'esecuzione dello script è 90 minuti. Una durata superiore causa il fallimento del provisioning dell'estensione.
  • Non inserire riavvii all'interno dello script. Il riavvio causa problemi con altre estensioni che vengono installate e l'estensione non continua dopo il riavvio.
  • Se si usa uno script che causa un riavvio prima dell'installazione di applicazioni e l'esecuzione di script, pianificare il riavvio utilizzando un processo cron o strumenti come DSC, Chef o estensioni Puppet.
  • Non eseguire uno script che causi un arresto o un aggiornamento dell'Agente Linux di Azure. Potrebbe lasciare l'estensione in uno stato di transizione e causare un timeout.
  • L'estensione esegue uno script una sola volta. Se si vuole eseguire uno script a ogni avvio, è possibile usare un'immagine cloud-init e usare un modulo Script per avvio. In alternativa, è possibile usare lo script per creare un'unità di servizio systemd.
  • È possibile applicare una sola versione di un'estensione alla macchina virtuale. Per eseguire un secondo script personalizzato, aggiornare l'estensione esistente con una nuova configurazione. In alternativa, è possibile rimuovere l'Estensione per script personalizzati e riapplicarla con lo script aggiornato.
  • Se si desidera pianificare il momento in cui viene eseguito uno script, usare l'estensione per creare un processo cron.
  • Quando lo script è in esecuzione, lo stato dell'estensione in transizione viene visualizzato solo dal portale di Azure o dall'interfaccia della riga di comando. Se si desiderano aggiornamenti dello stato più frequenti per uno script in esecuzione, creare una propria soluzione.
  • L'estensione per script personalizzati non supporta nativamente i server proxy. Tuttavia, è possibile usare uno strumento di trasferimento file che supporta i server proxy all'interno dello script, ad esempio Curl.
  • Tenere presente le posizioni delle directory non predefinite su cui potrebbero basarsi 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 in file di configurazione, specificarle sulla riga di comando o definirle in un modello di Azure Resource Manager.

I dati sensibili possono essere archiviati in una configurazione protetta, che viene crittografata e decrittografata 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>"
    }
  }
}

Annotazioni

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

Valori delle proprietà

Nome Valore o esempio Tipo di dati
apiVersion 2019-03-01 date
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
Identità gestita { } o { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } o { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" } 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 az provider list -o json nell'interfaccia della riga di comando di Azure.
fileUris Opzionale URL per i file da scaricare.
commandToExecute Obbligatorio se script non è impostato Script del punto di ingresso da eseguire. Usare invece questa proprietà di scriptse il comando contiene segreti, ad esempio password.
script Obbligatorio se commandToExecute non è impostato Uno script con codifica Base64 e facoltativamente uno script compresso con GZip eseguito da /bin/sh.
skipDos2Unix Opzionale Impostare questo valore su false se si desidera ignorare la conversione dos2unix di URL o script di file basati su script.
timestamp Opzionale Modificare questo valore solo per attivare una riesecuzione dello script. Qualsiasi valore intero è accettabile, purché sia diverso dal valore precedente.
storageAccountName Opzionale Nome dell'account di archiviazione. Se si specificano credenziali di archiviazione, tutti i valori di fileUris devono essere URL relativi a BLOB di Azure.
storageAccountKey Opzionale La chiave di accesso per l'account di archiviazione.
Identità gestita Opzionale L’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 alla macchina virtuale e ad Azure. Le impostazioni vengono salvate nella macchina virtuale a mano a mano che vengono 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.

Le impostazioni pubbliche possono essere utili per il debug, ma è vivamente consigliabile usare 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 conversione esiste ancora ed è abilitata per impostazione predefinita. La conversione viene applicata a tutti i file scaricati da fileUris o all'impostazione script basata su 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, pertanto la conversione dos2unix viene eseguita. È possibile ignorare la conversione dos2unix impostando skipDos2Unix su true:

{
  "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. Anziché dover configurare un file per il download da Archiviazione di Azure o dal gist di GitHub, è possibile codificare lo script come impostazione. È possibile usare lo script per sostituire commandToExecute e fileUris.

Ecco alcuni requisiti:

  • Lo script deve avere codifica Base64.
  • Lo script può essere facoltativamente compresso con GZip.
  • È possibile usare l'impostazione 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 per script personalizzati corretta, eseguire l'output del comando seguente:

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

Nella maggior parte dei casi, lo script può essere facoltativamente compresso con GZip per ridurre ulteriormente le dimensioni. L'Estensione per script personalizzati rileva automaticamente l'uso della compressione GZip.

cat script | gzip -9 | base64 -w 0

L'Estensione per script personalizzati usa l'algoritmo seguente per eseguire uno script:

  1. Assicurarsi che la lunghezza del valore dello script non superi 256 KB.
  2. Decodificare in Base64 il valore dello script.
  3. Provare a comprimere con GZip il valore con decodifica 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

Annotazioni

Questa proprietà deve essere specificata solo nelle impostazioni protette.

L'Estensione per script personalizzati, versione 2.1 e successive, supporta identità gestite per scaricare i file dagli URL forniti nell'impostazione fileUris. Questo approccio consente all'Estensione per script personalizzati di accedere a BLOB o contenitori privati di Archiviazione di Azure senza che l'utente debba passare segreti come i token di firma di accesso condiviso o le 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 ci si aspetta venga eseguita l'Estensione per script personalizzati. Quindi concedere all'identità gestita l'accesso al contenitore o al BLOB di Archiviazione di Azure.

Per usare l'identità assegnata dal sistema nella macchina virtuale o nel set di scalabilità di macchine virtuali di destinazione, impostare managedidentity su 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 o nel set di scalabilità di macchine virtuali di destinazione, 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": "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" }
}

Annotazioni

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

Distribuzione del modello

Le estensioni macchina virtuale di Azure possono essere distribuite usando i modelli di Azure Resource Manager. Lo schema JSON indicato nella sezione precedente può essere usato in un modello di Azure Resource Manager per eseguire l'estensione per gli script personalizzati durante la distribuzione. Un modello di esempio che include l'Estensione per script personalizzati è disponibile su 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"
      ]
    }
  }
}

Annotazioni

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

Interfaccia CLI di Azure

Quando si usa l'interfaccia della riga di comando di Azure per eseguire l'Estensione per script personalizzati, creare uno o più file di configurazione. Come minimo, il file di configurazione deve contenere commandToExecute. Il comando az vm extension set 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 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 pubblica e protetta

Usare un file di configurazione pubblica 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 protetta 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à per macchine virtuali

Se si distribuisce l'Estensione per script personalizzati dal portale di Azure, non si ha il controllo sulla scadenza del token di firma di accesso condiviso per l'accesso 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 Azureo un modello di Azure Resource Manager quando si distribuisce l'Estensione per script personalizzati 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 questo problema, controllare innanzitutto il log agente Linux e assicurarsi che l'estensione sia stata eseguita:

sudo cat /var/log/waagent.log

Cercare l'esecuzione dell'estensione. Ha un 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 indica il momento in cui il comando inizia l'esecuzione.
  • 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. Ha un 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.
  • Le impostazioni passate all'estensione.
  • L'estensione che esegue il download del file e il relativo 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, tramite 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 e le versioni correnti, vederecustom-script-extension-linux.