본문 바로가기

AWS Cloud

[AWS - Terraform] RDS 구축 (Cluster 및 RDS Instance)

반응형

* 참조 사항
- 필자는 학습을 목적으로 main.tf에 전체 인프라 구축 코드를 작성하였으며, 이에 대해 각기 설명함
- .tf 파일을 resource 별로 분할할 시, 필자와 코드가 다를 수 있음
- Terraform 기초부터 순차적으로 보길 권장 (1번 게시물의 이해가 매우 중요)

1. Architecture Create : https://isc9511.tistory.com/163

2. Bucket 생성 및 파일 업로드 : https://isc9511.tistory.com/164

3. IAM Role 생성 및 정책 Attachment : https://isc9511.tistory.com/165

4. Network Setting : https://isc9511.tistory.com/166

 

 

 

* AWS RDS(Relational Database Service) : 관계형 DB (Aurora, PostgreSQL, MySQL 등)로, AWS에서 제공하는 분산형 DB로 클라우드 내에서 동작하도록 구현한 서비스

 

 

 

* Code 내용
- 아래는 RDS 중, Aurora MySQL 기반으로 선택하여 생성하였음

- DB가 소속되는 Subnet Group에 대한 생성 -> RDS Cluster (고가용성 보장을 위한 배포 모드) 생성 -> 실질적 DB 역할을 수행하는 RDS Instance 생성 (2-AZ로 2대 생성)

1) DB Subnet Group 생성

# RDS Subnet Group 생성
resource "aws_db_subnet_group" "db-subnet-group" {
  name = "three-tier-db-subnet-group"
  subnet_ids = [aws_subnet.private-db-subnet-az1.id, aws_subnet.private-db-subnet-az2.id]
    # 서브넷에 이미 소속 VPC, AZ 정보를 입력하여 생성하였기 때문에, 서브넷 id만 나열해주면 subnet group 생성
}

2) RDS Cluster 생성

# RDS특 -> 옵션 존나많음
resource "aws_rds_cluster" "aurora-mysql-db" {
  cluster_identifier = "database-1" # RDS Cluster 식별자명
  engine_mode = "provisioned" # DB 인스턴스 생성 시 Provisioned(미설정 시 default) 또는 Serverless 모드 지정
  db_subnet_group_name = aws_db_subnet_group.db-subnet-group.name # DB가 배치될 서브넷 그룹(.name으로 지정)
  vpc_security_group_ids = [aws_security_group.db-sg.id] # db 보안그룹 지정
  engine = "aurora-mysql" # 엔진 유형
  engine_version = "5.7.mysql_aurora.2.11.1" # 엔진 버전
  availability_zones = ["ap-northeast-2a", "ap-northeast-2c"] # 가용 영역
  database_name = "privatedb" # 이름 명칭 구문 까다로움 (특수문자 들어가면 안됌)
  master_username = "유저명 지정" # 인스턴스에서 직접 제어되는 DB Master User Name
  master_password = "유저 비밀번호 지정"
  skip_final_snapshot = true # RDS 삭제 시, 스냅샷 생성 X (true값으로 설정 시, terraform destroy 정상 수행 가능)
}

output "rds_writer_endpoint" { # rds cluster의 writer 인스턴스 endpoint 추출 (mysql 설정 및 Three-tier 연동파일에 정보 입력 필요해서 추출)
  value = aws_rds_cluster.aurora-mysql-db.endpoint # 해당 추출값은 terraform apply 완료 시 또는 terraform output rds_writer_endpoint로 확인 가능
}

3) RDS Instance 생성

resource "aws_rds_cluster_instance" "aurora-mysql-db-instance" {
  count = 2 # RDS Cluster에 속한 총 2개의 DB 인스턴스 생성 (Reader/Writer로 지정)
  identifier = "database-1-${count.index}" # Instance의 식별자명 (count index로 0번부터 1씩 상승)
  cluster_identifier = aws_rds_cluster.aurora-mysql-db.id # 소속될 Cluster의 ID 지정
  instance_class = "db.t3.small" # DB 인스턴스 Class (메모리 최적화/버스터블 클래스 선택 없이 type명만 적으면 됌)
  engine = "aurora-mysql"
  engine_version = "5.7.mysql_aurora.2.11.1"
}

 

 

 

* 주의 사항

- RDS 생성 시, Cluster와 DB Instance간 지정하는 Engine과 Version의 정보가 모두 일치해야 생성 가능

RDS 생성 주의 사항

 

 

 

 

반응형