Cloud-init: de eerste opstart van je VPS automatiseren
Kort antwoord
Cloud-init is de standaardtool die de meeste Linux cloud-images gebruiken om bij de eerste keer opstarten automatisch te configureren: de hostname instellen, SSH-keys toevoegen, packages installeren en je eigen scripts draaien, nog voordat je inlogt. Het is een open source tool die de hele branche gebruikt, niet iets van één specifieke provider.
Wat cloud-init precies is
Cloud-init draait automatisch de eerste keer dat een cloud-image opstart, nog voordat je een inlogprompt te zien krijgt. Het leest de configuratie die je bij het aanmaken hebt meegegeven en past die toe: de hostname instellen, gebruikersaccounts aanmaken, SSH public keys toevoegen, packages installeren, bestanden schrijven en willekeurige commando's uitvoeren. Vrijwel elk gangbaar Linux cloud-image (Ubuntu, Debian, Rocky Linux, AlmaLinux en andere) heeft cloud-init standaard geïnstalleerd. Daardoor is het de facto de standaard geworden voor automatisering bij de eerste keer opstarten, over cloud-providers heen, in plaats van iets wat aan één platform vastzit.
Wat een typisch user-data-bestand bevat
Cloud-init wordt aangestuurd door een bestand dat meestal user-data heet, geschreven in YAML. De richtlijnen die je als eerste tegenkomt:
| Richtlijn | Wat het doet |
|---|---|
packages: | Een lijst met packages om te installeren bij de eerste keer opstarten |
write_files: | Bestanden om aan te maken, met hun inhoud en doelpad, voordat de machine klaar is met opstarten |
runcmd: | Shellcommando's die één keer worden uitgevoerd, tegen het einde van het opstartproces bij de eerste keer |
ssh_authorized_keys: | Public keys om toe te voegen aan de authorized_keys van de standaardgebruiker, zodat inloggen met een key direct werkt |
Het bestand begint met #cloud-config op de eerste regel. Zo herkent cloud-init het als een configuratiebestand met richtlijnen, in plaats van een los shellscript (een gewoon #!/bin/bash-script is ook geldige user-data en wordt direct uitgevoerd, als je liever alles zelf wilt scripten).
Waarom dit belangrijk is voor herhaalbare infrastructuur
Zonder cloud-init betekent de setup bij de eerste keer opstarten dat je na het aanmaken inlogt en telkens dezelfde stappen handmatig uitvoert. Dat is traag, en je krijgt makkelijk inconsistente resultaten tussen machines. Cloud-init verplaatst die setup naar een declaratief bestand dat automatisch draait, zonder tussenkomst. Dat betekent:
- Nieuwe servers komen al geconfigureerd online, in plaats van dat er na het aanmaken nog een handmatige ronde nodig is.
- Hetzelfde user-data-bestand levert elke keer hetzelfde resultaat op, en dat is precies waar infrastructure-as-code-workflows op leunen.
- Provisioning-tools (Terraform, Ansible en vergelijkbare tools) kunnen het user-data-bestand per server genereren of templaten, zodat de configuratie bij de eerste keer opstarten onderdeel wordt van je infrastructuur onder versiebeheer, in plaats van een handmatig runbook.
Voor het volledige bereik van wat een user-data-bestand kan doen naast de richtlijnen hierboven, zie de officiële cloud-init-documentatie.