AWS/Terraform / / 2023. 7. 14. 09:04

[AWS Terraform 기초]20. RDS 생성

반응형

이번 포스팅까지의 진행 구성도

 

1. Terraform Docs 예시

DB Subnet Group
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_subnet_group

 

Terraform Registry

 

registry.terraform.io

 

DB Instance
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance

 

Terraform Registry

 

registry.terraform.io

 

 

예시:

 

 

 

인수 등:

 

 

 

 

2. Terraform 코드 작성

 

# 19_rds.tf
resource "aws_db_subnet_group" "pmh-dbsg" {
  name       = "pmh-dbsg"
  subnet_ids = [aws_subnet.pmh_dba.id, aws_subnet.pmh_dbc.id]
}


resource "aws_db_instance" "pmh_dbins" {
  allocated_storage      = 20
  storage_type           = "gp2"
  engine                 = "mysql"
  engine_version         = "8.0"
  instance_class         = "db.t2.micro"
  db_name                = "wordpress"
  identifier             = "mydb"
  username               = "root"
  password               = "12341234"
  parameter_group_name   = "default.mysql8.0"
  availability_zone      = "ap-northeast-2a"
  db_subnet_group_name   = aws_db_subnet_group.pmh-dbsg.id
  vpc_security_group_ids = [aws_security_group.pmh_sg.id]
  skip_final_snapshot    = true

  tags = {
    Name = "pmh-db"
  }
}

 

resource "aws_ami_from_instance" "pmh_ami"

pmh_ami 라는 이름의 이미지 생성

 

resource "aws_db_subnet_group" "pmh-dbsg"

pmh-dbsg 라는 이름의 DB 서브넷 그룹 생성

(앞서 만든 서브넷 ID 포함)

 


resource "aws_db_instance" "pmh_dbins"

pmh_dbins 라는 이름의  DB 인스턴스 생성

1. allocated_storage: 할당된 스토리지 크기 (20GB)
2. storage_type: 스토리지 유형 (일반용 SSD)
3.engine: 사용할 데이터베이스 엔진 (MySQL)
4. engine_version: 데이터베이스 엔진 버전 (8.0)
5. instance_class: 인스턴스 유형 (db.t2.micro)
6. db_name: 데이터베이스 이름 (wordpress)
7. identifier: DB 인스턴스 식별자 (mydb)
8. username 및 password: 데이터베이스 인증에 사용할 사용자 이름과 비밀번호
9. parameter_group_name: 사용할 DB 파라미터 그룹 이름
10. availability_zone: 사용할 가용 영역 (ap-northeast-2a)
11. db_subnet_group_name: DB 인스턴스가 속할 DB 서브넷 그룹 이름 (앞서 만든 DB 서브넷 그룹 id)
12. vpc_security_group_ids: DB 인스턴스에 적용할 보안 그룹 ID (앞서 만든 보안 그룹 id)
13. skip_final_snapshot: 인스턴스 삭제 시 최종 스냅샷을 생성하지 않음

 

tags = { Name = "pmh-db" }

리소스에 태그 지정

(DB에 식별 가능한 이름 지정)

 

 

 

 

3. Terraform 분석 및 적용

 

terraform 파일이 있는 위치에서 아래 명령어 실행

 

# 변경 사항 검토 및 확인
terraform plan

# (대화형 승인 없이)변경 사용항 적용
terraform apply -auto-approve

 

4. 결과

 

+ 변수처리하는 방법

 

tag 변수 파일 생성

# var.tf
variable "tag" {
  type        = string
  default     = "pmh"
}

 

# 19_rds.tf
resource "aws_db_subnet_group" "pmh-dbsg" {
  name       = "${var.tag}-dbsg"
  subnet_ids = concat(aws_subnet.pmh_db[*].id)
}


resource "aws_db_instance" "pmh_dbins" {
  allocated_storage      = 20
  storage_type           = "gp2"
  engine                 = "mysql"
  engine_version         = "8.0"
  instance_class         = "db.t2.micro"
  db_name                = "wordpress"
  identifier             = "mydb"
  username               = "root"
  password               = "12341234"
  parameter_group_name   = "default.mysql8.0"
  availability_zone      = "${var.region}a"
  db_subnet_group_name   = aws_db_subnet_group.pmh-dbsg.id
  vpc_security_group_ids = [aws_security_group.pmh_sg.id]
  skip_final_snapshot    = true

  tags = {
    Name = "${var.tag}-db"
  }
}

 

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유