Dela via


Självstudiekurs – Så här använder du cloud-init för att anpassa en virtuell Linux-dator i Azure vid den första starten

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

I en tidigare självstudiekurs lärde du dig hur du anslöt till en virtuell dator med SSH och installerade NGINX manuellt. Om du vill skapa virtuella datorer på ett snabbt och konsekvent sätt, kan det vara användbart med någon form av automatisering. Ett vanligt sätt att anpassa en virtuell dator första gången den startar är att använda cloud-init. I den här självstudiekursen får du lära du dig att:

  • Skapa en cloud-init-konfigurationsfil
  • Skapa en virtuell dator som använder en cloud-init-fil
  • Visa en Node.js-app som körs efter att den virtuella datorn skapats
  • Använda Key Vault för att förvara certifikat säkert
  • Automatisera säker distribution av NGINX med cloud-init

Om du väljer att installera och använda CLI:t lokalt för den här självstudien måste du köra Azure CLI version 2.0.30 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Översikt över Cloud-init

Cloud-init är ett vanligt sätt att anpassa en virtuell Linux-dator när den startas för första gången. Du kan använda cloud-init till att installera paket och skriva filer eller för att konfigurera användare och säkerhet. Eftersom cloud-init körs under hela den ursprungliga startprocessen finns det inga fler steg eller obligatoriska agenter att tillämpa för konfigurationen.

Cloud-init fungerar med olika distributioner. Du använder till exempel inte apt-get install eller yum install när du vill installera ett paket. I stället definierar du en lista med paket att installera. Cloud-init använder automatiskt rätt pakethanteringsverktyg för den distribution du valt.

Vi arbetar med våra partners och försöker göra så att cloud-init inkluderas och fungerar i de avbildningar de tillhandahåller till Azure. Detaljerad information om stöd för cloud-init för varje distribution finns i Cloud-init-stöd för virtuella datorer i Azure.

Skapa en cloud-init-konfigurationsfil

Om du vill se hur cloud-init fungerar i praktiken skapar du en virtuell dator som installerar NGINX och kör en enkel ”Hello World” Node.js-app. Följande cloud-init-konfiguration installerar de paket som krävs, skapar en Node.js app och initierar och startar sedan appen.

I bash-prompten eller i Cloud Shell skapar du en fil med namnet cloud-init.txt och klistrar in följande konfiguration. Skriv till exempel sensible-editor cloud-init.txt för att skapa filen och se en lista över tillgängliga redigerare. Se till att hela cloud-init-filen kopieras korrekt, särskilt den första raden:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
    path: /etc/nginx/sites-available/default
    defer: true
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
    path: /home/azureuser/myapp/index.js
    defer: true
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Mer information om konfigurationsalternativ för cloud-init finns i konfigurationsexempel för cloud-init.

Skapa en virtuell dator

Innan du kan skapa en virtuell dator skapar du en resursgrupp med az group create. I följande exempel skapas en resursgrupp. I dessa kommandon läggs ett slumpmässigt suffix till i resursgruppen och VM-namnen för att förhindra namnkollisioner under upprepade distributioner.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroupAutomate$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION

Resultat:

{
  "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupAutomatexxx",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroupAutomatexxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Skapa nu en virtuell dator med az vm create. Använd parametern --custom-data för att skicka in din cloud-init-konfigurationsfil. Ange den fullständiga sökvägen till cloud-init.txt om du sparat filen utanför din aktuella arbetskatalog. I följande exempel skapas en virtuell dator. Observera att namnet på den virtuella datorn också läggs till med det slumpmässiga suffixet.

export VM_NAME="myAutomatedVM$RANDOM_SUFFIX"
az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init.txt

Resultat:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx",
  "powerState": "VM running",
  "publicIpAddress": "x.x.x.x",
  "resourceGroup": "myResourceGroupAutomatexxx",
  "zones": ""
}

Det tar några minuter innan den virtuella datorn skapas, paketen installeras och appen startar. Det finns bakgrundsaktiviteter som fortsätter att köras när Azure CLI återgår till kommandotolken. Det kan ta några minuter innan du kan öppna programmet. När den virtuella datorn har skapats ska du anteckna publicIpAddress som visas av Azure CLI. Adressen används för att komma åt Node.js i en webbläsare.

För att låta webbtrafik nå din virtuella dator öppnar du port 80 från Internet med az vm open-port:

az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME

Resultat:

{
  "endpoints": [
    {
      "name": "80",
      "protocol": "tcp",
      "publicPort": 80,
      "privatePort": 80
    }
  ],
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx"
}

Testa webbappen

Nu kan du öppna en webbläsare och ange den offentliga IP-adressen i adressfältet. Ange din offentliga IP-adress från skapandeprocessen av den virtuella datorn. Din Node.js-app visas som den visas i det här exemplet:

Skärmbild som visar NGINX-webbplatsen som körs.

Nästa steg

I den här självstudien använde du cloud-init för att konfigurera virtuella datorer vid första start. Du har lärt dig att:

  • Skapa en cloud-init-konfigurationsfil
  • Skapa en virtuell dator som använder en cloud-init-fil
  • Visa en Node.js-app som körs efter att den virtuella datorn skapats
  • Använda Key Vault för att förvara certifikat säkert
  • Automatisera säker distribution av NGINX med cloud-init

Gå vidare till nästa självstudie där du får lära dig att skapa anpassade avbildningar för virtuella datorer.