Dev./Terraform

Terraform: AWS 서버구축2

Ivan'show 2023. 9. 10.
728x90
반응형

Staging: Backed server

DB 서버가 열렸으니 be 모듈을 추가해 db 인스턴스도 같이 띄워 보자.

variables.tf

# be module 을 열기위해 필요한 변수들 추가
...
NCP_ACCESS_KEY
NCP_SECRET_KEY
NCP_CONTAINER_REGISTRY
IMAGE_TAG
DJANGO_SETTINGS_MODULE
DJANGO_SECRET_KEY

main.tf

# backend server module
module "be" {
  source = "../modules/server"

  env = local.env
  name = "be"
  region = var.region

  vpc_id = module.network.vpc_id
  subnet_main_id = module.network.subnet_main_id
  port_range = local.be_port
  
  init_script_path = "be_init_script.tftpl"
  init_script_vars = {
    username = var.username
    password = var.password
    db = "lionforum"
    db_port = local.db_port
    db_user = var.db_user
    db_password = var.db_password
		# db 연결에 필요한 db 주소를 모듈에서 가져와 적어준다.
    db_host = module.db.public_ip

    NCP_ACCESS_KEY = var.NCP_ACCESS_KEY
    NCP_SECRET_KEY = var.NCP_SECRET_KEY
    NCP_CONTAINER_REGISTRY = var.NCP_CONTAINER_REGISTRY
    IMAGE_TAG = var.IMAGE_TAG
    DJANGO_SETTINGS_MODULE = var.DJANGO_SETTINGS_MODULE
    DJANGO_SECRET_KEY = var.DJANGO_SECRET_KEY
  }
}

outputs.tf

# be public ip 출력
...
output "be_public_ip" {
  value = module.be.public_ip
}

Loadbalancer

aws 에서는 ncp 와 다르게 loadbalancer 를 위한 구분된 subnet 을 요구하지 않아서 만들어둔 subnet 을 그대로 사용가능하다. 하지만 보안상의 이유로 보통은 구분지어서 빌드하는 것을 권장한다고 한다. 오히려 subnet 을 다르게 지정하게 되면 따로 커넥션을 이어주어야 하는 것으로 보인다.

variables.tf

# 받아서 사용할 변수들 정리
region
env
name
vpc_id
subnet_main_id
instance_id

main.tf

# provider
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = var.region
}

# loadbalancer - network
resource "aws_lb" "be" {
  name               = "${var.name}-lb-${var.env}"
  internal           = false
  load_balancer_type = "network"
  subnets            = [ var.subnet_main_id ]
  enable_deletion_protection = false

  tags = {
    Environment = var.env
  }
}

# target group
resource "aws_lb_target_group" "be" {
  name     = "${var.name}-lb-tg-${var.env}"
  port     = 8000
  protocol = "TCP"
  vpc_id   = var.vpc_id

  health_check {
    protocol = "TCP"
    port = 8000
    interval = 30
    healthy_threshold = 2
    unhealthy_threshold = 2
  }
}

# listener
resource "aws_lb_listener" "be" {
  load_balancer_arn = aws_lb.be.arn
  port              = "80"
  protocol          = "TCP"
  
  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.be.arn
  }
}

# group attachment
resource "aws_lb_target_group_attachment" "be" {
  target_group_arn = aws_lb_target_group.be.arn
  target_id        = var.instance_id
  port = 8000
}

outputs.tf

# dns 주소
output "lb_dns" {
  value = aws_lb.be.dns_name
}

로드 벨런서까지 연결된 이후 인프라 구축을 실행시키면,

728x90
반응형

'Dev. > Terraform' 카테고리의 다른 글

Terraform: nks resource  (0) 2023.09.23
Terraform: AWS ssh connection  (0) 2023.09.09
Terraform: AWS 서버구축  (0) 2023.09.08
Terraform: Status 가 꼬이는 현상  (0) 2023.09.07
Terraform: Separating  (0) 2023.09.06

댓글