Se prevedi di gestire e lavorare con Amazon Web Services (AWS), l’uso del Terraform provider AWS è essenziale. Ti permette di interagire con le molte risorse supportate da AWS, come Amazon S3, Elastic Beanstalk, Lambda e molti altri.
In questa guida definitiva, imparerai passo dopo passo tutto ciò che devi sapere sul provider AWS e su come utilizzare questo provider con Terraform per gestire la tua infrastruttura Amazon.
Facciamolo!
Prerequisiti
Se desideri seguire questo tutorial, assicurati di avere quanto segue:
- Un account Amazon Web Service (AWS).
- Un utente IAM con un access key ID e una secret key configurate sulla tua macchina locale.
- Terraform v0.14.9 – Le dimostrazioni di questo tutorial sono su Ubuntu 18.04.5 LTS, ma altri sistemi operativi con Terraform funzioneranno.
- A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.
Cosa è il provider Terraform AWS?
Terraform dipende dai plugin per interagire con i fornitori di servizi cloud come AWS, Google Cloud Platform (GCP) e Oracle. Uno dei fornitori più utilizzati è il provider AWS. Questo provider interagisce con molte risorse supportate da AWS, come Amazon S3, Elastic Beanstalk, Lambda e molte altre.
Terraform utilizza il provider AWS con le credenziali adeguate per connettersi ad Amazon e gestire o distribuire/aggiornare decine di servizi AWS.
Il provider AWS viene dichiarato all’interno del file di configurazione di Terraform e include vari parametri come la versione, gli URL degli endpoint o le regioni cloud, ecc.
Dichiarazione del provider AWS
Quando hai bisogno di fare riferimento al nome di un fornitore, devi definire un nome locale. Il nome locale è il nome del fornitore assegnato all’interno del blocco required_providers
. I nomi locali vengono assegnati quando si richiede un fornitore e devono essere univoci per modulo.
Quando dichiari i required_providers
, devi anche dichiarare il parametro source
in Terraform 0.13 e versioni successive. Il parametro source
imposta l’indirizzo di origine da cui Terraform può scaricare plugins.
Gli indirizzi di origine sono composti da tre parti, come segue:
- Hostname – Il nome host del registro Terraform che distribuisce il fornitore. Il nome host predefinito è registry.terraform.io.
- Namespace – Uno spazio dei nomi organizzativo nel registro specificato.
- Tipo – Un tipo è un nome breve che fornisci per la piattaforma o il sistema gestito dal fornitore e deve essere univoco.
Qui sotto puoi vedere la sintassi di dichiarazione del parametro source, in cui le tre parti di un indirizzo di origine sono delimitate da barre (/
).
Autenticazione di un account AWS con credenziali codificate nel codice
Ora che hai una comprensione di base di come dichiarare il provider AWS, vediamo come autenticare un account AWS.
Puoi autenticare il provider AWS tramite diversi metodi, come dichiarare le variabili di ambiente e memorizzare le credenziali in un profilo nominato. Tuttavia, il modo più rapido per autenticarsi a un account AWS è inserire direttamente le credenziali nel tuo provider AWS.
Sebbene le credenziali codificate duramente non siano consigliate poiché sono suscettibili di divulgazione, puoi comunque dichiarare credenziali codificate duramente nella configurazione di Terraform per testare rapidamente risorse AWS. Ma continua a leggere e scoprirai successivamente un modo migliore per autenticare un account AWS dichiarando le variabili di ambiente.
La configurazione di seguito dichiara un nome locale (aws
) insieme alla regione del provider (us-east-2
), come mostrato di seguito. Puoi vedere che il blocco provider AWS dichiara anche una chiave di accesso e una chiave segreta per autenticare un account AWS.
Sicurezza delle credenziali tramite dichiarazione di variabili di ambiente
Hai appena appreso che è possibile codificare staticamente le credenziali per autenticare il servizio cloud AWS con Terraform. Tuttavia, la codifica rigida è insicura e consigliata solo durante la distribuzione in un ambiente di test per testare rapidamente il codice.
C’è un altro modo per proteggere le credenziali? Sì, dichiarandole come variabili d’ambiente, non c’è limite al numero che puoi dichiarare. Le variabili d’ambiente sono variabili il cui valore è impostato al di fuori del file di configurazione di Terraform e sono composte da una coppia nome/valore.
Esegui la serie di comandi export
di seguito per esportare ciascuna variabile d’ambiente. L’esportazione delle variabili d’ambiente le rende disponibili in tutto il programma o fino a quando Terraform viene eseguito.
Archiviazione di più credenziali in un profilo nominato
Sia l’inserimento manuale che la dichiarazione delle credenziali come variabili d’ambiente ti consentono di autenticare un account AWS una volta alla volta. Ma cosa succede se devi archiviare più credenziali e usarle quando necessario? Archiviare le credenziali in un profilo nominato è l’opzione ideale.
Il codice qui sotto crea un profilo nominato (Myprofile
) che contiene una chiave di accesso e una chiave segreta.
La posizione predefinita dei profili nominati è in $HOME/.aws/credentials/Myprofile su Linux e macOS, o %USERPROFILE%\.aws\credentials\Myprofile su Windows. Sostituisci Myprofile con il nome effettivo del profilo nominato.
Una volta creato un profilo nominato in ~/.aws/credentials, è possibile fare riferimento a quel profilo nella configurazione di Terraform utilizzando l’attributo profilo
. Di seguito, si fa riferimento al profilo nominato Ilmioprofilo
.
Dichiarare l’Assume Role nel Provider AWS
Hai appena imparato a configurare un Provider AWS dichiarando le credenziali codificate rigidamente prima di eseguire Terraform. Ma forse vuoi dichiarare le credenziali al momento dell’esecuzione. In tal caso, l’API AssumeRole è ciò di cui hai bisogno. AssumeRole fornisce credenziali temporanee contenenti un ID chiave di accesso, una chiave di accesso segreta e un token di sicurezza. Queste credenziali ti consentono di connetterti ad AWS.
Il codice seguente dichiara il provider
denominato aws
e un assume_role
che contiene un nome ruolo e un nome sessione. Per configurare l’accesso AssumeRole, è necessario definire un ruolo IAM che specifichi i privilegi che concede e quali entità possono assumerlo.
Dichiarazione di Più Provider AWS
Fino ad ora, hai imparato come dichiarare e configurare il Provider AWS in Terraform che funziona con una singola regione. Ma cosa succede se devi gestire la tua infrastruttura o i servizi AWS in più regioni cloud? In tal caso, dovrai dichiarare la parola chiave alias
.
L’alias consente di definire più configurazioni per lo stesso provider e selezionare quale utilizzare su base risorsa o modulo o supportare più regioni.
Il codice sottostante dichiara il Provider AWS predefinito chiamato aws
con la region
impostata su us-east-2
. E poi dichiara un Provider AWS aggiuntivo con lo stesso nome, ma con un alias
dichiarato chiamato west
e una region
impostata su us-west-2
.
Dichiarare un alias
consente di creare risorse in us-east-2
per impostazione predefinita o nella regione us-west-2
se si sceglie il provider aws.west
a seconda delle esigenze.
Personalizzazione della configurazione del punto di accesso del provider AWS
La personalizzazione della configurazione del punto di accesso è utile quando ci si connette a punti di accesso dei servizi AWS non predefiniti, come AWS Snowball o durante i test locali.
Configura il provider AWS di Terraform per utilizzare gli endpoint personalizzati. Fallo dichiarando il blocco di configurazione endpoints
all’interno del blocco del provider, come mostrato di seguito.
La configurazione sottostante ti consente di accedere al servizio AWS S3 sulla porta locale 4572
come se stessi effettivamente accedendo al servizio AWS S3 su un account AWS. Allo stesso modo, la configurazione ti consente di accedere a dynamodb
localmente sulla porta 4569
. DynamoDB è un servizio di database NoSQL che offre prestazioni veloci con scalabilità senza soluzione di continuità.
Controlla l’elenco degli endpoint personalizzati consentiti dal provider Terraform AWS.
Aggiunta di tag
In precedenza, hai appreso come viene dichiarato un provider AWS con configurazioni come regione, posizione di origine, ecc. Ma per gestire meglio le tue risorse, è necessario aggiungere tag a livello di provider.
I tag sono etichette composte da chiavi e valori definiti dall’utente. I tag sono utili quando è necessario controllare la fatturazione, la proprietà, l’automazione, il controllo degli accessi e molti altri casi d’uso nell’account AWS.
Invece di aggiungere tag a tutte le risorse singolarmente, impariamo come aggiungere tag a tutte le risorse a livello di provider che aiuterà a risparmiare molto codice e tempo.
Il codice qui sotto configura un provider AWS con tag definiti all’interno del default_tags
. Il vantaggio di aggiungere tag all’interno del provider è che i tag specificati verranno automaticamente aggiunti quando si crea una qualsiasi risorsa con questo provider.
Ignorando i Tag
Abilitare i tag a livello di provider aiuta ad applicare i tag in tutto l’ambiente. Ma a volte è necessario ignorare i tag, ad esempio se non si desidera aggiungere un tag predefinito a un’istanza EC2 e piuttosto applicarlo al resto delle risorse nell’account AWS. Diamo un’occhiata!
Il codice qui sotto configura un provider AWS con ignore_tags definiti all’interno del provider. Il vantaggio dell’uso del tag di ignoranza è quando non si desidera aggiungere tag predefiniti a determinate risorse e si applicano al resto delle risorse.
Nel codice sottostante, quando si crea una risorsa utilizzando il provider aws
, tutte le risorse ignoreranno i tag LastScanned
e kubernetes.io
.
Creazione di un Bucket AWS S3
A questo punto, hai imparato tutto su come dichiarare e configurare i provider AWS in modo approfondito. Ma dichiarare il provider AWS non fa nulla fino a quando non gestisci risorse AWS come la creazione di un bucket AWS S3 o la cancellazione di un’istanza Ec2, ecc. Quindi, impariamo come creare un bucket AWS S3!
1. Crea una cartella chiamata ~/terraform-s3-demo, quindi cambia (cd
) la directory di lavoro in quella cartella. La cartella ~/terraform-s3-demo conterrà il file di configurazione e tutti i file associati che Terraform creerà.
2. Copia e incolla la configurazione sottostante nel tuo editor di codice preferito e salvala come main.tf nella directory ~/terraform-s3-demo.
Il file main.tf crea alcune risorse necessarie:
- Requisito del provider: Un requisito del provider consiste in un nome locale, una posizione di origine e un vincolo di versione.
- Chiave di crittografia: La chiave di crittografia Amazon S3 aiuta il bucket S3 in modo che tutti gli oggetti nuovi siano crittografati quando vengono archiviati nel bucket. Le chiavi di crittografia vengono create utilizzando
aws_kms_key
in Terraform. - Configurazione del Provider AWS: Dichiarare il nome del provider (
aws
) insieme alla regioneus-east-2
. - Bucket: Questo modulo Terraform crea un bucket chiamato
terraformdemobucket
. Terraform non può distruggere questo bucket in quanto contiene un flagforce_destroy
.
Versioning: Il versioning in Amazon S3 significa mantenere più versioni di un oggetto nello stesso bucket
3. Ora, esegui i comandi seguenti per navigare nella directory ~\\terraform-s3-demo
e inizializzare Terraform. Terraform inizializza i plugin e i provider necessari per lavorare con le risorse.
Terraform di solito utilizza un approccio a tre comandi in ordine sequenziale terraform init, terraform plan, e terraform apply.
Creazione di istanze AWS EC2 e utenti IAM
Nella sezione precedente, hai imparato come creare un singolo oggetto (bucket AWS S3) usando Terraform con AWS Provider. Ma in realtà, puoi creare più oggetti dello stesso tipo usando Terraform con AWS Provider.
1. Crea una cartella chiamata ~/terraform-ec2-iam-demo, quindi naviga al suo interno
2. Apri il tuo editor di codice preferito, copia/incolla la configurazione seguente e salva il file come main.tf nella directory ~/terraform-ec2-iam-demo.
Il codice di seguito crea due istanze EC2 ec21a
e ec21a
, con tipi di istanza t2.micro
e t2.medium
differenti, quindi crea utenti IAM con quattro nomi diversi. L’ami
dichiarato nel codice è un Amazon Machine Image (AMI), che fornisce le informazioni necessarie per avviare un’istanza, come il tipo di sistema operativo, quale software installare, ecc.
Puoi trovare AMI Linux utilizzando la console di Amazon EC2.
3. Successivamente, crea un altro file, copia/incolla il codice qui sotto e salva il file come vars.tf nella directory ~/terraform-ec2-iam-demo.
Il codice qui sotto dichiara tutte le variabili, alle quali si fa riferimento nel file main.tf. Dopo aver eseguito il codice Terraform, alla variabile tag_ec2
vengono assegnati i valori ec21a
e ec21b
alle due istanze EC2 definite nel file main.tf.
4. Crea un altro file di configurazione Terraform chiamato output.tf nella directory ~/terraform-ec2-iam-demo, quindi copia/incolla il codice qui sotto nel file output.tf.
Dopo l’esecuzione riuscita del comando terraform apply, dovresti vedere i valori di ${aws_instance.my-machine.*.id}
e ${aws_iam_user.accounts.*.name}
alla fine dell’output del comando.
Il codice qui sotto indica a Terraform di fare riferimento alle risorse aws_instance
e aws_iam_user
definite nel file di configurazione main.tf.
5. Crea un altro file di configurazione nella directory ~/terraform-ec2-iam-demo chiamato provider.tf, e incolla il codice seguente nel file provider.tf. Il file provider.tf sottostante definisce il provider AWS di Terraform in modo che Terraform sappia come interagire con tutte le risorse AWS che hai definito nei passaggi precedenti.
6. Ora, verifica che tutti i file richiesti siano contenuti nella cartella ~/terraform-ec2-iam-demo eseguendo il comando tree
.

7. Esegui i comandi sottostanti in ordine sequenziale per inizializzare Terraform e creare istanze EC2 AWS e utenti IAM.

Infine, passa alla Console di Gestione AWS, e poi vai al servizio AWS EC2 e alla console IAM.
Nelle schermate seguenti, puoi verificare che le istanze EC2 e gli utenti IAM esistano.


Conclusion
Con questa guida definitiva, ora hai le conoscenze necessarie per lavorare con il Provider AWS, dalla dichiarazione all’esecuzione del Provider AWS all’interno di Terraform. Hai anche appreso come il Provider AWS ti consente di dichiarare le credenziali in modi sicuri.
Ora, quale servizio AWS hai in mente di gestire con il Provider AWS e Terraform?