Ricerca nel sito web

Come creare un'istanza RDS su AWS utilizzando Terraform


In questo articolo vedremo come creare un'istanza RDS MySql. Prima di procedere, presumo che tu abbia familiarità con le nozioni di base di Terraform e AWS RDS Service. Se vuoi imparare a creare un'istanza RDS MySql dalla console AWS, cerca \Come configurare un'istanza RDS MySql (Relation Database MySql) su AWS\

Prerequisiti

  1. Comprensione di base di Terraform.
  2. Terraform installato sul tuo sistema.
  3. Account AWS (crealo se non ne hai uno).
  4. access_key e secret_key di un utente AWS IAM. (Fai clic qui per imparare a creare un utente IAM con access_key e secret_key su AWS, )

Cosa faremo

  1. Scrivi i file di configurazione Terraform per l'istanza MySql di RDS.
  2. Crea un'istanza MySql di RDS utilizzando i file di configurazione Terraform.
  3. Elimina l'istanza MySql RDS creata utilizzando Terraform.

Scrivi i file di configurazione Terraform per l'istanza MySql di RDS.

Crea una directory dedicata in cui puoi creare file di configurazione terraform.

Utilizzare il seguente comando per creare una directory e modificare la directory di lavoro attuale in essa.

mkdir terraform
cd terraform/

Sto usando \vim\ come editor per scrivere nei file, puoi usare un editor a tua scelta e copiare e incollare le seguenti configurazioni per creare variabili.tf, terraform.tfvars e main.tf.

Crea main.tf che è responsabile della creazione di un RDS MySql su AWS. Questo main.tf leggerà i valori delle variabili da variable.tf e terraform.tfvars.

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}"
  }
}

Crea variable.tf che contiene la dichiarazione e la definizione delle variabili.

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"
}

Una volta creato il file variable.tf, non dimenticare di modificare i valori assegnati alle variabili. È necessario modificare i valori evidenziati poiché sono specifici del mio ambiente. Puoi mantenere le altre variabili così come sono.

Crea terraform.tfvars che contiene la definizione delle variabili access_key e secret_key definite nel file precedente. Abbiamo mantenuto la dichiarazione di queste 2 variabili insieme alla regione nel file terraform.tfvars. Cambia il valore di \region\ se vuoi creare l'istanza in una regione diversa da quella che ho specificato.

Le seguenti chiavi devono essere modificate con le chiavi dell'utente IAM.

vim terraform.tfvars

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

Ora dovresti avere 3 file, vale a dire, variable.tf, terraform.tfvars e main.tf

Crea un'istanza MySql RDS utilizzando i file di configurazione Terraform

Prima di eseguire i seguenti comandi assicurati di aver configurato access_key e secret_key validi.

Il primo comando da utilizzare è terraform init. Questo comando scarica e installa i plug-in per i provider utilizzati all'interno della configurazione. Nel nostro caso è AWS.

 terraform init

Il secondo comando da utilizzare è terraform plan. Questo comando viene utilizzato per vedere i cambiamenti che avverranno sull'infrastruttura.

 terraform plan

Il comando terraform apply creerà le risorse su AWS menzionate nel file main.tf. Ti verrà richiesto di fornire il tuo input di conferma per creare le risorse.

terraform apply

Quando esegui il comando precedente, dopo averlo completato con successo, puoi vedere che sono state aggiunte nuove risorse e 0 è stato distrutto.

Puoi accedere alla console AWS RDS per verificare se l'istanza RDS MySql è stata creata o meno.

Elimina l'istanza RDS MySql creata utilizzando Terraform

Se non hai più bisogno delle risorse che hai creato usando la configurazione menzionata nel file main.tf, puoi usare il comando \terraform destroy\ per eliminare tutte quelle risorse.

terraform destroy

Conclusione

In questo articolo, abbiamo visto i passaggi per creare un'istanza RDS MySql nella regione di nostra scelta. Abbiamo anche visto come l'istanza che abbiamo creato può essere cancellata in un solo comando.