Provisioner `local-exec` e `remote-exec`
Implementi i provisioner `local-exec` e `remote-exec` per eseguire comandi rispettivamente sulla macchina che esegue Terraform o sulle risorse create.
Provisioner `local-exec` e `remote-exec` è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.
Alla scoperta dei provisioner di Terraform
E se fosse necessario eseguire uno script o un comando dopo che Terraform ha creato una risorsa? È qui che entrano in gioco i provisioner!
I provisioner consentono di eseguire azioni sulla macchina locale o su una risorsa remota come parte del suo ciclo di vita. Colmano il divario tra la creazione dell'infrastruttura e la configurazione iniziale del software.
Li si può considerare come hook che consentono di personalizzare le risorse subito dopo la loro creazione.
`local-exec`: eseguire localmente
Il provisioner local-exec esegue i comandi sulla macchina in cui viene eseguito Terraform.
È utile per attività come:
- Generare localmente file di configurazione.
- Attivare script o strumenti locali.
- Eseguire operazioni di pulizia dopo la distruzione di una risorsa.
È perfetto per le azioni che non devono essere eseguite sulla risorsa cloud stessa.
Esempio di base di `local-exec`
Vediamo come local-exec può creare un semplice file sulla macchina locale dopo la creazione di una risorsa null.
Una null_resource è un segnaposto che non crea nulla nel cloud, ma è utile per attivare i provisioner.
resource "null_resource" "local_file_creator" {
provisioner "local-exec" {
command = "echo 'Local file created by Terraform!' > local_output.txt"
}
triggers = {
always_run = timestamp()
}
}Quando usare `local-exec`
local-exec è ideale per:
- Notifiche post-deployment: inviare un'e-mail o un messaggio Slack.
- Generazione di file locali: creare file di inventario per Ansible o altri strumenti.
- Controlli pre-deployment: eseguire script di convalida locali.
- Attivazione della CI/CD: avviare una pipeline dopo le modifiche all'infrastruttura.
Ricordi che opera dalla posizione in cui esegue terraform apply.
`remote-exec`: eseguire sulla risorsa
A differenza di local-exec, il provisioner remote-exec esegue i comandi direttamente sulla risorsa remota.
È fondamentale per le attività di configurazione iniziale su un server appena creato, come:
- Installare pacchetti software (ad esempio un web server o un database).
- Configurare le impostazioni del sistema operativo.
- Effettuare il deployment del codice dell'applicazione.
Richiede connettività di rete, come SSH per Linux o WinRM per Windows, verso la risorsa di destinazione.
Connettersi per `remote-exec`
Per funzionare, remote-exec richiede che Terraform si connetta alla risorsa.
I tipi di connessione comuni includono:
- SSH: per le istanze Linux, con una chiave privata.
- WinRM: per le istanze Windows, con le credenziali.
In genere configurerà i dettagli della connessione all'interno del blocco provisioner oppure li erediterà dalla risorsa.
`remote-exec` su un'istanza EC2
Ecco come usare remote-exec per installare Apache su una nuova istanza AWS EC2.
Nota: è necessario che un'istanza EC2 sia stata creata e sia accessibile tramite SSH. Per semplicità, si presuppone l'esistenza di una coppia di chiavi e di un security group.
resource "aws_instance" "web_server" {
ami = "ami-0abcdef1234567890" # Replace with valid AMI ID
instance_type = "t2.micro"
key_name = "my-ssh-key" # Replace with your SSH key name
vpc_security_group_ids = ["sg-0123456789abcdef0"] # Replace with your SG ID
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl start httpd",
"sudo systemctl enable httpd"
]
connection {
type = "ssh"
user = "ec2-user"
private_key = file("~/.ssh/my-ssh-key.pem")
host = self.public_ip
}
}
}Quando usare `remote-exec`
remote-exec è ideale per:
- Bootstrap dei server: installare web server, database o Docker.
- Deployment delle applicazioni: copiare il codice dell'applicazione e configurarlo.
- Gestione della configurazione: eseguire direttamente playbook Ansible o ricette Chef.
- Convalida post-creazione: verificare che i servizi siano in esecuzione sulla nuova istanza.
È lo strumento di riferimento per configurare lo stato iniziale di un server.
Provisioner alla distruzione
I provisioner possono essere eseguiti anche quando una risorsa viene distrutta. Sono utili per le attività di pulizia.
È possibile specificare when = destroy all'interno di un blocco provisioner. Ad esempio, per deregistrare un'istanza da un bilanciatore del carico prima che venga terminata.
È inoltre possibile configurare il comportamento di on_failure, che determina cosa accade se un comando del provisioner non riesce. Per impostazione predefinita, l'operazione restituisce un errore.
Quiz sui provisioner
Quale provisioner utilizzerebbe per installare un server web (come Nginx) su un'istanza di macchina virtuale appena creata?
Provisioner: locale o remoto
Abbiamo esplorato i provisioner di Terraform, strumenti potenti per eseguire comandi durante il ciclo di vita delle risorse.
local-execesegue i comandi sulla macchina in cui viene eseguito Terraform ed è utile per gli script locali o per le notifiche.remote-execesegue i comandi direttamente sulla risorsa sottoposta a provisioning ed è ideale per inizializzare i server con software o configurazioni.
I provisioner aiutano a colmare il divario tra la distribuzione dell'infrastruttura e la configurazione iniziale dell'applicazione. Ora approfondiremo le tecniche avanzate di gestione dello stato.
Domande Frequenti
La lezione «Provisioner `local-exec` e `remote-exec`» è gratuita?
Sì — il testo completo di «Provisioner `local-exec` e `remote-exec`» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa imparerò in «Provisioner `local-exec` e `remote-exec`»?
Implementi i provisioner `local-exec` e `remote-exec` per eseguire comandi rispettivamente sulla macchina che esegue Terraform o sulle risorse create. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Provisioner `local-exec` e `remote-exec`»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Interrogazione dei dati con le data source
- Provisioner `local-exec` e `remote-exec`
- Risorse null e trigger
- Usare dati esterni e template