Che cos'è Packer?
Packer è uno strumento di imaging dei server sviluppato da HashiCorp. Imaging del server; o in alternativa, infrastruttura immutabile; è una popolare alternativa agli strumenti di configurazione del runtime, come Ansible o Puppet. Si basa sull'idea che una volta distribuito un server, non lo si cambia mai; invece, si distribuisce un nuovo server con le modifiche e quindi si abbatte quello vecchio. Ciò semplifica la manutenzione del server e consente di scalare in modo più efficiente su un gran numero di macchine.
Mentre Packer non supporta Vultr out of the box, c'è un plugin che aggiunge quel supporto. Le istruzioni per l'installazione di Packer con supporto Vultr sono disponibili nel README del plug-in. Il resto di questo articolo presuppone che sia installato Packer e il plug-in Vultr.
Come funziona
Lo scopo di Packer è produrre immagini di server o artefatti che possono essere utilizzati per creare un nuovo server esattamente com'era al momento dell'imaging. Per Vultr, questi artefatti sono chiamati istantanee. Il plug-in funziona distribuendo un nuovo VPS, eseguendo i suoi provisioner definiti su di esso, creando un'istantanea di esso e quindi abbattendo il VPS. Quando si desidera creare un nuovo server dall'immagine, è sufficiente chiamare l'API di Vultr per distribuire un nuovo VPS con l'istantanea desiderata come sistema operativo.
Utilizzando Packer
Packer prende un file JSON che definisce la build che deve essere eseguita come input. Ecco un file di esempio che definisce una build Vultr:
{
"variables": {
"vultr_api_key": "{{env `VULTR_API_KEY`}}"
},
"builders": [
{
"type": "vultr",
"api_key": "{{user `vultr_api_key`}}",
"snapshot_description": "My Awesome App",
"region_id": "2",
"plan_id": "201",
"os_id": "167",
"ssh_username": "root"
}
]
}
Questo file ha due chiavi di livello superiore variables
e builders
. La variables
chiave viene utilizzata per definire variabili personalizzate e in questo caso viene utilizzata per incorporare la VULTR_API_KEY
variabile di ambiente in un modo che può essere utilizzato in un secondo momento. La builders
chiave contiene un elenco di build da eseguire, in questo caso solo la nostra build Vultr. Abbattiamo un po 'quell'accumulo:
type
: Definisce il builder da utilizzare effettivamente e per le build di Vultr dovrebbe essere sempre così vultr
.
api_key
: Per eseguire la build, è necessaria una chiave API, che è definita qui. Questo esempio lo definisce come il valore della vultr_api_key
variabile utente, che più in alto è impostato sul valore della VULTR_API_KEY
variabile d'ambiente.
snapshot_description
: La descrizione dell'istantanea risultante.
region_id
: La regione in cui distribuire un VPS. Ciò non influisce sull'istantanea finale, ma solo sul server da cui viene creata l'istantanea.
plan_id
: Il piano da utilizzare per il VPS. Gli usi futuri di questa istantanea devono definire un piano che sia almeno così grande.
os_id
: Il sistema operativo su cui basare l'istantanea.
ssh_username
: Il nome utente che verrà utilizzato durante l'accesso SSH al server per il provisioning. Per i server Linux, questo sarà di solito root
.
Per usarlo, salva questo file con un nome simile server.json
, quindi esegui il comando packer build server.json
. Vedrai alcuni output che indicano lo stato della build, che richiederà alcuni minuti.
Quando si esegue questa build, un nuovo server denominato Snapshotting: My Awesome App
verrà creato, istantaneo e quindi distrutto. Senza i provisioner definiti, è tutto ciò che accade. Per ulteriori informazioni sulla definizione dei provisioner, consultare la documentazione di Packer .
Una volta terminata la compilazione, Packer emetterà l'ID dell'istantanea risultante.
Definizione di regione, piano e sistema operativo
Questi tre valori sono richiesti per ogni build di Vultr, ma possono essere definiti in diversi modi. Per ognuna, dovresti specificare esattamente una delle sue variazioni per evitare ambiguità:
Regione
Le informazioni sulla regione possono essere richieste tramite l'API: https://www.vultr.com/api/#regions_region_list
region_id
: L'ID della regione, ad es 2
region_code
: Il codice della regione, ad es ORD
Piano
Le informazioni sul piano possono essere richieste tramite l'API: https://www.vultr.com/api/#plans_plan_list
plan_id
: L'ID del piano, ad es 201
OS
Le informazioni sul sistema operativo possono essere richieste tramite l'API: https://www.vultr.com/api/#os_os_list
os_id
: L'ID del sistema operativo, ad es 167