본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

93일차 - 테라폼과 AWS Route 53, DB 리플리케이션

Route 53

호스팅 영역 > 호스팅 영역 생성 > 도메인 이름 작성한 후 퍼블릭 호스팅 영역 선택, 호스팅 영역 생성 클릭 => 관리 준비 완료(관리 중인 것이 아님!) > 값/트래픽 라우팅 대상을 도메인의 네임 서버에 붙여넣기


EC2, RDS 인스턴스에 도메인 부여

variables.tf

variable "domain_1_zone_id" {
  description = "domain_1_zone_id"
  default     = "" # 호스팅 영역 ID
}
variable "domain_1" {
  description = "domain1"
  default     = "" # 내 도메인
}

 

main.tf

# For EC2 Instance
resource "aws_route53_record" "domain_1_ec2_1" {
  zone_id = var.domain_1_zone_id
  name    = "ec2-1.${var.domain_1}"
  type    = "A"
  ttl     = "300"
  records = [aws_instance.ec2_1.public_ip]
}

# For RDS Instance
resource "aws_route53_record" "domain_1_db_1" {
  zone_id = var.domain_1_zone_id
  name    = "db-1.${var.domain_1}"
  type    = "CNAME" # IP는 A, 도메인은 CNAME
  ttl     = "300"
  records = [aws_db_instance.db_1.address]
}

비밀번호 숨기기

깃에 올라가지 않도록 비밀번호를 다른 파일에 따로 저장한다.

main.tf

resource "aws_db_instance" "db_1" {
  identifier              = "${var.prefix}-db-1"
  allocated_storage       = 20
  max_allocated_storage   = 1000
  engine                  = "mariadb"
  engine_version          = "10.6.10"
  instance_class          = "db.t3.micro"
  publicly_accessible     = true
  username                = "admin"
  password                = var.db_password # 하드 코딩된 비밀번호를 제거
  parameter_group_name    = aws_db_parameter_group.mariadb_parameter_group_1.name
  backup_retention_period = 0
  skip_final_snapshot     = true
  vpc_security_group_ids  = [aws_security_group.sg_1.id]
  db_subnet_group_name    = aws_db_subnet_group.db_subnet_group_1.name
  availability_zone       = "${var.region}a"

  tags = {
    Name = "${var.prefix}-db-1"
  }
}

 

secret.tf

variable "db_password" {
  description = "db_password"
  default = "password" # 비밀번호 입력
}

DB 리플리케이션 구성

resource "aws_db_instance" "db_1" {
  identifier              = "${var.prefix}-db-1"
  allocated_storage       = 20
  max_allocated_storage   = 1000
  engine                  = "mariadb"
  engine_version          = "10.6.10"
  instance_class          = "db.t3.micro"
  publicly_accessible     = true
  username                = "admin"
  password                = var.db_password
  parameter_group_name    = aws_db_parameter_group.mariadb_parameter_group_1.name
  backup_retention_period = 1 # 하루 동안 백업본을 유지
  skip_final_snapshot     = true
  vpc_security_group_ids  = [aws_security_group.sg_1.id]
  db_subnet_group_name    = aws_db_subnet_group.db_subnet_group_1.name
  availability_zone       = "${var.region}a"

  tags = {
    Name = "${var.prefix}-db-1"
  }
}

# DB2 생성
resource "aws_db_instance" "db_2" {
  identifier             = "${var.prefix}-db-2"
  engine                 = "mariadb"
  engine_version         = "10.6.10"
  instance_class         = "db.t3.micro"
  publicly_accessible    = true
  parameter_group_name   = aws_db_parameter_group.mariadb_parameter_group_1.name
  skip_final_snapshot    = true
  vpc_security_group_ids = [aws_security_group.sg_1.id]
  availability_zone      = "${var.region}b"

  replicate_source_db = aws_db_instance.db_1.identifier

  tags = {
    Name = "${var.prefix}-db-2"
  }
}

# Route53 record for db-2
resource "aws_route53_record" "record_db-2_vpc-1_com" {
  zone_id = aws_route53_zone.vpc_1_zone.zone_id
  name    = "db-2.vpc-1.com"
  type    = "CNAME"
  ttl     = "300"
  records = [aws_db_instance.db_2.address]
}