terraform module 사용법(ec2)

2021. 6. 2. 04:06Terraform

이제 모듈로 ec2을 올려보자

우선 디렉토리를 만들자

 

ec2 모듈 디렉터리가 만들어졌으면 main.tf 파일을 작성해보자

# ~/test/module/ec2/main.tf

resource "aws_instance" "test" {            #ec2인스턴스 생성
  ami           = var.ami                   #사용할 ami
  instance_type = var.instance_type         #사용할 인스턴스 타입
  key_name      = var.key_name              #사용할 키(window 이용자는 ppk, mac또는 linux는 pem)
  subnet_id     = var.subnet_id             #서브넷ID
  associate_public_ip_address = true        #퍼블릭ip 부여
  
  tags = {
    Name = var.name                         #이름 태그
  }
}

 

작성이 완료됬으면 이제 variables.tf 파일을 만들어보자

# ~/test/module/ec2/variables.tf

variable "subnet_id" {}                            #서브넷 변수지정

variable "name" {                                  #이름변수 지정
  type        = string
}

variable "ami" {                                   #ami 변수지정
  type        = string
}

variable "instance_type" {                         #인스턴스 타입 변수지정
  type        = string
}

variable "key_name" {                              #사용할 키이름 지정
  type        = string
  default     = "lhy940810"                        #디폴트는 안넣어도 상관없음, 루트묘둘에서 지정하기 싫으면 넣어도됨
}

variable "associate_public_ip_address" {           #퍼블릭 ip 부여 변수지정
  type        = bool
  default     = null
}

variable "private_ip" {                            #프라이빗ip 변수지정(랜덤으로 부여받을꺼면 루트모듈에서 별도로 값입력 불필요)
  type        = string
  default     = null
}

 

 

이제 변수파일까지 만들었으면 마지막으로 output.tf 파일을 만들어주자.

# ~/test/module/ec2/output.tf

output "id" {                                #인스턴스 id output 값
  value       = aws_instance.test.id
}

 

 

모듈은 완성이 됬다. 이제 류트모듈 main.tf 파일에서 입력만 해주면 된다.

 

# ~/test/main.tf

provider "aws" {                          #사용자정보 지정
  region     = "ap-northeast-2"           #사용할 리전 지정
  access_key = "access_key"               #IAM 사용자 만들때 생성한 엑세스키 정보
  secret_key = "secret_key"               #IAM 사용자 만들때 생성한 시크릿키 정보
}

module "vpc" {                                 #사용할 모듈
  source                      = "./module/vpc" #모듈 위치

  vpc_cidr_block              = "10.1.0.0/16"  #vpc 모듈에서 지정한 변수의 값 / vpc의 cidr 값
  vpc_name                    = "test_vpc"     #vpc 모듈에서 지정한 변수의 값 / vpc의 이름
}

module "subnet" {                                 #사용할 모듈
  source                      = "./module/subnet" #모듈 위치

  vpc_id = module.vpc.vpc_id                     #vpc id 지정

  public_subnet_cidr_block = "10.1.1.0/24"      #퍼블릭 서브넷 CIDR 블록 지정
  public_subnet_AZ         = "ap-northeast-2a"  #퍼블릭 서브넷 가용영역 지정

  publicsb_name = "Pubilc_sb"                   #퍼블릭 서브넷 이름 지정

  private_subnet_cidr_block = "10.1.2.0/24"     #프라이빗 서브넷 CIDR 지정
  private_subnet_AZ         = "ap-northeast-2a" #프라이빗 서브넷 가용영역 지정

  privatesb_name = "Private_sb"                 #프라이빗 서브넷 이름 지정

}

module "igw"{                                   #사용할 모듈
  source       = "./module/igw"                 #모듈 위치
  
  vpc_id       = module.vpc.vpc_id              #igw 에 사용할 vpc id 지정
}

module "route_table"{                                       # 사용할 모듈
  source                 = "./module/rt"                    # 모듈 위치
  
  vpc_id                 = module.vpc.vpc_id                #vpc id 지정
  
  internet_gateway_id    = module.igw.internet_gateway_id   # 인터넷 게이트웨이 지정

  subnet_public_id       = module.subnet.public_subnet_id   # 서브넷 아이디 지정
}

module "ec2" {                                                #사용할 모듈
  source                 = "./ec2"                            #모듈 위치

  ami                    = "ami-0f2c95e9fe3f8f80e"            #사용할 ami(Amazon Linux2)
  key_name               = "lhy940810"                        #키 지정
  subnet_id              = module.subnet.public_subnet_id     #서브넷 지정
  name                   = "test-2a"                          #이름 지정
  instance_type          = "t2.micro"                         #인스턴스 타입 지정
}                                                             #변수파일에서 퍼블릭 ip부여를 디폴트로 지정해놨기 때문에 지정해줄필요 x

 

 

이제 완성이 됬으니 terraform init , plan , apply 을 해보자.

 

이렇게 만들어진것을 확인할수 있다.

'Terraform' 카테고리의 다른 글

terraform vpc peering  (0) 2021.06.06
terraform module 사용법(route table)  (0) 2021.06.01
terraform module 사용법(internet gateway)  (0) 2021.05.31
terraform module 사용법(subnet)  (0) 2021.05.30
terraform module 사용법(vpc)  (1) 2021.05.29