CloudNet@ 팀의 가시다님께서 Leading 하시는 Terraform T101 Study 내용 요약
해당 Terraform Study 는 Terraform Up and Running 책을 기반으로 진행 중입니다.
테라폼에는 반복되는 여러 리소스를 한 번에 배포할 수 있도록 count, for, for_each 등의 반복문을 제공하고 있다.
이번 포스팅에서는 테라폼 반복문 중 for_each 에 대해서 알아보자!
count 반복은 아래 포스팅을 참고하자 !!
5주차(1)_Terraform 반복문_count
CloudNet@ 팀의 가시다님께서 Leading 하시는 Terraform T101 Study 내용 요약 해당 Terraform Study 는 Terraform Up and Running 책을 기반으로 진행 중입니다. 테라폼에는 반복되는 여러 리소스를 한 번에 배포할 수
kimalarm.tistory.com
1. for_each
for_each 표현식은 리스트(List), 집합(Set), 맵(Map) 을 사용하여 전체 리소스 혹은 인라인 블록을 반복할 수 있다.
- for_each 표현식은 리소스를 배열(Array)이 아닌 맵(Map)으로 저장하기 때문에, 특정 리소스만을 삭제할 수 있다.
1.1. for_each 사용법
기본 구문은 아래와 같다.
- COLLECTIOM : 반복 처리할 집합(Set), 맵(Map)
- CONFIG : 해당 리소스와 관련된 인수로 구성. each.key 혹은 each.value 를 통해 COLLECTION 의 key - value 에 접근
실제로 테스트하기 위해 다음과 같이 ec2.tf , variables.tf 를 생성한다.
- ec2_type 변수의 항목 개수만큼 반복을 하며, instance_type 인수 속에는 ec2_type 항목 value 에 해당하는 값이 입력됨
1.2. for_each 내 List 사용
for_each 내에서 list 리소스를 사용하기 위해 toset 함수가 필요
for_each 는 기본적으로 List 를 지원하지 않아 toset 함수를 사용해야한다.
이전 포스팅에서 사용했던 iam.tf 파일을 for_each 구문을 활용해서 생성해보자
count 로 생성한 리소스와는 다르게 plan 출력 시, 배열(숫자)이 아닌 설정한 변수값이 출력되는 것을 확인할 수 있다.
그렇다면 output 출력 내용을 살펴보자 !!
Output이 배열이 아닌 맵 형식으로 출력되는 것을 확인 할 수 있다.
이렇게 되면 특정 리소스만 골라서 삭제하는 것도 가능해진다.
variables.tf 에서 "aws" 리소스를 삭제한 후에 plan 과 apply 의 변화는 어떻게 될까??
count 와는 다르게 제거한 "aws" 만 골라서 삭제된다 !!
1.3. for_each 인라인 블록 사용
for_each 구문은 count 와 다르게 인라인 블록에서도 사용 가능 !!
다음과 같이 RDS Parameter Group 생성에 for_each 를 사용할 수 있다.
이번 포스팅에서는 for_each 반복문에 대해서 알아보았다.
다음 포스팅에서는 테라폼 for 반복문에 대해서 알아보자 !!