Launcher Prodotti Bitnami Documentazioneimaxe CLI Blog Contatti

cloud-init e user-data: configura le tue istanze all'avvio da professionista

Una golden AMI risolve ciò che è stabile; cloud-init risolve ciò che cambia. Padroneggiare user-data e cloud-init è ciò che ti permette di usare la stessa immagine in mille scenari senza ricuocerla. Ecco la guida pratica.

Portatile che mostra l'aggiornamento del sistema in un terminale
Portatile che mostra l'aggiornamento del sistema in un terminale Foto: Solijon Solayev · CC BY-SA 4.0 · Wikimedia Commons

cloud-init è lo standard di fatto per inizializzare le istanze in cloud durante il primo avvio. Quando lanci un’istanza e le passi uno script di user-data, è cloud-init a interpretarlo ed eseguirlo: crea utenti, scrive file, installa pacchetti, monta dischi o avvia servizi.

La combinazione ideale è chiara: la golden AMI contiene ciò che non cambia —sistema operativo, runtime, hardening— e user-data porta ciò che varia per ambiente o per istanza: configurazione, segreti iniettati, ruolo. Così riutilizzi una sola immagine in molti contesti.

Due modi di scrivere user-data

user-data accetta vari formati; i due più comuni sono lo script di shell e il cloud-config.

  • Script di shell: inizia con #!/bin/bash. Semplice e diretto per compiti rapidi.
  • cloud-config: inizia con #cloud-config e usa YAML dichiarativo. Più pulito, leggibile e idempotente per configurare utenti, pacchetti, file e comandi.

Esempio di cloud-config

Un tipico #cloud-config dichiara sezioni come packages: (pacchetti da installare), write_files: (file di configurazione), runcmd: (comandi finali) e users: (account e chiavi). Essendo dichiarativo, è più facile da rivedere e mantenere di uno script lungo.

Buone pratiche

  • Tieni user-data piccolo: se cresce troppo, probabilmente andrebbe cotto nella AMI.
  • Idempotenza: progetta i comandi in modo che rieseguirli non rompa nulla.
  • Non mettere mai segreti in chiaro in user-data: è leggibile dai metadati dell’istanza. Iniettali da Secrets Manager, Parameter Store o Vault a runtime.
  • Proteggi l’accesso ai metadati: usa IMDSv2 per mitigare il furto di credenziali via SSRF.
  • Registra e debugga: i log di cloud-init (/var/log/cloud-init-output.log) sono il tuo miglior amico quando qualcosa fallisce.

Baking o booting: dove mettere ogni cosa

Va nella AMI (baking)Va in user-data (booting)
Sistema operativo e patchConfigurazione specifica dell’ambiente
Runtime, agenti e hardeningVariabili e parametri per istanza
Software stabile e pesanteRegistrazione nel cluster e discovery
Tutto ciò che è lento da installareIniezione di segreti a runtime

Regola d’oro: ciò che è stabile e lento si cuoce; ciò che è variabile e leggero va all’avvio.

Errori comuni che costano ore

  • Mettere in user-data ciò che dovrebbe stare nell’immagine, con avvii lenti e fragili.
  • Esporre segreti in chiaro nei metadati.
  • Supporre che user-data si rieseguo a ogni avvio: di default gira solo al primo.
  • Non guardare i log di cloud-init quando l’istanza «non fa quello che dovrebbe».

Domande frequenti

user-data si esegue a ogni riavvio?

Di default solo al primo avvio. Si può configurare cloud-init per eseguire certe parti a ogni avvio, ma conviene farlo in modo consapevole e idempotente.

È sicuro passare password in user-data?

No. user-data è leggibile dai metadati dell’istanza. Usa un gestore di segreti e iniettali a runtime, e proteggi i metadati con IMDSv2.

cloud-init funziona solo su AWS?

No. cloud-init è multipiattaforma e funziona su AWS, Azure, GCP e altri, il che lo rende ideale per automatizzare l’avvio in modo portabile.

In imaxe.cloud progettiamo immagini pensate per combinarsi con cloud-init, così che una sola AMI ti serva in molti scenari.

cloud-inituser-dataec2bootstrappingimdsv2
IM

Team imaxe

Costruiamo e manteniamo le AMI del catalogo. Quando pubblichiamo una versione, la usiamo in produzione prima di tutti.

Dal catalogo

AMI collegate a questo articolo

Continua a leggere

Articoli correlati