Ricerca nel sito web

Come caricare file locali nell'istanza Amazon EC2 utilizzando Terraform


Su questa pagina

  1. Di cosa parleremo?
  2. A cosa servono i Provisioner?
  3. Prerequisiti
  4. Utilizzo del file Provisioner per copiare i file
  5. Applicazione pratica del Provisioner file.
  6. Conclusione

Quando lavoriamo con le istanze EC2, spesso dobbiamo copiare un file locale nell'istanza. Ciò è particolarmente necessario se il file deve essere immediatamente disponibile sull'istanza non appena viene creato. Ad esempio, uno dei requisiti del mio progetto Terraform era che un file di configurazione per un host virtuale Apache doveva essere disponibile sull'istanza EC2 non appena veniva creata. Questo file è stato utilizzato come modello per la creazione di due file di configurazione dell'host virtuale. Per fare ciò, ho utilizzato lo strumento Terraforms File Provisioner per copiare questi file.

Dovresti sapere che Terraform sconsiglia l'uso di provisioner e raccomanda tecniche alternative per i casi in cui sono disponibili. Ci sono molte ragioni per questa restrizione, menzionate sul sito web di Terraform.

Cosa copriremo?

In questo tutorial, vedremo come copiare un file da un computer locale che esegue Terraform a un'istanza Amazon EC2 appena creata (Ubuntu) su AWS. In questo metodo, utilizzeremo l'utilità File fornita da Terraform. Dimostriamo il suo utilizzo semplicemente copiando un file in un'istanza EC2.

A cosa servono i Provisioner?

I provisioner vengono generalmente utilizzati per eseguire script per creare, distruggere varie risorse e preparare una macchina pronta per l'uso in un ambiente di produzione o sviluppo. Le operazioni di provisioning includono cose come quella seguente:

  1. Aggiorna il sistema operativo.
  2. Crea account, configura servizi e altre attività amministrative di sistema.
  3. Installazione del software.
  4. Trasferimento di file e gestione di file su un sistema.
  5. Configurazione di indirizzi IP di sistema, porte e altre attività.

Prerequisiti

  1. Nozioni di base di Terraform.
  2. Terraform e AWS CLI installati sul sistema locale.
  3. AWS CLI configurata per l'accesso al tuo account AWS.

Utilizzo del file Provisioner per copiare i file

Il File Provisioner viene utilizzato per copiare file e directory dalla macchina che esegue Terraform alla stessa o a un'altra macchina come le istanze EC2. I provisioner possono essere applicati su sistemi locali e remoti. Sebbene Terraform sia eccezionale nelle operazioni di distribuzione, non è così abile nel provisioning. Molti sistemi operativi e comandi non sono abilmente supportati da Terraform. Questo è il motivo per cui Terraform suggerisce di utilizzare Provisioners come ultima opzione.

Applicazione pratica del Provisioner file.

In questa sezione vedremo un modo pratico di utilizzare il provisioner file. Creeremo una risorsa dell'istanza EC2 utilizzando Terraform e quindi copieremo un file dal sistema locale a questa istanza. Facciamolo subito:

Passo 1. Per prima cosa crea il file che vogliamo copiare sul sistema remoto. Lo stiamo creando all'interno della directory contenente tutti i nostri file di configurazione:

$ nano dummy.txt

Inoltre, aggiungi alcuni contenuti a questo file:

$ echo “Our dummy file” > dummy.txt

Passaggio 2. Crea un file denominato instance.tf o qualsiasi altro nome ti piaccia ma con estensione .tf:

$ sudo instance.tf

Ora popola questo file con il contenuto seguente:

provider "aws" {
region ="us-east-1"
}

resource "aws_instance" "webserver" {
ami ="ami-id-you-want-to-use"
instance_type = "t2.micro"
key_name = "Name-of-your- EC2-keypair"
vpc_security_group_ids = ["Use-an-existing-SG"]
associate_public_ip_address = true

  provisioner "file" {
       source      = "dummy.txt"
       destination = "/home/ubuntu/file1.txt"
      
connection {
     type        = "ssh"
     user        = "ubuntu"
     private_key = "${file("Path-to-EC2-keyPair-on-Local-system.pem")}"
     host        = "${self.public_ip}"
   }
  }


tags = {
   Name = "FileProvisionerDemo"
}
}

Il codice precedente copierà il file dummy.txt nell'istanza EC2 con il nome file1.txt. Abbiamo utilizzato un gruppo di sicurezza esistente qui, puoi crearne uno nuovo utilizzando Terraform e utilizzarlo qui. Vediamo una descrizione di alcuni degli argomenti qui utilizzati:

  • fonte: assolutamente posizioni di file e directory o una relativa corrispondente alla directory del progetto Terraform.
  • destinazione: è il percorso assoluto sul sistema di destinazione.
  • blocco di connessione: Terraform apprende come comunicare con il server utilizzando il blocco di connessione. Le connessioni di tipo ssh e winrm sono entrambe supportate dai fornitori di file.
  • tipo: questo campo specifica il tipo di connessione che può essere ssh o winrm. Abbiamo usato una connessione SSH qui in questo laboratorio.
  • utente: specifica l'utente da utilizzare per una connessione.
  • private_key: il contenuto di una chiave SSH per stabilire una connessione.
  • host: specifica l'indirizzo della risorsa a cui vogliamo connetterci.
  • self: un oggetto che rappresenta la risorsa padre di una connessione e contiene tutti gli attributi di una risorsa.

File provisioner supporta anche altri argomenti come certificato, agente, host_key e così via.

Passo 3. Inizializza la directory del progetto usando:

$ terraform init
$ terraform validate
$ terraform apply

Esempio di output:

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.webserver will be created
  + resource "aws_instance" "webserver"

Passaggio 5. La nostra istanza viene ora creata come mostrato di seguito:

Conclusione

In questa guida, abbiamo visto come utilizzare il provisioner file per copiare un file in un'istanza.