Usare cloud-init per personalizzare una VM Linux durante la creazione con l'interfaccia della riga di comando di Azure 1.0Use cloud-init to customize a Linux VM during creation with the Azure CLI 1.0

Questo articolo illustra come creare script cloud-init per impostare il nome host, aggiornare i pacchetti installati e gestire gli account utente.This article shows how to make a cloud-init script to set the hostname, update installed packages, and manage user accounts. Gli script cloud-init vengono richiamati durante la creazione della VM dall'interfaccia della riga di comando di Azure.The cloud-init scripts are called during the VM creation from Azure CLI. L'articolo richiede:The article requires:

Versioni dell'interfaccia della riga di comando per completare l'attivitàCLI versions to complete the task

È possibile completare l'attività usando una delle versioni seguenti dell'interfaccia della riga di comando:You can complete the task using one of the following CLI versions:

Comandi rapidiQuick Commands

Creare uno script cloud-init.txt che consente di impostare il nome host, aggiornare tutti i pacchetti e aggiungere un utente sudo per Linux.Create a cloud-init.txt script that sets the hostname, updates all packages, and adds a sudo user to Linux.

#cloud-config
hostname: myVMhostname
apt_upgrade: true
users:
  - name: myNewAdminUser
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3<snip>==myAdminUser@myVM

Creare un gruppo di risorse in cui avviare le VM.Create a resource group to launch VMs into.

azure group create myResourceGroup westus

Creare una VM Linux che utilizza cloud-init per configurarla durante l'avvio.Create a Linux VM using cloud-init to configure it during boot.

azure vm create \
  -g myResourceGroup \
  -n myVM \
  -l westus \
  -y Linux \
  -f myVMnic \
  -F myVNet \
  -P 10.0.0.0/22 \
  -j mySubnet \
  -k 10.0.0.0/24 \
  -Q canonical:ubuntuserver:14.04.2-LTS:latest \
  -M ~/.ssh/id_rsa.pub \
  -u myAdminUser \
  -C cloud-init.txt

Procedura dettagliataDetailed walkthrough

IntroduzioneIntroduction

Quando si avvia una nuova VM Linux si ottiene un VM Linux standard senza alcuna personalizzazione né alcun adattamento.When you launch a new Linux VM, you are getting a standard Linux VM with nothing customized or ready for your needs. Cloud-init è un metodo standard che consente di inserire uno script o alcune impostazioni di configurazione in una VM Linux quando viene avviata per la prima volta.Cloud-init is a standard way to inject a script or configuration settings into that Linux VM as it is booting up for the first time.

In Azure è possibile apportare modifiche a una VM Linux in fase di distribuzione o avvio in tre modi diversi.On Azure, there are a three different ways to make changes onto a Linux VM as it is being deployed or booted.

Per inserire script in qualsiasi momento dopo l'avvio:To inject scripts at any time after boot:

  • Esecuzione diretta di comandi tramite SSHSSH to run commands directly
  • Inserire gli script usando l' estensione VMAccessdi Azure, in modo imperativo o in un modello di AzureInject scripts using the Azure VMAccess Extension, either imperatively or in an Azure template
  • Strumenti per la gestione della configurazione come Ansible, Salt, Chef e Puppet.Configuration management tools like Ansible, Salt, Chef, and Puppet.

Nota

: l'estensione VMAccess esegue uno script come radice nello stesso modo di SSH.: VMAccess Extension executes a script as root in the same way using SSH can. Tuttavia, l'utilizzo dell'estensione della VM consente di abilitare diverse funzionalità di da Azure potenzialmente utili a seconda dello scenario.However, using the VM extension enables several features that Azure offers that can be useful depending upon your scenario.

Disponibilità di cloud-init negli alias delle immagini a creazione rapida della VM di Azure:Cloud-init availability on Azure VM quick-create image aliases:

