Paul-Lösung mit Modulen die richtige Idee. Ich würde jedoch dringend empfehlen gegen alle Ihre Umgebungen (z. B. QA, Staging, Produktion) in der gleichen Terraform-Datei definieren. Wenn du das tust, riskierst du, wenn du die Staging-Einstellungen änderst, auch versehentlich die Produktion zu unterbrechen, was teilweise dazu führt, dass diese Umgebungen nicht isoliert werden! Eine farbenfrohe Diskussion darüber, was schiefgehen kann, finden Sie unter Terraform, VPC, and why you want a tfstate file per env.
Ich empfehle immer, den Terraform-Code für jede Umgebung in einem separaten Ordner zu speichern. In der Tat können Sie sogar den Terraform-Code für jede "Komponente" (z. B. eine Datenbank, eine VPC, eine einzelne App) in separaten Ordnern speichern. Der Grund liegt wiederum in der Isolation: Wenn Sie Änderungen an einer einzelnen App vornehmen (was Sie möglicherweise zehn Mal am Tag tun), möchten Sie nicht Ihre gesamte VPC gefährden (die Sie wahrscheinlich nie ändern werden).
Daher mein typisches Datei-Layout sieht ungefähr so aus:
stage
└ vpc
└ main.tf
└ vars.tf
└ outputs.tf
└ app
└ db
prod
└ vpc
└ app
└ db
global
└ s3
└ iam
All Terraforming-Code für die Staging-Umgebung geht in die stage
Ordner, die gesamte Code für die Umwelt prod geht in die prod
Ordner und Der gesamte Code außerhalb der Umgebung (z. B. IAM-Benutzer, S3-Buckets) wird in den Ordner global
übernommen.
Weitere Informationen finden Sie unter How to manage Terraform state. Einen tieferen Einblick in die Best Practices von Terraform finden Sie im Buch Terraform: Up & Running.
Ich denke, das ist wahrscheinlich eine bessere Antwort für viele Leute. – the0ther
Es ist definitiv eine bewährte Methode, einen separaten Tabellenabschnitt pro Umgebung beizubehalten. Seit Terraform 0.10 führt die Funktion [Workspaces] (https://www.terraform.io/docs/state/workspaces.html) genau das für jeden Arbeitsbereich durch (d. H.Umgebung) – RichVel