Delen via


Zelfstudie - Cloud-init gebruiken voor het aanpassen van een virtuele Linux-machine in Azure bij de eerste keer dat die wordt opgestart

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

In een vorige zelfstudie hebt u geleerd hoe u een virtuele machine (VM) via SSH kunt verbinden en NGINX handmatig kunt installeren. Als u virtuele machines op een snelle en consistente manier wilt maken, is een vorm van automatisering doorgaans gewenst. Een veelgebruikte manier voor het aanpassen van een virtuele machine bij de eerste keer opstarten is het gebruik van cloud-init. In deze zelfstudie leert u het volgende:

  • Een cloud-init-configuratiebestand maken
  • Een virtuele machine maken die gebruikmaakt van een cloud-init-bestand
  • Een actieve Node.js-app weergeven nadat de virtuele machine is gemaakt
  • Key Vault gebruiken voor het veilig opslaan van certificaten
  • Beveiligde implementaties van NGINX automatiseren met cloud-init

Als u ervoor kiest om de CLI lokaal te installeren en te gebruiken, moet u Azure CLI 2.0.30 of hoger gebruiken voor deze zelfstudie. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Overzicht van cloud-init

Cloud-init is een veelgebruikte benadering voor het aanpassen van een Linux-VM als deze voor de eerste keer wordt opgestart. U kunt cloud-init gebruiken voor het installeren van pakketten en schrijven van bestanden, of om gebruikers en beveiliging te configureren. Als de initialisatie van de cloud-init wordt uitgevoerd tijdens het opstartproces, zijn er geen extra stappen of agents vereist om uw configuratie toe te passen.

Cloud-init werkt ook in distributies. U gebruikt bijvoorbeeld niet apt-get install of yum install om een pakket te installeren. In plaats daarvan kunt u een lijst definiëren met te installeren pakketten. Cloud-init maakt automatisch gebruik van het hulpprogramma voor systeemeigen pakketbeheer voor de distro die u selecteert.

Samen met onze partners willen we cloud-init opnemen en werkend krijgen in de installatiekopieën die zij aan Azure leveren. Raadpleeg Cloud-init-ondersteuning voor virtuele machines in Azure voor gedetailleerde informatie over Cloud-init-ondersteuning voor elke distributie.

Een cloud-init-configuratiebestand maken

Als u cloud-init in actie wilt zien, maakt u een VM waarop NGINX is geïnstalleerd en een eenvoudige 'Hallo wereld' Node.js-app wordt uitgevoerd. De volgende cloud-init-configuratie installeert de vereiste pakketten, maakt een Node.js-app, initialiseert en start de app.

Maak bij de Bash-prompt of in Cloud Shell een bestand met de naam cloud-init.txt en plak de volgende configuratie in het bestand. Typ bijvoorbeeld sensible-editor cloud-init.txt om het bestand te maken en om een overzicht van beschikbare editors te zien. Controleer of het hele cloud-init-bestand correct is gekopieerd, met name de eerste regel:

#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

Zie Voorbeelden van cloud-init-configuraties voor meer informatie over configuratieopties voor cloud-init.

Virtuele machine maken

Voordat u een virtuele machine kunt maken, moet u eerst een resourcegroep maken met az-groep maken. In het volgende voorbeeld wordt een resourcegroep gemaakt. In deze opdrachten wordt een willekeurig achtervoegsel toegevoegd aan de resourcegroep en VM-namen om naamconflicten tijdens herhaalde implementaties te voorkomen.

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

Resultaten:

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

Maak een virtuele machine met az vm create. Gebruik de --custom-data-parameter om door te geven in uw cloud-init-configuratiebestand. Geef het volledige pad naar cloud-init.txt op als u het bestand buiten uw huidige werkmap hebt opgeslagen. In het volgende voorbeeld wordt een VIRTUELE machine gemaakt; houd er rekening mee dat de naam van de virtuele machine ook wordt toegevoegd met het willekeurige achtervoegsel.

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

Resultaten:

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

Het duurt enkele minuten voordat de virtuele machine wordt gemaakt, de pakketten worden geïnstalleerd en de app gestart. Er zijn achtergrondtaken die nog worden uitgevoerd nadat u door de Azure CLI bent teruggeleid naar de prompt. Het duurt mogelijk nog een paar minuten voordat u toegang hebt tot de app. Wanneer de virtuele machine is gemaakt, let op de publicIpAddress weergegeven door de Azure CLI. Dit adres wordt gebruikt voor toegang tot de Node.js-app in een webbrowser.

Open poort 80 via internet met az vm open-port zodat beveiligd webverkeer uw virtuele machine kan bereiken:

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

Resultaten:

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

Web-app testen

U kunt nu een webbrowser openen en het openbare IP-adres invoeren in de adresbalk. Geef uw eigen openbare IP-adres op uit het creatieproces van de virtuele machine proces. De Node.js-app wordt weergegeven zoals in het volgende voorbeeld:

Schermopname van de actieve NGINX-site.

Volgende stappen

In deze zelfstudie hebt u virtuele machines bij de eerste keer opstarten geconfigureerd met cloud-init. U hebt geleerd hoe u:

  • Een cloud-init-configuratiebestand maken
  • Een virtuele machine maken die gebruikmaakt van een cloud-init-bestand
  • Een actieve Node.js-app weergeven nadat de virtuele machine is gemaakt
  • Key Vault gebruiken voor het veilig opslaan van certificaten
  • Beveiligde implementaties van NGINX automatiseren met cloud-init

Ga door naar de volgende zelfstudie voor informatie over het maken van aangepaste VM-installatiekopieën.