Terraform-Status und Backends verstehen - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Terraform-Status und Backends verstehen

Eines der wichtigsten Konzepte in Infrastructure as Code (IaC) ist das Konzept des Zustands. IaC-Dienste behalten den Status bei, sodass Sie eine Ressource in einer IaC-Datei deklarieren können, ohne dass sie bei jeder Bereitstellung neu erstellt werden muss. IaC-Dateien dokumentieren den Status aller Ressourcen am Ende einer Bereitstellung, sodass dieser Status dann mit dem Zielstatus verglichen werden kann, der in der nächsten Bereitstellung deklariert wurde. Wenn der aktuelle Status also einen Amazon Simple Storage Service (Amazon S3) -Bucket mit dem Namen enthält my-s3-bucket und die eingehenden Änderungen ebenfalls denselben Bucket enthalten, wendet der neue Prozess alle gefundenen Änderungen auf den vorhandenen Bucket an, anstatt zu versuchen, einen völlig neuen Bucket zu erstellen.

Die folgende Tabelle enthält Beispiele für den allgemeinen IaC-Statusprozess.

Aktueller Status Zielstatus Aktion
Es wurde kein S3-Bucket benannt my-s3-bucket S3-Bucket benannt my-s3-bucket Erstellen Sie einen S3-Bucket mit dem Namen my-s3-bucket
my-s3-bucketohne konfigurierte Bucket-Versionierung my-s3-bucketohne konfigurierte Bucket-Versionierung Keine Aktion
my-s3-bucketohne konfigurierte Bucket-Versionierung my-s3-bucketmit konfigurierter Bucket-Versionierung Konfigurieren Sie somy-s3-bucket, dass die Bucket-Versionierung aktiviert ist
my-s3-bucketmit konfigurierter Bucket-Versionierung Kein S3-Bucket benannt my-s3-bucket Versuchen Sie zu löschen my-s3-bucket

Um zu verstehen, auf welche Art AWS CloudFormation und Weise Terraform den Status verfolgt, ist es wichtig, sich an den ersten grundlegenden Unterschied zwischen den beiden Tools zu erinnern: Es CloudFormation wird innerhalb von gehostet und Terraform ist im AWS Cloud Wesentlichen remote. Diese Tatsache ermöglicht es, den Status intern CloudFormation aufrechtzuerhalten. Sie können zur CloudFormation Konsole gehen und den Ereignisverlauf eines bestimmten Stacks einsehen, aber der CloudFormation Dienst selbst setzt die Statusregeln für Sie durch.

Die drei Modi, die CloudFormation für eine bestimmte Ressource verwendet werdenCreate, sindUpdate, undDelete. Der aktuelle Modus wird anhand der Ereignisse bei der letzten Bereitstellung bestimmt und kann nicht anderweitig beeinflusst werden. Möglicherweise können Sie CloudFormation Ressourcen manuell aktualisieren, um zu beeinflussen, welcher Modus festgelegt wird, aber Sie können keinen Befehl an diese Ressource übergeben, der besagt, CloudFormation dass Sie Create im Modus arbeiten müssen.

Da Terraform nicht in der gehostet wird AWS Cloud, muss der Prozess der Aufrechterhaltung des Status besser konfigurierbar sein. Aus diesem Grund wird der Terraform-Status in einer automatisch generierten Statusdatei beibehalten. Ein Terraform-Entwickler muss sich viel direkter mit dem Status befassen, als er es tun würde. CloudFormation Es ist wichtig, sich daran zu erinnern, dass die Statusverfolgung für beide Tools gleich wichtig ist.

