soluzione di Paolo con i moduli è l'idea giusta. Tuttavia, raccomando vivamente lo di fronte allo definendo tutti gli ambienti (ad es. QA, staging, produzione) nello stesso file Terraform. Se lo fai, allora ogni volta che stai apportando una modifica alla messa in scena, rischi di rompere accidentalmente anche la produzione, che in parte sconfigge il punto di mantenere quegli ambienti isolati in primo luogo! Vedi Terraform, VPC, and why you want a tfstate file per env per una discussione colorata su cosa può andare storto.
Consiglio sempre di memorizzare il codice Terraform per ogni ambiente in una cartella separata. In effetti, potresti persino voler memorizzare il codice Terraform per ogni "componente" (ad esempio un database, un VPC, una singola app) in cartelle separate. Di nuovo, la ragione è l'isolamento: quando apporti modifiche a una singola app (che potresti fare 10 volte al giorno), non vuoi mettere a rischio l'intero VPC (che probabilmente non cambierai mai).
Pertanto, il mio layout tipico file è qualcosa di simile:
stage
└ vpc
└ main.tf
└ vars.tf
└ outputs.tf
└ app
└ db
prod
└ vpc
└ app
└ db
global
└ s3
└ iam
Tutto il codice Terraform per l'ambiente di staging va nella cartella stage
, tutto il codice per l'ambiente prod va nella cartella prod
, e tutto il codice che vive al di fuori di un ambiente (ad es. utenti IAM, bucket S3) va nella cartella global
.
Per ulteriori informazioni, consultare How to manage Terraform state. Per uno sguardo più approfondito alle migliori pratiche di Terraform, consulta il libro Terraform: Up & Running.
fonte
2016-11-20 15:31:14
mi sembra che questa sia probabilmente una risposta migliore per molte persone. – the0ther
Mantenere un rapporto separato per ambiente è sicuramente una buona pratica: poiché Terraform 0.10, la funzione [Workspaces] (https://www.terraform.io/docs/state/workspaces.html) fa esattamente questo per 'spazio di lavoro' (es.ambiente) – RichVel