nayoungs
항상 끈기있게
nayoungs
  • 분류 전체보기 (274)
    • Cloud (21)
      • AWS (15)
      • Azure (3)
      • NCP (2)
      • GCP (1)
    • DevOps (68)
      • Docker (16)
      • Kubernetes (50)
      • CICD (2)
    • IaC (25)
      • Ansible (17)
      • Terraform (8)
    • Certification (4)
    • 금융 IT (5)
    • AI (3)
    • Linux (47)
    • 미들웨어 (5)
    • Programming (7)
      • GoLang (3)
      • Spring (4)
    • CS (25)
      • 네트워크 (17)
      • 운영체제 (5)
      • Web (1)
      • 개발 상식 (2)
      • 데이터베이스 (0)
    • Algorithm (59)
      • 프로그래머스 (36)
      • 백준 (18)
      • 알고리즘 정리 (5)
    • ETC (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nayoungs

항상 끈기있게

IaC/Terraform

[Terraform] 모듈(Module)

2022. 4. 22. 21:15
728x90

✔️ 모듈(Module)이란?

Module

Terraform AWS Module Github 저장소

 

ansible에서의 역할(role)과 비슷하며, 자주 사용하는 리소스들을 모아둔 컨테이너이다.

 

모듈의 종류

  • root 모듈 : 기본 작업 디렉터리의 파일에 정의된 리소스
  • child 모듈 : 모듈에 의해 호출된 모듈

 

모듈 초기화

초기화해야 모듈이 다운로드 된다.

terraform init

예시

module "myvpc" {
	source = 

	...입력 변수...
}
resource "aws_instance" "web" {

  subnet_id = module.myvpc.<출력값>
}

 

💻 AWS VPC 모듈 사용해보기

여기에 이어서 작성한다.

 

모듈을 사용할 때는 output 변수 이름 잘 확인해야 한다❕ : aws vpc module outputs

 

📝main.tf

module "app_vpc" {    #vpc 모듈
  source = "terraform-aws-modules/vpc/aws"

  name = "app_vpc"
  cidr = "10.0.0.0/16"

  azs = [
    "ap-northeast-2a",
    "ap-northeast-2b",
    "ap-northeast-2c",
    "ap-northeast-2d"
  ]
  public_subnets = [  #list로 작성해야함
    "10.0.0.0/24",
    "10.0.1.0/24",
    "10.0.2.0/24",
    "10.0.3.0/24"
  ]
  private_subnets = [  #list로 작성해야함
    "10.0.10.0/24",
    "10.0.11.0/24",
    "10.0.12.0/24",
    "10.0.13.0/24"
  ]
}

resource "aws_key_pair" "app_server_key" {    #보안 그룹
  key_name   = "app_server-key"
  public_key = file("/home/vagrant/.ssh/id_rsa.pub")
}

resource "aws_instance" "app_server" {     #EC2 인스턴스
  ami           = var.aws_amazon_linux_ami[var.aws_region]
  instance_type = "t3.small"
  vpc_security_group_ids = [aws_security_group.app_server_sg.id]
  key_name               = aws_key_pair.app_server_key.key_name
  subnet_id              = module.app_vpc.public_subnets[0]   #서브넷

  tags = local.common_tags
}

resource "aws_instance" "app_server2" {
  ami           = var.aws_amazon_linux_ami[var.aws_region]
  instance_type = "t3.small"
  vpc_security_group_ids = [aws_security_group.app_server_sg.id]
  key_name               = aws_key_pair.app_server_key.key_name
  subnet_id              = module.app_vpc.public_subnets[1] #output value를 참조한것

  tags = local.common_tags
}

resource "aws_eip" "app_server_eip" {
  vpc      = true
  instance = aws_instance.app_server.id
  tags     = local.common_tags
}

 

📝security_group.tf

보안 그룹은 vpc에 속하는 것이므로, 보안 그룹의 vpc를 수정해야 한다.

resource "aws_security_group" "app_server_sg" {
  name = "Allow SSH & HTTP"
  vpc_id = module.app_vpc.vpc_id #output value 참조

  ingress { #인바운드 규칙
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress { #인바운드 규칙
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["내 IP/32"]
  }

  egress { #아웃바운드 규칙
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

 

vpc 생성 확인

 

서브넷 생성 확인

 

인스턴스 생성 확인

 

 

 

728x90
저작자표시 (새창열림)
    'IaC/Terraform' 카테고리의 다른 글
    • [Terraform] 데이터 소스(Data Source)
    • [Terraform] Count 반복문 (with length function)
    • [Terraform] Provisioners (feat.Taint)
    • [Terraform] 사용자 데이터(Userdata)와 보안그룹(Security Group)
    nayoungs
    nayoungs
    안되면 될 때까지

    티스토리툴바