Wie man eine RDS-Instanz auf AWS mit Terraform erstellt

In diesem Artikel sehen wir uns an, wie man eine RDS MySql Instanz erstellt. Bevor wir fortfahren, gehe ich davon aus, dass du mit den Grundlagen von Terraform und AWS RDS Service vertraut bist. Wenn du lernen willst, wie du eine RDS MySql-Instanz von der AWS-Konsole aus erstellen kannst, dann findest Du das passende Tutorial hier.

Vorraussetzungen

  1. Grundlegendes Verständnis von Terraform.
  2. Terraform ist auf deinem System installiert.
  3. AWS-Konto (Erstelle wenn du noch keines hast).
  4. ‚access_key‘ & ’secret_key‘ eines AWS IAM Users. (Klicke hier um zu erfahren, wie du einen IAM-Benutzer mit ‚access_key‘ & ’secret_key‘ auf AWS erstellst).

Was wir tun werden

  1. Terraform-Konfigurationsdateien für die RDS MySql-Instanz schreiben.
  2. Erstelle eine RDS MySql-Instanz mit Hilfe der Terraform-Konfigurationsdateien.
  3. Lösche die erstellte RDS MySql-Instanz mit Terraform.

Schreibe die Terraform-Konfigurationsdateien für die RDS MySql-Instanz.

Erstelle ein eigenes Verzeichnis, in dem du Terraform-Konfigurationsdateien erstellen kannst.

Verwende den folgenden Befehl, um ein Verzeichnis zu erstellen und wechsle in dein aktuelles Arbeitsverzeichnis.

mkdir terraform
cd terraform/

Ich verwende „vim“ als Editor, um die Dateien zu schreiben. Du kannst einen Editor deiner Wahl verwenden und die folgenden Konfigurationen per Copy-Paste einfügen, um variables.tf, terraform.tfvars und main.tf zu erstellen.

Erstelle „main.tf“, die dafür verantwortlich ist, eine RDS MySql auf AWS zu erstellen. Diese main.tf wird die Werte der Variablen aus variables.tf und terraform.tfvars lesen.

vim main.tf

provider "aws" {
      region     = "${var.region}"
      access_key = "${var.access_key}"
      secret_key = "${var.secret_key}"
}
resource "aws_db_instance" "default" {
  depends_on             = ["aws_security_group.default"]
  identifier             = "${var.identifier}"
  allocated_storage      = "${var.storage}"
  engine                 = "${var.engine}"
  engine_version         = "${lookup(var.engine_version, var.engine)}"
  instance_class         = "${var.instance_class}"
  name                   = "${var.db_name}"
  username               = "${var.username}"
  password               = "${var.password}"
  vpc_security_group_ids = ["${aws_security_group.default.id}"]
  db_subnet_group_name   = "${aws_db_subnet_group.default.id}"
  skip_final_snapshot = "true"
}

resource "aws_db_subnet_group" "default" {
  name        = "main_subnet_group"
  description = "Our main group of subnets"
  subnet_ids  = ["${aws_subnet.subnet_1.id}", "${aws_subnet.subnet_2.id}"]
}
resource "aws_subnet" "subnet_1" {
  vpc_id            = "${var.vpc_id}"
  cidr_block        = "${var.subnet_1_cidr}"
  availability_zone = "${var.az_1}"

  tags = {
    Name = "main_subnet1"
  }
}

