Atlantis - Terraform per Team - Introduzione

January 20, 2019 0 Comments Terraform, Atlantis

Lo vogliamo usare tutti insieme!

Terraform è un sistema ottimo per gestire le infrastrutture server as code. Abbiamo visto che permette di eseguire operazioni complesse solamente utilizzando una struttura descrittiva.

Atlantis https://www.runatlantis.io/ vi permette di avere una repository git condivisa e di gestire le variazioni all'infrastruttura utilizzando un sistema ormai standard per lo sviluppo del software: le pull request.

Come avviene?

L'idea di fondo è che l'unico a eseguire i comandi Terraform, è il server Atlantis stesso.
In questo modo siamo in grado di eseguire il "locking" nei progetti e far si che non ci possano essere due persone che in contemporanea chiedono modifiche alla stessa infrastruttura.

Un progetto di Atlantis infatti è composto da tanti "sotto-progetti" all'interno della repository. Questi sotto-progetti sono gestiti tramite un file apposito nella root del progetto chiamato atlantis.yaml.

Vediamo ora una veloce infografica sul funzionamento di atlantis, presa direttamente dalla loro documentazione:

Detto ciò procediamo a fare una lista di cosa ci serve per avere un ambiente funzionante.

Requisiti

Per poter usare Terraform con Atlantis, bisogna avere alcune cose fondamentali:

  1. Un bucket S3 Amazon, dove salvare lo stato di Terraform (o un altro remote storage compatibile).
  2. avere una VM o un container Docker dove far girare Atlantis.
  3. avere una repository su Github, Bitbucket o Gitlab.

Perché dovrei usarlo? Hashicorp mette a disposizione la loro suite enterprise

Il motivo è proprio questo, Hashicorp ha la sua soluzione per l'utilizzo di Terraform in team, il problema è che è una soluzione proprietaria e i costi sono proibitivi per una realtà medio piccola.

Quali differenze ci sono?

Terraform Enterprise dalla sua ha una serie di strumenti che semplificano la gestione di alcune problematiche. Ad esempio la gestione dei segreti è gestita con una buona granularità dei permessi.
In Atlantis la gestione dei segreti è più complicata perché non c'è un modo nativo per farlo. Si possono usare strumenti come git-crypt (https://github.com/AGWA/git-crypt) variabili d'ambiente, soluzioni di gestione parametri esterni come Amazon parameter store, o altre soluzioni custom.

In Terraform Enterprise inoltre si ha la possibilità di gestire delle policy sul codice Terraform che viene creato, si possono gestire direttamente nella loro struttura i moduli di Terraform privati e il loro versionamento.

Conclusioni

Io personalmente mi trovo bene a lavorare con Atlantis, sia per la sua versatilità sia per il fatto che è un software Open Source. Per un lavoro in team bisogna preoccuparsi che il sistema di versioning che stiamo usando (BitBucket, Github, Gitlab) gestisca le approvazioni delle pull request assicurandosi anche una modalità di gestione dei segreti sicura (se si vanno ad utilizzare segreti nei progetti Terraform)

Scrivetemi nei commenti domande e dubbi, vi risponderò il prima possibile!

Alla prossima! :)

Samuele Chiocca
Padova, italy Website