GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwalten Sie Terraform State in einem AWS S3-Bucket

In diesem Artikel werden wir sehen, was ein Terraform-Zustand ist und wie man ihn auf einem S3-Bucket verwaltet. Wir werden auch sehen, was "Schloss" in Terraform ist und wie man es implementiert. Um dies zu implementieren, müssen wir einen S3-Bucket und eine DynamoDB-Tabelle auf AWS erstellen.

Bevor Sie fortfahren, wollen wir die Grundlagen des Terraform-Zustands und der Sperre verstehen.

  • Terraform State (terraform.tstate-Datei): 
    Die Statusdatei enthält Informationen darüber, welche Ressourcen in den Terraform-Konfigurationsdateien definiert sind. Wenn Sie beispielsweise eine EC2-Instanz mithilfe der Terraform-Konfiguration erstellt haben, enthält die Statusdatei Informationen über die tatsächliche Ressource, die auf AWS erstellt wurde.
  • S3 als Backend zum Speichern der Statusdatei :
    Wenn wir in einem Team arbeiten, ist es gut, die Terraform-Statusdatei remote zu speichern, damit die Teammitglieder darauf zugreifen können. Um den Status remote zu speichern, benötigen wir zwei Dinge:einen S3-Bucket zum Speichern der Statusdatei und eine Terraform-S3-Back-End-Ressource.
  • Sperren
    Wenn wir die Statusdatei remote speichern, sodass viele Personen darauf zugreifen können, riskieren wir, dass mehrere Personen gleichzeitig versuchen, Änderungen an derselben Datei vorzunehmen. Wir brauchen also einen Mechanismus, der den Status „sperrt“, wenn er gerade von anderen Nutzern verwendet wird. Wir können dies erreichen, indem wir eine DynamoDB-Tabelle erstellen, die von Terraform verwendet werden kann.

Hier sehen wir alle Schritte von der manuellen Erstellung eines S3-Buckets, dem Hinzufügen der erforderlichen Richtlinie, der Erstellung einer DynamoDB-Tabelle mit Terraform und der Konfiguration von Terraform zur Verwendung von S3 als Back-End und DynamoDB, um die Sperre zu speichern.

Voraussetzungen

  1. Grundlegendes Verständnis von Terraform.
  2. Grundlegendes Verständnis von S3 Bucket.
  3. Terraform auf Ihrem System installiert.
  4. AWS-Konto (erstellen, falls Sie noch keins haben).
  5. 'access_key' &'secret_key' eines AWS IAM-Benutzers. (Klicken Sie hier, um zu erfahren, wie Sie einen IAM-Benutzer mit „access_key“ und „secret_key“ auf AWS erstellen, )

Was wir tun werden

  1. Erstellen Sie einen S3-Bucket und fügen Sie ihm eine Richtlinie hinzu.
  2. Erstellen Sie eine DynamoDB-Tabelle mit Terraform
  3. Erstellen Sie einen EC2 mit den Terraform-Konfigurationsdateien.
  4. Löschen Sie die erstellte EC2-Instanz mit Terraform.

Erstellen Sie einen S3-Bucket und hängen Sie ihm eine Richtlinie an.