AliasAlias AutorePublisher OffertaOffer SKUSKU VersioneVersion Cloud-initcloud-init
CentOSCentOS OpenLogicOpenLogic CentosCentos 7,27.2 più recentilatest nono
CoreOSCoreOS CoreOSCoreOS CoreOSCoreOS StabileStable più recentilatest yes
DebianDebian credativcredativ DebianDebian 88 più recentilatest nono
openSUSEopenSUSE SUSESUSE openSUSEopenSUSE 13.213.2 più recentilatest nono
RHELRHEL RedhatRedhat RHELRHEL 7,27.2 più recentilatest nono
UbuntuLTSUbuntuLTS CanonicalCanonical UbuntuServerUbuntuServer 14.04.4-LTS14.04.4-LTS più recentilatest yes

Microsoft collabora con i partner per promuovere l'inclusione di cloud-init e utilizza le immagini da essi fornite per Azure.Microsoft is working with our partners to get cloud-init included and working in the images that they provide to Azure.

Aggiunta di uno script cloud-init per la creazione della VM con l'interfaccia della riga di comando di AzureAdding a cloud-init script to the VM creation with the Azure CLI

Per avviare uno script cloud-init durante la creazione di una VM in Azure, specificare il file cloud-init tramite l'opzione --custom-data dell'interfaccia della riga di comando di Azure.To launch a cloud-init script when creating a VM in Azure, specify the cloud-init file using the Azure CLI --custom-data switch.

Creare un gruppo di risorse in cui avviare le VM.Create a resource group to launch VMs into.

azure group create myResourceGroup westus

Creare una VM Linux che utilizza cloud-init per configurarla durante l'avvio.Create a Linux VM using cloud-init to configure it during boot.

azure vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --location westus \
  --os-type Linux \
  --nic-name myVMnic \
  --vnet-name myVNet \
  --vnet-address-prefix 10.0.0.0/22 \
  --vnet-subnet-name mySubnet \
  --vnet-subnet-address-prefix 10.0.0.0/24 \
  --image-urn canonical:ubuntuserver:14.04.2-LTS:latest \
  --ssh-publickey-file ~/.ssh/id_rsa.pub \
  --admin-username myAdminUser \
  --custom-data cloud-init.txt

Creazione di uno script cloud-init per impostare il nome host di una VM LinuxCreating a cloud-init script to set the hostname of a Linux VM

Una delle impostazioni più semplici e più importanti per qualsiasi VM Linux è il nome host.One of the simplest and most important settings for any Linux VM would be the hostname. È possibile definire facilmente tale impostazione tramite cloud-init con questo script.We can easily set this using cloud-init with this script.

Script cloud-init di esempio denominato cloud_config_hostname.txt.Example cloud-init script named cloud_config_hostname.txt.

#cloud-config
hostname: myservername

Durante l'avvio iniziale della VM questo script cloud-init imposta il nome host su myservername.During the initial startup of the VM, this cloud-init script sets the hostname to myservername.

azure vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --location westus \
  --os-type Linux \
  --nic-name myVMnic \
  --vnet-name myVNet \
  --vnet-address-prefix 10.0.0.0/22 \
  --vnet-subnet-name mySubNet \
  --vnet-subnet-address-prefix 10.0.0.0/24 \
  --image-urn canonical:ubuntuserver:14.04.2-LTS:latest \
  --ssh-publickey-file ~/.ssh/id_rsa.pub \
  --admin-username myAdminUser \
  --custom-data cloud_config_hostname.txt

Accedere e verificare il nome host della nuova VM.Login and verify the hostname of the new VM.

ssh myVM
hostname
myservername

Creazione di uno script cloud-init per aggiornare LinuxCreating a cloud-init script to update Linux

Per motivi di sicurezza, è consigliabile aggiornare la VM Ubuntu al primo avvio.For security, you want your Ubuntu VM to update on the first boot. Con cloud-init è possibile eseguire questa operazione tramite lo script seguente, a seconda della distribuzione Linux in uso.Using cloud-init we can do that with the follow script, depending on the Linux distribution you are using.

