Eseguire script su VM di Azure con l’estensione script personalizzato

Quando il tuo team inizia a fornire e configurare più macchine virtuali (VM) Azure di Windows, arriverà un momento in cui ti stancherai di reinventare la ruota. Hai bisogno di automazione! In questo articolo, accompagnami mentre ti guido passo passo nell’utilizzo delle estensioni di script personalizzate di Azure per eseguire script su VM Azure.

Se il tuo team si trova in un ambiente Windows, uno dei migliori strumenti per automatizzare la configurazione del server è PowerShell. Utilizzando il modulo Azure PowerShell, la tua organizzazione può sfruttare il potere di PowerShell non solo per automatizzare le attività in locale, ma anche per eseguire comandi su VM Azure in blocco anziché uno alla volta.

Una caratteristica che Microsoft ci ha fornito si chiama estensione di script personalizzata di Azure. L’estensione di script personalizzata è un’estensione della macchina virtuale di Azure che l’agente VM esegue per eseguire codice PowerShell arbitrario sulle tue VM utilizzando l’API di Azure anziché accedere alla VM o utilizzare PowerShell remoting.

Eseguire comandi in questo modo offre diversi vantaggi. Eseguire comandi utilizzando l’estensione personalizzata di Azure in Windows:

  • fornisce una maggiore sicurezza evitando di dover aprire porte di rete per il remoting di PowerShell
  • consente di eseguire facilmente codice PowerShell all’avvio della VM
  • trasferisce automaticamente risorse dallo storage di Azure alla tua VM come parte del processo di provisioning
  • Un modo semplice per eseguire script PowerShell archiviati in vari account di archiviazione di Azure

Abilitare un’estensione di script personalizzata di Azure per Windows può essere fatto in diversi modi. In questo articolo, ci concentreremo sull’abilitazione dell’estensione di script personalizzata tramite PowerShell, ma è anche possibile abilitare l’estensione tramite un modello di Azure Resource Manager (ARM).

Come semplice esempio, supponiamo che si desideri garantire che il remoting di PowerShell sia abilitato su una VM di Azure nella propria sottoscrizione. Per fare ciò, è necessario eseguire il seguente comando localmente su ogni VM:

Enable-PSRemoting -Force

Costruiamo un’estensione di script personalizzata per fare ciò.

Utilizzare Azure per eseguire uno script su una VM

Innanzitutto, creare uno script PowerShell chiamato Enable-PSRemoting.ps1 sul proprio computer locale con il comando sopra indicato al suo interno. Questo script deve essere eseguito su una VM di Azure. Per fare ciò, creeremo un altro piccolo script PowerShell chiamato New-CustomScriptExtension.ps1 per caricarlo in Azure e creare un’estensione di script personalizzata per eseguirlo. Prima di procedere, sarà necessario avere alcuni elementi:

  • Il gruppo di risorse di Azure e il nome dell’account di archiviazione in cui verrà archiviato lo script
  • Il nome del contenitore di archiviazione di Azure
  • Il nome della VM
  • Il nome del gruppo di risorse di Azure in cui si trova la VM

Questo script può essere suddiviso in due sezioni: caricare il piccolo script PowerShell in Azure e creare l’estensione di script personalizzata. Tutto il resto serve per collegare insieme questi due processi.

Caricare uno script PowerShell su Azure

Per prima cosa, caricheremo lo script Enable-PSRemoting.ps1 nell’account di archiviazione di Azure ($StorageAccountName) all’interno del contenitore ($ContainerName) nel gruppo di risorse ($ResourceGroupName).

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

Esecuzione dell’estensione dello script personalizzato

Quando esegui New-CustomScriptExtension.ps1, questo script caricherà lo script Enable-PSRemoting.ps1 nell’account di archiviazione di Azure specificato.

Ora che lo script è archiviato in Azure, puoi eseguirlo tramite l’estensione dello script personalizzato per la VM:

  • Nome: $VMName
  • Gruppo di risorse: $rgName
  • Account di archiviazione: $saName
  • Contenitore di archiviazione: $scName

Apri un editor di testo per New-CustomScriptExtension.ps1 e incolla l’esempio riportato di seguito. Quando lo esegui, eseguirà l’estensione dello script personalizzato di Azure per Windows, che eseguirà lo script PowerShell Enable-PSRemoting.ps1 che hai caricato in precedenza.

New-CustomScriptExtension.ps1
# Ottieni la VM che devi configurare $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Ottieni la chiave dell'account di archiviazione $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Abilita l'estensione dello script personalizzato ed esegui lo script $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

Riepilogo

Una volta completato questo script, puoi verificare che Enable-PSRemoting.ps1 sia stato eseguito sulla VM e che PowerShell remoting sia stato abilitato con successo. Ora dovresti essere in grado di utilizzare Invoke-Command contro la tua VM di Azure.

Sfruttando l’estensione di script personalizzato di Azure in Windows, ora hai la possibilità di eseguire in remoto qualsiasi tipo di script PowerShell sulle tue VM di Azure.

Source:
https://adamtheautomator.com/azure-run-script-on-vm/