본문 바로가기
교육

[97일 차] 21.12.09 : Terraform 6

by ballena 2021. 12. 9.

Terraform

- 조건식 + 데이터 소스

- 무중단 배포


1교시

 

 

모듈 폴더에서 2가지의 user_data.sh 스크립트를 제공하고, 사용자가 어떤 스크립트를 실행할지 선택할 수 있게 해 보자.

-> 모듈 폴더에 2가지 스크립트 생성, template_file 데이터 소스를 통해 스크립트 정의

-> 모듈 사용자가 스크립트를 선택할 수 있도록 입력 변수 정의

-> template_file 데이터 소스에 count 매개 변수를 이용, 특정 스크립트가 선택되게 설정

-> 시작 구성 리소스에 template_file 데이터 소스 정의

모듈 코드에 있는 데이터 소스

template 매개 변수로 스크립트 파일이 어디 있는지 알려준다.

루트 모듈에서 source 매개 변수로 모듈의 위치를 지정하는데, 이 경로가 path.module이 된다.

 

 

대충 실습 상황은

-> prod에서는 기존에 사용하던 스크립트 사용, stage에서는 새로운 스크립트 사용

모듈에 코드 추가

그리고 입력 매개 변수의 값에 따라 user_data의 값을 바꾸면 되겠다.

모듈의 variables.tf

이 매개 변수를 사용하는 코드를 data 블록 내부에 작성

enable_new_user_data가 true라면 기존 스크립트를 사용하지 않고,

enable_new_user_data가 false라면 기존 스크립트를 사용

새로운 데이터 블록에는 반대로 작성하면 된다.

모듈의 main.tf

만약 기존 스크립트를 사용하지 않는다면 data.template_file.user_data는 빈 리스트가 된다 = 길이가 0

-> 기존 스크립트를 사용하지 않는다 = 새로운 스크립트를 사용한다

-> 조건식(length > 0)이 거짓이라면 새로운 스크립트 사용


2~3교시

 

 

22일 1차 제출 때 70% 이상 완성 목표

31일 2차 제출 때 PPT 80% 이상 완성 필요

 

 

이번에는 for_each와 for 표현식을 사용한 조건문

 

for_each = <COLLECTION>

컬렉션이 비어 있는지 여부를 조건부로 어떻게 판단할 수 있는가?

 

컬렉션에 {for 구문}으로 인라인 블록을 유동적으로 조절 가능

리소스 자체를 반복 생성하거나 조건 생성할 때 -> 일반적으로 count 매개 변수

이 외의 경우(인라인 블록 등)에서 반복/조건 생성할 때 -> for_each 구문 + for 표현식 사용

 

if 문자열 지시자가 있는 조건문

-> %{ if <조건> }<참일 경우의 값>%{ endif }

-> %{ if <조건> }<참일 경우의 값>%{ else }<거짓일 경우의 값>%{ endif }

대충 이렇게


4교시

 

 

무중단 배포 - 업데이트 시 서비스 중단 없이 진행되도록

 

블루-그린 배포 방식

-> 블루(기존 서비스), 그린(새로운 서비스)

그린 인프라를 미리 만들고, 로드 밸런서를 통해 자연스럽게 블루에서 그린으로 이동하도록 조치

 

사실 이미 사용하고 있다. lifecycle 인라인 블록이 해당 기능을 해주고 있다.

실습 전 전제조건

 


5~6교시

 

 

시작 구성 정보가 달라지면 교체의 개념이다(그렇다고 ID가 바뀌는 것은 아니다)

 

ASG는 시작 구성에 EC2 구성 정보를 담아놓는다. 이 시작 구성은 ASG가 참조한다.

 

무중단 배포 방식은 교체용 ASG를 먼저 만든 다음 기존의 ASG를 파기하는 방식.

-> create_before_destroy 수명 주기 설정 작업

 

while ($true) {curl webservers-stage-alb-1724597622.ap-northeast-2.elb.amazonaws.com ; start-sleep -seconds 1}


7~8교시

 

 

1. ELB가 기존 시작 구성을 가진 ASG를 가리킨다

2. 새로운 시작 구성이 배포된다

3. 새로운 ASG가 생성되고 ELB에 연결된다. 상태 확인 시작

4. 새로운 ASG(버전 2)가 완전히 등록된 후 이전 ASG를 멈춘다(서버 종료)

5. 이전 ASG는 사라지고 버전 2 ASG만 남는다


5~6교시 빠르게 훑기

'교육' 카테고리의 다른 글

[99일 차] 21.12.13 : Kubernetes 1  (0) 2021.12.13
[98일 차] 21.12.10 : Docker  (0) 2021.12.10
[96일 차] 21.12.09 : Terraform 5  (0) 2021.12.08
[95일 차] 21.12.07 : Terraform 4  (0) 2021.12.07
[94일 차] 21.12.06 : Terraform 3  (0) 2021.12.06

댓글