resource "aws_subnet" "subnet_2" {
  vpc_id            = "${var.vpc_id}"
  cidr_block        = "${var.subnet_2_cidr}"
  availability_zone = "${var.az_2}"

  tags = {
    Name = "main_subnet2"
  }
}
resource "aws_security_group" "default" {
  name        = "main_rds_sg"
  description = "Allow all inbound traffic"
  vpc_id      = "${var.vpc_id}"

  ingress {
    from_port   = 0
    to_port     = 65535
    protocol    = "TCP"
    cidr_blocks = ["${var.cidr_blocks}"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "${var.sg_name}"
  }
}

Erstelle „variables.tf“, die die Deklaration und Definition der Variablen enthält.

vim variables.tf

variable "access_key" {
     description = "Access key to AWS console"
}
variable "secret_key" {
     description = "Secret key to AWS console"
}
variable "region" {
     description = "Region of AWS VPC"
}
variable "identifier" {
  default     = "mydb-rds"
  description = "Identifier for your DB"
}

variable "storage" {
  default     = "10"
  description = "Storage size in GB"
}

variable "engine" {
  default     = "mysql"
  description = "Engine type, here it is mysql"
}

variable "engine_version" {
  description = "Engine version"

  default = {
    mysql    = "5.7.21"
  }
}

variable "instance_class" {
  default     = "db.t2.micro"
  description = "Instance class"
}

variable "db_name" {
  default     = "myfirstdb"
  description = "db name"
}

variable "username" {
  default     = "rahul"
  description = "User name"
}

variable "password" {
  description = "password, provide through your ENV variables"
  default = "rahul1234"
}
variable "subnet_1_cidr" {
  default     = "172.31.48.0/20"
  description = "Your AZ"
}

variable "subnet_2_cidr" {
  default     = "172.31.64.0/20"
  description = "Your AZ"
}

variable "az_1" {
  default     = "eu-west-3c"
  description = "Your Az1, use AWS CLI to find your account specific"
}

variable "az_2" {
  default     = "eu-west-3a"
  description = "Your Az2, use AWS CLI to find your account specific"
}

variable "vpc_id" {
  description = "Your VPC ID"
  default = "vpc-be1010d7"
}
variable "cidr_blocks" {
  default     = "0.0.0.0/0"
  description = "CIDR for sg"
}

variable "sg_name" {
  default     = "my-rds-sg"
  description = "Tag Name for sg"
}

Wenn du die Datei „variables.tf“ erstellt hast, vergiss nicht, die den Variablen zugewiesenen Werte zu ändern. Du musst die hervorgehobenen Werte ändern, da sie spezifisch für meine Umgebung sind. Die restlichen Variablen kannst du so lassen, wie sie sind.

Erstelle „terraform.tfvars“, die die Definition der Variablen access_key und secret_key enthält, die in der obigen Datei definiert wurden. Wir haben die Deklaration dieser beiden Variablen zusammen mit „region“ in der Datei „terraform.tfvars“beibehalten. Ändere den Wert von „region“, wenn du die Instanz in einer anderen Region als der von mir angegebenen erstellen willst.

Die folgenden Schlüssel müssen mit den Schlüsseln deines IAM-Benutzers geändert werden.

vim terraform.tfvars

region = "eu-west-3"
access_key = "AKIAQ6GAIA5XFLXF6HOV"
secret_key = "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"

Jetzt solltest du 3 Dateien haben, nämlich variables.tf, terraform.tfvars und main.tf

Erstelle eine RDS MySql Instanz mit Hilfe der Terraform Konfigurationsdateien

Bevor du die folgenden Befehle ausführst, stelle sicher, dass du einen gültigen access_key und secret_key konfiguriert hast.

Der erste Befehl, den du verwenden musst, ist „terraform init“. Dieser Befehl lädt die Plugins für die in der Konfiguration verwendeten Anbieter herunter und installiert sie. In unserem Fall ist es AWS.

terraform init

Der zweite Befehl ist „terraform plan“. Dieser Befehl wird verwendet, um die Änderungen zu sehen, die an der Infrastruktur vorgenommen werden.

terraform plan

Der Befehl ‚terraform apply‘ erstellt die Ressourcen auf der AWS, die in der Datei main.tf angegeben sind. Du wirst aufgefordert, deine Eingaben zu bestätigen, um die Ressourcen zu erstellen.

terraform apply

Wenn du den obigen Befehl ausführst, kannst du nach erfolgreichem Abschluss sehen, dass neue Ressourcen hinzugefügt und 0 zerstört wurden.

Du kannst die AWS RDS-Konsole aufrufen, um zu überprüfen, ob die RDS MySql-Instanz erstellt wurde oder nicht.

Löschen der erstellten RDS MySql-Instanz mit Terraform

Wenn du die Ressourcen, die du mit der Konfiguration in der Datei main.tf erstellt hast, nicht mehr benötigst, kannst du den Befehl „terraform destroy“ verwenden, um alle Ressourcen zu löschen.

terraform zerstören

Fazit

In diesem Artikel haben wir gesehen, wie wir eine RDS MySql-Instanz in einer Region unserer Wahl erstellen. Wir haben auch gesehen, wie die erstellte Instanz mit nur einem Befehl gelöscht werden kann.

Das könnte dich auch interessieren …