terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=3.71.0"
}
}
}
provider "azurerm" {
skip_provider_registration = true
features {}
}
모듈화
재사용을 위해서 리소스 생성 및 변수(variables)를 모듈화를 하였다.
2-1) Application Gateway 모듈 및 변수
AGW의 Public IP 생성 , AGW 생성
AGW생성을 위한 모든 변수는 전부 선언되어야한다. (terraform docs 참고해야함!)
여기서 제일 중요한 부분은 AGW의 backendpool을 설정하는 부분이다.
backendpool을 잘 설정해야지 AGW와 vm이 1대1로 매칭되여 연결되게 된다.
→ count 길이 기반으로 설정하여 nic_id 변수에 count.index 기반으로 생성하도록 하였다.
→ nic_id는 agw의 변수 파일인 variables.tf 파일에도 선언이 되어있어야하고 main.tf파일에서도 모듈로 가지고오는것을 선언해줘야한다.
→ module.vm[count.index].nic_id 는 모듈 vm의 outputs 값을 가져와서 count만큼 생성한다.
2-2) Virtual Machine 모듈 및 변수
VM 생성과 함께 VM에 필요한 public IP , NIC도 같이 생성해줘야한다.
var.변수는 모두 vm모듈의 variables.tf 파일에 선언되어있어야한다.
vm의 variables.tf파일
outputs.tf파일은 변수를 선언해서 모듈 밖에서 output 값을 쓰기 위한 파일이다.
nic_id는 여러개 생성되어야하며 리스트로 선언해주었다.
main.tf 파일에서 모듈 outputs 값으로 가져와서 값을 사용한다.
2-3) Virtual Network 모듈 및 변수
가상네트워크에 필요한 리소스를 생성한다.
리소스 생성을 위한 변수 선언
output 값을 설정해주는 tf 파일 생성
main.tf에는 모듈화된 파일들의 변수를 불러와서 동작이 되도록 소스코드를 정리하였다.
여기서 필요한 모듈 변수를 모두 불러오지 않으면 에러가 발생한다.
count 함수를 사용해서 vm이 여러개 생성 될 수 있도록 설정
→ ${count.index} 는 count 갯수를 variables에서 정하면 index값에 따라 생성 됨
→ 리소스명 + 0,1,2,3,4 …
main.tf의 변수 정리 variables.tf
❗주의 : count 변수는 예약어이기때문에 사용해서는 안되며 여기서는 count_instance로 설정하였다.
terraform.tfvars
※ terraform을 통해서 Azure에 배포하기 위해서는 az login이 되어있어야하고 구독 설정이 완벽하게 되어있어야한다.
Azure 로그인
az login
구독 설정 및 확인
az account set --subscribe=구독ID
az account list -o table
az account show -o table
테라폼 초기화 및 plan, apply
terraform init
-> 모듈에 변경사항이 있을경우 init 해주는게 좋음
terraform plan
-> 미리 생성될 리소스 배포 테스트 및 에러 확인
terraform apply --auto-approve
-> plan은 잘 되었지만 apply에서 에러 발생 할 수 있음.