본문 바로가기

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

92일차 - 테라폼과 AWS 엔드 포인트, RDS 생성

엔드 포인트 생성

-  VPC 안의 S3와의 원활한 통신을 위하여 생성

...

# 기존 코드
# 인터넷 게이트웨이
resource "aws_internet_gateway" "igw_1" {
  vpc_id = aws_vpc.vpc_1.id

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

# 추가
resource "aws_vpc_endpoint" "s3_endpoint" {
  vpc_id       = aws_vpc.vpc_1.id
  service_name = "com.amazonaws.${var.region}.s3"
  route_table_ids = [aws_route_table.rt_1.id]
}

...

서브넷 추가

- RDS 사용을 위해선 최소 2개의 서브넷이 필요하다. => 다른 가용영역을 써야 함

 

기존 코드

resource "aws_subnet" "sub_1" {
  vpc_id                  = aws_vpc.vpc_1.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "${var.region}a"
  map_public_ip_on_launch = true

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

 

서브넷을 추가한 코드

...

# 서브넷1
resource "aws_subnet" "sub_1" {
  vpc_id                  = aws_vpc.vpc_1.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "${var.region}a"
  map_public_ip_on_launch = true

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

# 서브넷2
resource "aws_subnet" "sub_2" {
  vpc_id                  = aws_vpc.vpc_1.id
  cidr_block              = "10.0.2.0/24"
  availability_zone       = "${var.region}b"
  map_public_ip_on_launch = true

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

# 기존 코드
# 인터넷 게이트웨이
resource "aws_internet_gateway" "igw_1" {
  vpc_id = aws_vpc.vpc_1.id

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

# 인터넷 게이트웨이 추가
resource "aws_vpc_endpoint" "s3_endpoint" {
  vpc_id       = aws_vpc.vpc_1.id
  service_name = "com.amazonaws.${var.region}.s3"
  route_table_ids = [aws_route_table.rt_1.id]
}

MariaDB RDS 띄우기

# 서브넷 그룹
resource "aws_db_subnet_group" "db_subnet_group_1" {
  name = "${var.prefix}-db-subnet-group-1"
  subnet_ids = [aws_subnet.sub_1.id, aws_subnet.sub_2.id]

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

resource "aws_db_parameter_group" "mariadb_parameter_group_1" {
  name   = "${var.prefix}-mariadb-parameter-group-1"
  family = "mariadb10.6"

  parameter {
    name  = "character_set_client"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_connection"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_database"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_filesystem"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_results"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_server"
    value = "utf8mb4"
  }

  parameter {
    name  = "collation_connection"
    value = "utf8mb4_general_ci"
  }

  parameter {
    name  = "collation_server"
    value = "utf8mb4_general_ci"
  }

  tags = {
    Name = "${var.prefix}-mariadb-parameter-group"
  }
}

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                = "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"
  }
}