웹사이트 검색

Terraform을 사용하여 AWS에서 RDS 인스턴스를 생성하는 방법


이 기사에서는 RDS MySql 인스턴스를 생성하는 방법을 살펴봅니다. 계속 진행하기 전에 귀하가 Terraform 및 AWS RDS 서비스의 기본 사항에 익숙하다고 가정합니다. AWS 콘솔에서 RDS MySql 인스턴스를 생성하는 방법을 배우려면 \AWS에서 RDS MySql(Relation Database MySql ) 인스턴스를 설정하는 방법\을 검색하십시오.

전제 조건

  1. Terraform에 대한 기본적인 이해.
  2. 시스템에 Terraform이 설치되어 있습니다.
  3. AWS 계정(계정이 없는 경우 생성).
  4. AWS IAM 사용자의 access_key 및 secret_key. (AWS에서 access_key 및 secret_key를 사용하여 IAM 사용자를 생성하는 방법을 알아보려면 여기를 클릭하십시오.)

우리가 할 일

  1. RDS MySql 인스턴스용 Terraform 구성 파일을 작성합니다.
  2. Terraform 구성 파일을 사용하여 RDS MySql 인스턴스를 만듭니다.
  3. Terraform을 사용하여 생성된 RDS MySql 인스턴스를 삭제합니다.

RDS MySql 인스턴스에 대한 Terraform 구성 파일을 작성합니다.

terraform 구성 파일을 만들 수 있는 전용 디렉터리를 만듭니다.

다음 명령을 사용하여 디렉토리를 만들고 현재 작업 디렉토리를 변경하십시오.

mkdir terraform
cd terraform/

저는 \vim\을 편집기로 사용하여 파일을 작성하고 있습니다. 원하는 편집기를 사용하고 다음 구성을 복사하여 붙여넣어 variables.tf, terraform.tfvars 및 main.tf를 만들 수 있습니다.

AWS에서 RDS MySql 생성을 담당하는 main.tf를 생성합니다. 이 main.tf는 variables.tf 및 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}"
  }
}

변수의 선언 및 정의를 포함하는 variables.tf를 생성합니다.

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

variables.tf를 생성한 후에는 변수에 할당된 값을 변경하는 것을 잊지 마십시오. 강조 표시된 값은 내 환경과 관련이 있으므로 변경해야 합니다. 나머지 변수는 그대로 유지할 수 있습니다.

위 파일에 정의된 access_key 및 secret_key 변수의 정의를 포함하는 terraform.tfvars를 생성합니다. 우리는 terraform.tfvars 파일에 지역과 함께 이 두 변수의 선언을 보관했습니다. 내가 지정한 지역이 아닌 다른 지역에 인스턴스를 생성하려면 \region\ 값을 변경하십시오.

IAM 사용자의 키로 다음 키를 변경해야 합니다.

vim terraform.tfvars

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

이제 3개의 파일 즉, variables.tf, terraform.tfvars 및 main.tf가 있어야 합니다.

Terraform 구성 파일을 사용하여 RDS MySql 인스턴스 만들기

다음 명령을 실행하기 전에 유효한 access_key 및 secret_key를 구성했는지 확인하십시오.

사용할 첫 번째 명령은 terraform init입니다. 이 명령은 구성 내에서 사용되는 공급자에 대한 플러그인을 다운로드하고 설치합니다. 우리의 경우 AWS입니다.

 terraform init

두 번째로 사용할 명령은 terraform plan입니다. 이 명령은 인프라에서 발생할 변경 사항을 확인하는 데 사용됩니다.

 terraform plan

terraform apply 명령은 main.tf 파일에 언급된 AWS에 리소스를 생성합니다. 리소스를 생성하기 위한 확인 입력을 제공하라는 메시지가 표시됩니다.

terraform apply

위 명령어를 실행하면 성공적으로 완료되면 새로운 리소스가 추가되고 0이 파괴된 것을 확인할 수 있습니다.

AWS RDS 콘솔로 이동하여 RDS MySql 인스턴스가 생성되었는지 확인할 수 있습니다.

Terraform을 사용하여 생성된 RDS MySql 인스턴스 삭제

main.tf 파일에 언급된 구성을 사용하여 생성한 리소스가 더 이상 필요하지 않은 경우 \terraform destroy\ 명령을 사용하여 해당 리소스를 모두 삭제할 수 있습니다.

terraform destroy

결론

이 기사에서는 선택한 지역에서 RDS MySql 인스턴스를 생성하는 단계를 살펴보았습니다. 또한 우리가 만든 인스턴스가 단 하나의 명령으로 어떻게 삭제되는지 살펴보았습니다.