Klicken Sie hier, um zu erfahren, wie Sie einen S3-Bucket in einem AWS-Konto erstellen. Sobald Sie einen Bucket erstellt haben, hängen Sie ihm die folgende Richtlinie an.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1560164441598", "Effect":"Allow", "Principal":"*", "Action":[ "s3:PutObject*", "s3:List*", "s3:Get*", "s3:Delete*" ], "Resource":[ "arn:aws:s3:::state-lock-rahul" , "arn:aws:s3:::state-lock-rahul/*" ] } ]}

Konfigurieren Sie „AWS_ACCESS_KEY_ID“ und „AWS_SECRET_ACCESS_KEY“, damit Sie über die CLI auf Ihr Konto zugreifen können.

Verwenden Sie den folgenden Befehl, um die Werte von "AWS_ACCESS_KEY_ID" und "AWS_SECRET_ACCESS_KEY

zu exportieren
AWS_ACCESS_KEY_ID=AKIAQ6GAIA5XC2XMMM7Wexportieren AWS_SECRET_ACCESS_KEY=BqmubAkz1L2OOsxcvJLjl3usE0XIn5WNtY+Qaxfbecho $AWS_ACCESS_KEY_IDecho $AWS_SECRET_ACCESS_KEY

Sobald Sie Ihre Anmeldeinformationen konfiguriert haben, können Sie sie einfach testen, indem Sie die Buckets mit dem folgenden Befehl auflisten.

aws s3 ls

Erstellen Sie eine DynamoDB-Tabelle mit Terraform

Erstellen Sie 'variables.tf', die die Deklaration der erforderlichen Variablen enthält.

vim variables.tf

Variable "Region" { description ="Region der AWS VPC"}

Erstellen Sie „main.tf“, die für die Erstellung einer DynamoDB-Tabelle verantwortlich ist. Diese main.tf liest Werte von Variablen aus variables.tf. Diese Tabelle wird verwendet, um die Sperre zu speichern.

Anbieter „aws“ { region =„${var.region}“}
Ressource „aws_dynamodb_table“ „terraform_locks“ {
name =„rahul-test-dynamodb-table“
billing_mode ="PAY_PER_REQUEST"
hash_key ="LockID"
attribute {
name ="LockID"
type ="S"
}
}

Der erste zu verwendende Befehl ist 'terraform init'. Dieser Befehl lädt Plugins für Anbieter, die in der Konfiguration verwendet werden, herunter und installiert sie. In unserem Fall ist es AWS.

  terraform init

Der zweite zu verwendende Befehl ist 'terraform plan'. Dieser Befehl wird verwendet, um die Änderungen anzuzeigen, die an der Infrastruktur stattfinden werden.

 Terraformplan

Der Befehl „terraform apply“ erstellt die in der main.tf-Datei erwähnten Ressourcen auf der AWS. Sie werden aufgefordert, Ihre Eingaben zum Erstellen der Ressourcen zu machen.

Terraform anwenden

Jetzt können Sie zum DynamoDB-Dashboard auf der Konsole gehen, um zu prüfen, ob die Tabelle erstellt wurde oder nicht.

Bis zu diesem Zeitpunkt haben wir einen S3-Bucket manuell aus der S3-Konsole und der DynamoDB-Tabelle mit Terraform erstellt. Wir haben den S3-Bucket nicht als Backend zum Speichern des Status und der DynamoDB-Tabelle zum Speichern der Sperre konfiguriert.

Um unser Ziel zu erreichen, müssen wir unsere Terraform-main.tf-Datei ändern. Nachdem Sie den Code geändert und ausgeführt haben, wird unser bereits vorhandener lokaler Status in das S3-Back-End kopiert.

Aktualisieren Sie unsere vorhandene main.tf mit dem folgenden Code.

vim main.tf

provider "aws" { region ="${var.region}"} terraform { backend "s3" { Bucket ="state-lock-rahul" key ="test/terraform.tfstate" region ="eu-west -3" dynamodb_table ="rahul-test-dynamodb-table" }} Ressource "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID"-Attribut { name =" LockID" type ="S" }}

Wenn Sie jetzt den Befehl "terraform plan" ausprobieren, um zu sehen, welche neue Ressource erstellt wird, schlägt der Befehl mit folgendem Fehler fehl.

Sie werden aufgefordert, das Backend neu zu initialisieren.

Um das Backend neu zu initialisieren, verwenden Sie den Befehl "terraform init". Bei diesem Schritt wird Ihre lokale Statusdatei in den S3-Bucket kopiert.

Terraform-Init

Sie können die Ausgabe wie im folgenden Screenshot sehen, nachdem Sie den Befehl „terraform init“ ausgeführt haben. Terraform wurde aktiviert, um die DynamoDb-Tabelle zu verwenden, um die Sperre zu erwerben. Sobald die Sperrung aktiviert ist, können keine zwei gleichen Operationen auf derselben Ressource parallel ausgeführt werden.

Sie können von der AWS-Konsole zum S3-Dashboard gehen, um zu sehen, ob die terraform.tfstate kopiert wurde oder nicht.

Jetzt können Sie wieder eine neue Ressource erstellen und sehen, dass der Status im S3-Bucket gespeichert wird. Um eine neue DynamoDB-Testtabelle zu erstellen, aktualisieren Sie die Datei main.tf mit dem folgenden Code.

vim main.tf

variable "region" { description ="Region of AWS VPC"}Rahuls-MacBook-Pro:terraform rahul$ cat main.tf provider "aws" { region ="${var.region}"}terraform { backend " s3" { Bucket ="state-lock-rahul" key ="test/terraform.tfstate" region ="eu-west-3" dynamodb_table ="rahul-test-dynamodb-table" }}resource "aws_dynamodb_table" "terraform_locks" { name ="rahul-test-dynamodb-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID"-Attribut { name ="LockID" type ="S" }}resource "aws_dynamodb_table" "test-table" { name ="rahul -test-table" billing_mode ="PAY_PER_REQUEST" hash_key ="LockID"-Attribut { name ="LockID" type ="S" }}

Dieses Mal ist es nicht erforderlich, "terraform init" auszuführen, da es keine Änderung im Backend des Anbieters gibt.

Sie können einfach den Befehl "terraform plan" verwenden, um zu sehen, welche neuen Ressourcen erstellt werden.

Terraformplan

Führen Sie nun den folgenden Befehl aus, um eine neue DynamoDb-Testtabelle zu erstellen.

Terraform anwenden

Im obigen Screenshot können Sie sehen, dass die Sperrung aktiviert wurde, die .tfstate-Datei wird auf S3 kopiert.

Jetzt können Sie in der Konsole sehen, dass die neue Tabelle erstellt wurde

Wenn Sie jetzt die Ressource, die Sie mit Terraform erstellt haben, nicht mehr benötigen, verwenden Sie den folgenden Befehl, um die Ressourcen zu löschen.

Terraform zerstören

Sobald Sie die Ressourcen löschen, können Sie sehen, dass die Tabelle, die zum Sperren verwendet wurde, ebenfalls gelöscht wurde. Wenn Sie den S3-Bucket auch nicht benötigen, können Sie ihn aus der Konsole löschen.

Schlussfolgerung

In diesem Artikel haben wir die Notwendigkeit kennengelernt, einen Remote-Zustand zu verwenden und in Terraform zu sperren. Wir haben die Schritte zur Verwendung von S3-Bucket als Backend zum Speichern des Terraform-Status und der DynamoDb-Tabelle zum Aktivieren der Sperrung gesehen.


Linux
  1. So verwalten Sie Linux-Dateifunktionen

  2. So verwalten Sie das Kontopasswort in Linux

  3. So erstellen Sie eine RDS-Instance auf AWS mit Terraform

  4. So erstellen Sie eine IAM-Rolle in AWS mit Terraform

  5. So verwenden Sie AWS CLI zum Verwalten von Amazon S3

Was ist Terraform und wie wird es auf AWS EC2 installiert und verwendet?

Erstellen Sie mit Terraform einen S3-Bucket auf AWS

So erstellen Sie einen S3-Bucket mit Python Boto3 auf AWS

So erstellen Sie eine DynamoDB-Tabelle in AWS

So installieren Sie Terraform unter Ubuntu 18.04/20.04 LTS

So verwalten Sie Datenbanken in MariaDB unter Ubuntu 18.04