📚 IaC/Terraform

[Terraform] RDS 생성

heywantodo 2023. 7. 28. 17:43
728x90
반응형

[Terraform] RDS 생성

테라폼으로 AWS의 RDS를 생성해보자

관련하여 코드 사용법들은 아래 링크에 잘 나와있다.

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

 

Terraform Registry

 

registry.terraform.io

 

RDS를 구성하기 위해선 다음이 필요하다.

 

  • Security Group
    • DB 인스턴스의 엔진은 MySQL을 사용, 3306 Port를 허용해주는 DB 보안그룹
  • Subnet Group
    • 두 개 이상의 AZ에 생성된 private subnet

차례대로 만들어보자.

 

1. 보안 그룹

#aws_security_group
resource "aws_security_group" "db" {
    vpc_id = aws_vpc.vpc.id
    description = "Allow MySQL inbound traffics"
    
    ingress {
        description = "Allow MySQL"
        from_port = 3306
        to_port = 3306
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
    egress {
        from_port = 0
        to_port = 0
        protocol = "-1"
        cidr_blocks = ["0.0.0.0/0"]
    }
    
    tags = {
        Name = "allow_mysql"
    }
    
}

 

2. 서브넷 그룹

다중 AZ 구성을 하기 위해 각각  다른 가용 영역의 서브넷을 이용하여 서브넷 그룹을 구성

#subnet group
resource "aws_db_subnet_group" "dbsb" {
    name = "db_subnet_group"
    subnet_ids = [aws_subnet.subnet_a.id, aws_subnet.subnet_c.id]
    
    tags = {
        Name = "Terraform DB subnet Group"
    }
}

 

3. DB 인스턴스 생성

  • allocated_storage : RDS 스토리지 용량
  • identifier : DB 인스턴스 식별자
  • engine, engine_version : DB 엔진과 버전
  • instance_class : DB 인스턴스의 스펙
  • skip_final_snapshot : DB 인스턴스를 삭제하기 전 최종 스냅샷을 생성할 지 여부
  • publicly_accessible : 퍼블릭 액세스, true로 지정을 해야 외부에서 접근이 가능
  • parameters : DB 파라미터 그룹 설정
  • multi_az : HA (다중 가용영역) 구성 여부

⚠ DB user의 패스워드는 8글자 이상이여야 함, 8글자 이하면 생성이 안된다

resource "aws_db_instance" "rds" {
    allocated_storage = 10
    identifier        = "testdb"
    engine            = "mysql"
    engine_version    = "5.7"
    instance_class    = "db.t2.micro"
    
    db_name           = "testdb"
    username          = "admin"
    password          = "passwd"
    
    skip_final_snapshot = true
    publicly_accessible = true
    #muitl_az		= true
    
    db_subnet_group_name   = aws_db_subnet_group.dbsb.id
    vpc_security_group_ids = [aws_security_group.db.id]
}


output "rds_endpoint" {
    value = "${aws_db_instance.rds.endpoint}"
}

 

 

RDS를 생성하기 위한 코드는 다 완성이 됐으니 확인을 해보자.

terraform plan
terraform apply --auto-approve

AWS 콘솔에서 확인 시 매우 잘 생성되는 중, RDS는 생성되는데 시간이 조금 걸린다.

Output으로 엔드포인트가 출력된다. 접속 명령어는 아래 명령어를 통해서 확인할 수 있다.

mysql -h <endpoint> -u admin -pdbpasswd

Good~👍

728x90
반응형