terrafom tutorial문서에서 아주 간단하게 사용방법을 알아봤다. 이제 좀 복잡한 인프라를 구성하면서 테라폼의 다양한 기능들을 살펴보려 한다. 이 문서는 terrafom tutorial를 기반으로 개선을 하는게 내용이므로 링크의 문서를 참고해야 한다.
테라폼으로 구성할 인프라는 아래와 같다.
2개의 가용영역을 사용한다. : 현재 서울리전은 3개의 가용영역을 가지고 있지만, 지금은 2개의 가용영역만 사용한다. 배열로 관리 할 거라서 3개로 확장은 간단하다.
퍼블릭 서브넷과 프라이빗 서브넷을 구성한다. 2개의 가용영역에 배치되므로 총 4개의 서브넷이 배치된다.
퍼블릭 서브넷으로의 인터넷에서의 접근을 위해서 인터넷 게이트웨이를 만든다.
프라이빗 서브넷에서 인터넷으로 접근하기 위한 Nat gateway를 만든다.
여기에서 사용한 예제의 원본은 여기에서 확인 할 수 있다. 원본의 내용을 개선하는 형태로 이루어진다.
버전
Terraform v0.11.13으로 테스트했다. (2019년 7월 2일)현재 최신버전은 v.12다. v.12 부터 for, if 문을 지원하는 등 변화가 크다.
가용영역 설정
ap-northeast-2a, ap-northeast-2b 두 개의 가용영역을 선택하기로 했다. 변수를 아래와 같이 정의했다.
variable "availability_zone" {
description = "Seoul region availability zone"
type = "list"
default = ["ap-northeast-2a", "ap-northeast-2b"]
}
거의 모든 terraform 리소스(resource)는 메타데이터 매개변수를 가지고 있다. count는 terrafrom의 count를 증가하면서 구문 블럭을 추가실행 하도록 해주는 매개변수다. HCL(HashCorp Configuration Language)는 선언적언어이기 때문에 루프나 if/else 문을 제공하지 않는다. 이는 인프라를 코드화하는 작업을 어렵게 만들 수 있다. count를 이용해서 루프를 실행 할 수 있다. 아래의 예제를 보자.
count : 가용영역(availability_zone)의 크기는 2이므로 이 리소스 블럭은 두 반복된다. for 루프문의 다른 구현이라고 볼 수 있겠다. 첫번째 실행에서는 ap-northeast-2a, 다은 번째 실행에서는 ap-northeast-2b가 될 것이다. 결론적으로 2개의 서브넷은 서로 다른 가용영역에 위치하게 될 것이다.
cidr_block : count.index는 0, 1이 될 것이다. 결국 10.100.0.0/24, 10.100.1.0/24 두 개의 서브넷이 만들어진다.
tags : Name 태그를 사용했다. 태그는 필터링, 분류, 과금, 통계 등을 위한 중요한 데이터다. 나중에 활용 할 수 있도록 자원에 대한 정보를 포함해야 한다. element를 이용해서 availability_zone을 가져오기로 했다.
Contents
소개
버전
가용영역 설정
Public subnet 정의
NAT Gateway
검증
정리
Recent Posts
Archive Posts
Tags