Script cloud-init cloud_config_apt_upgrade.txt di esempio per la famiglia DebianExample cloud-init script cloud_config_apt_upgrade.txt for the Debian Family

#cloud-config
apt_upgrade: true

Una volta avviato Linux, tutti i pacchetti installati vengono aggiornati tramite apt-get.After Linux has booted, all the installed packages are updated via apt-get.

azure vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --location westus \
  --os-type Linux \
  --nic-name myVMnic \
  --vnet-name myVNet \
  --vnet-address-prefix 10.0.0.0/22 \
  --vnet-subnet-name mySubNet \
  --vnet-subnet-address-prefix 10.0.0.0/24 \
  --image-urn canonical:ubuntuserver:14.04.2-LTS:latest \
  --ssh-publickey-file ~/.ssh/id_rsa.pub \
  --admin-username myAdminUser \
  --custom-data cloud_config_apt_upgrade.txt

Accedere e verificare che tutti i pacchetti siano aggiornati.Login and verify all packages are updated.

ssh myUbuntuVM
sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Creazione di uno script cloud-init per aggiungere un utente a LinuxCreating a cloud-init script to add a user to Linux

Una delle prime attività eseguite in qualsiasi nuova VM Linux è l'aggiunta di un utente distinto da root, per evitare di usare quest'ultimo.One of the first tasks on any new Linux VM is to add a user for yourself or to avoid using root. Le chiavi SSH rappresentano la procedura consigliata per la protezione e l'usabilità e vengono aggiunte al file ~/.ssh/authorized_keys con questo script cloud-init.SSH keys are best practice for security and for usability and they are added to the ~/.ssh/authorized_keys file with this cloud-init script.

Script cloud-init cloud_config_add_users.txt di esempio per la famiglia DebianExample cloud-init script cloud_config_add_users.txt for Debian Family

#cloud-config
users:
  - name: myCloudInitAddedAdminUser
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3<snip>==myAdminUser@myUbuntuVM

Una volta avviato Linux, tutti gli utenti elencati vengono creati e aggiunti al gruppo sudo.After Linux has booted, all the listed users are created and added to the sudo group.

azure vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --location westus \
  --os-type Linux \
  --nic-name myVMnic \
  --vnet-name myVNet \
  --vnet-address-prefix 10.0.0.0/22 \
  --vnet-subnet-name mySubNet \
  --vnet-subnet-address-prefix 10.0.0.0/24 \
  --image-urn canonical:ubuntuserver:14.04.2-LTS:latest \
  --ssh-publickey-file ~/.ssh/id_rsa.pub \
  --admin-username myAdminUser \
  --custom-data cloud_config_add_users.txt

Accedere e verificare l'utente appena creato.Login and verify the newly created user.

ssh myVM
cat /etc/group

OutputOutput

root:x:0:
<snip />
sudo:x:27:myCloudInitAddedAdminUser
<snip />
myCloudInitAddedAdminUser:x:1000:

Passaggi successiviNext Steps

Cloud-init si sta affermando come metodo standard per modificare la VM Linux in fase di avvio.Cloud-init is becoming one standard way to modify your Linux VM on boot. Azure offre inoltre estensioni VM che consentono di modificare la VM Linux in fase di avvio o durante l'esecuzione.Azure also has VM extensions, which allow you to modify your LinuxVM on boot or while it is running. Ad esempio, è possibile usare VMAccessExtension di Azure per reimpostare le informazioni SSH o dell'utente mentre la VM è in esecuzione.For example, you can use the Azure VMAccessExtension to reset SSH or user information while the VM is running. Con cloud-init, per reimpostare la password è necessario riavviare il computer.With cloud-init, you would need a reboot to reset the password.

Informazioni sulle estensioni e sulle funzionalità delle macchine virtualiAbout virtual machine extensions and features

Gestire utenti, SSH e dischi di controllo o di ripristino in VM Linux di Azure tramite l'estensione VMAccessManage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension