Terraform을 사용하여 AWS에서 RDS 인스턴스를 생성하는 방법
이 기사에서는 RDS MySql 인스턴스를 생성하는 방법을 살펴봅니다. 계속 진행하기 전에 귀하가 Terraform 및 AWS RDS 서비스의 기본 사항에 익숙하다고 가정합니다. AWS 콘솔에서 RDS MySql 인스턴스를 생성하는 방법을 배우려면 \AWS에서 RDS MySql(Relation Database MySql ) 인스턴스를 설정하는 방법\을 검색하십시오.
전제 조건
- Terraform에 대한 기본적인 이해.
- 시스템에 Terraform이 설치되어 있습니다.
- AWS 계정(계정이 없는 경우 생성).
- AWS IAM 사용자의 access_key 및 secret_key. (AWS에서 access_key 및 secret_key를 사용하여 IAM 사용자를 생성하는 방법을 알아보려면 여기를 클릭하십시오.)
우리가 할 일
- RDS MySql 인스턴스용 Terraform 구성 파일을 작성합니다.
- Terraform 구성 파일을 사용하여 RDS MySql 인스턴스를 만듭니다.
- 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 인스턴스를 생성하는 단계를 살펴보았습니다. 또한 우리가 만든 인스턴스가 단 하나의 명령으로 어떻게 삭제되는지 살펴보았습니다.