* 참조 사항
- 필자는 학습을 목적으로 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의 정보가 모두 일치해야 생성 가능
'AWS Cloud' 카테고리의 다른 글
[AWS - Terraform] Auto Scaling (0) | 2023.03.29 |
---|---|
[AWS - Terraform] Instance(EC2) 생성 (0) | 2023.03.29 |
[AWS - Terraform] Network Setting (VPC, Subnet, IGW, NGW, Routing table, Security Group) (2) | 2023.03.28 |
[AWS - Terraform] IAM Role 생성 및 정책 Attachment (0) | 2023.03.28 |
[AWS - Terraform] Bucket 생성 및 파일 업로드 (0) | 2023.03.28 |