IaC/Terraform

[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 1

chanstory 2023. 2. 11. 11:10
반응형

** Terraform 실행 시 현 디렉토리 내 모든 tf 파일 참조됨 
      => 리소스 별 분리 관리 시 편함

 

최종 목표 아키텍처

 


STEP 1: DB인스턴스에 사용할 Amazon VPC 생성

자습서 참고 https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html

 

0. Terraform 구성 (main.tf)

#Provider 구성

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

#provider 구성
provider "aws" {    
  region = "ap-northeast-2"  # 리전 선택
}

 

Terraform provider 참고 링크

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

 


1. VPC 및 서브넷 생성 ( vpc.tf , publicSubnet.tf , privateSubnet.tf )

- 프라이빗 서브넷과 퍼블릭 서브넷 각각 2개 생성

 

#VPC 생성

# vpc 생성
resource "aws_vpc" "vpc"{
    cidr_block = "10.0.0.0/16"      # 10.0.x.x
    tags = {
        Name = "vpc"                # 리소스 네임 할당
    }
}

VPC 생성 참고 링크

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

 

Terraform Registry

 

registry.terraform.io

 


 

# 서브넷 생성

- 추후 EC2 생성 시 t2.micro를 사용할 예정이므로 선택 가능한 가용영역인 ap-northeast-2a, 2c 설정

#퍼블릭 서브넷 생성

resource "aws_subnet" "pub_subnet1" {
    vpc_id = aws_vpc.vpc.id
    cidr_block = "10.0.1.0/24"
    
    availability_zone = "ap-northeast-2a"

    tags = {
        Name = "public_subnet1"
    }
}

resource "aws_subnet" "pub_subnet2" {
    vpc_id = aws_vpc.vpc.id
    cidr_block = "10.0.2.0/24"
    
    availability_zone = "ap-northeast-2c"

    tags = {
        Name = "public_subnet2"
    }
}

#프라이빗 서브넷 생성

#subnet 생성 - Private Subnet
resource "aws_subnet" "prv_subnet1" {
    vpc_id = aws_vpc.vpc.id
    cidr_block = "10.0.3.0/24"

    availability_zone = "ap-northeast-2a"

    tags = {
        Name = "private_subnet1"
    }
}

resource "aws_subnet" "prv_subnet2" {
    vpc_id = aws_vpc.vpc.id
    cidr_block = "10.0.4.0/24"

    availability_zone = "ap-northeast-2c"

    tags = {
        Name = "private_subnet2"
    }
}

 

서브넷 생성 참고 링크

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

 

Terraform Registry

 

registry.terraform.io

 


 

2. VPC 보안 그룹 생성 (securityGroup.tf)

- 퍼블릭 웹 서버가 사용할 VPC 보안 그룹 생성

- 프라이빗 DB 웹 서버가 사용할 VPC 보안 그룹 생성

 

 

#퍼블릭 VPC 보안 그룹 생성

#Public Security Group
resource "aws_security_group" "publicsg" {
  vpc_id      = aws_vpc.vpc.id  
  name        = "Terraform-PublicSG"
  description = "Terraform-PublicSG"

  ingress {
    description = "http tcp 80"
    protocol    = "tcp"
    from_port   = 80
    to_port     = 80
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "http tcp 8080"
    protocol    = "tcp"
    from_port   = 8080
    to_port     = 8080
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "http ssh 8080"
    protocol    = "tcp"
    from_port   = 22
    to_port     = 22
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    protocol    = "-1"     #모든 트래픽 허용 (프로토콜 -1, from과 to port 0 설정 시)
    from_port   = 0    
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]    
  }
}

#프라이빗 DB 보안 그룹 생성

#Private Security Group
resource "aws_security_group" "prvSg" {
  vpc_id      = aws_vpc.vpc.id  
  name        = "Terraform-PrivateSG"
  description = "Terraform-PrivateSG"

  ingress {
    description = "mysql ssh port"
    protocol    = "tcp"
    from_port   = 3306
    to_port     = 3306
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    protocol    = "-1"     #모든 트래픽 허용
    from_port   = 0    
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]  
  }
}

보안그룹 생성 참고 링크

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

 

Terraform Registry

 

registry.terraform.io

 


3. DB 서브넷 그룹 생성 (RDS.tf)

- RDS 인스턴스가 사용할 VPC 서브넷 그룹을 만들어야 함

# DB서브넷 그룹 생성
resource "aws_db_subnet_group" "DB-prvSg" {
  name = "terraform-subnet-group"
  subnet_ids = [
    aws_subnet.prv_subnet1.id,
    aws_subnet.prv_subnet2.id
  ]
  tags = {
    "Name" = "terraform-subnet-group"
  }
}

 

RDS 서브넷 그룹 생성 참고 링크

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

 

Terraform Registry

 

registry.terraform.io

 

 

 

반응형