Standardmäßig wird die Terraform-Statusdatei lokal auf der obersten Ebene des Hauptverzeichnisses gespeichert, in dem Ihr Terraform-Stack ausgeführt wird. Wenn Sie den terraform apply Befehl in Ihrer lokalen Entwicklungsumgebung ausführen, können Sie sehen, wie Terraform die Datei terraform.tfstate generiert, mit der der Status in Echtzeit aufrechterhalten wird. In guten wie in schlechten Zeiten haben Sie dadurch viel mehr Kontrolle über den Status in Terraform als in. CloudFormation Sie sollten die Statusdatei zwar niemals direkt aktualisieren, es gibt jedoch mehrere Terraform-CLI-Befehle, die Sie ausführen können, um den Status zwischen Bereitstellungen zu aktualisieren. Mit dem Terraform-Import können Sie beispielsweise Ressourcen, die außerhalb von Terraform erstellt wurden, zu Ihrem Bereitstellungsstapel hinzufügen. Umgekehrt können Sie eine Ressource aus dem Status entfernen, indem Sie terraform state rm ausführen.

Die Tatsache, dass Terraform seinen Status irgendwo speichern muss, führt zu einem anderen Konzept, das nicht gilt: das Backend. CloudFormation Ein Terraform-Backend ist der Ort, an dem ein Terraform-Stack seine Statusdatei nach der Bereitstellung speichert. Hier erwartet es auch, die Statusdatei zu finden, wenn eine neue Bereitstellung beginnt. Wenn Sie Ihren Stack wie oben beschrieben lokal ausführen, können Sie eine Kopie des Terraform-Status im lokalen Verzeichnis der obersten Ebene speichern. Dies wird als lokales Backend bezeichnet.

Bei der Entwicklung für eine CI/CD-Umgebung (Continuous Integration and Continuous Deployment) ist die lokale Statusdatei im Allgemeinen in der .gitignore-Datei enthalten, damit sie nicht der Versionskontrolle unterliegt. Dann ist in der Pipeline keine lokale Statusdatei vorhanden. Um ordnungsgemäß zu funktionieren, muss diese Pipeline-Phase irgendwo die richtige Statusdatei finden.Aus diesem Grund enthalten Terraform-Konfigurationsdateien häufig einen Backend-Block. Der Backend-Block zeigt dem Terraform-Stack an, dass er irgendwo neben seinem eigenen Verzeichnis auf oberster Ebene suchen muss, um die Statusdatei zu finden.

Ein Terraform-Backend kann sich fast überall befinden: in einem Amazon S3 S3-Bucket, einem API-Endpunkt oder sogar in einem Remote-Terraform-Workspace. Das Folgende ist ein Beispiel für ein Terraform-Backend, das in einem Amazon S3 S3-Bucket gespeichert ist.

terraform { backend "s3" { bucket = "my-s3-bucket" key = "state-file-folder" region = "us-east-1" } }

Um zu vermeiden, dass vertrauliche Informationen in Terraform-Konfigurationsdateien gespeichert werden, unterstützen Backends auch Teilkonfigurationen. Im vorherigen Beispiel sind die für den Zugriff auf den Bucket erforderlichen Anmeldeinformationen nicht in der Konfiguration vorhanden. Anmeldeinformationen können aus Umgebungsvariablen oder auf andere Weise abgerufen werden, z. AWS Secrets Manager B. Weitere Informationen finden Sie unter Schützen vertraulicher Daten mithilfe von AWS Secrets Manager und HashiCorp Terraform.

Ein übliches Backend-Szenario ist ein lokales Backend, das in Ihrer lokalen Umgebung zu Testzwecken verwendet wird. Die Datei terraform.tfstate ist in der .gitignore-Datei enthalten, sodass sie nicht in das Remote-Repository übertragen wird. Dann würde jede Umgebung innerhalb der CI/CD-Pipeline ihr eigenes Backend verwalten. In diesem Szenario haben möglicherweise mehrere Entwickler Zugriff auf diesen Remote-Status, sodass Sie die Integrität der Statusdatei schützen sollten. Wenn mehrere Bereitstellungen gleichzeitig ausgeführt werden und der Status aktualisiert wird, kann die Statusdatei beschädigt werden. Aus diesem Grund wird die Statusdatei in Situationen mit nicht lokalen Backends normalerweise während der Bereitstellung gesperrt.