본문 바로가기
AWS/Part 4. Ch02 테라폼을 이용한 인프라 관리

CH02_07. 테라폼 HCL count와 for_each

by Engineer-Lee 2022. 6. 2.
반응형

이번에는 count를 알아보자

https://github.com/tedilabs/fastcampus-devops/blob/main/2-terraform/06-count-for-each/main.tf

 

GitHub - tedilabs/fastcampus-devops: 🚀 패스트캠퍼스 데브옵스 초격차 코스 자료

🚀 패스트캠퍼스 데브옵스 초격차 코스 자료. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.

github.com

count나 for_each를 사용하지 않은 경우에 IAM user 3명을 만들고 output으로 출력하는 예제이다.

 

이렇게 반복되는 코드를 count를 이용하게 되면 아래와 같이 간단해진다.

count문은 resource, data, module에 대해서 적용이 가능하다.

count를 정의할 때는 resource문의 인자 값에다 리소스를 몇 개를 생성할지 지정해야 한다.

count는 resource 블록 내의 최상단에 선언하는 것이 convention이다.

name에서 ${count.index}는 0~9까지로 이루어진다.

output에서는 count.*.arn 을 통해 aws_iam_user_count[0]~aws_iam_user_count[9] 가 출력될 것이다.

 

apply를 해보면 IAM user 10명이 생성된 걸 볼 수 있다.

 

 

 


이번에는 for_each에 대해 알아보자

for_each문은 count가 몇 가지 문제점을 가지고 있어서 생겼다.

count로 유저를 생성할 경우 인덱스를 이용하여 리스트로 관리를 하는데, 만약 중간의 유저를 삭제하게 되면 그 뒤의 유저들이 shift 된다. 이는 삭제된 유저 인덱스의 뒤 인덱스를 가진 유저들이 모두 함께 삭제되고 재생성 된다는 것이다.

for_each문은 속성으로 set과 map을 지원한다.

map의 경우는 hash map 등의 형식이고 (key : value)

set은 중복을 허용하지 않는 리스트 형식이다.([1,2,3]) 

 

기본적으로 리스트 형식으로 값들을 적어놓고 toset을 통해 set으로 형변환을 한다.

for_each의 블록에서 루프를 돌면서 블록 안에서 사용할 수 있는 each.key와 each.value라는 값이 있다.

 

map형식에서는 each.key와 each.value가 서로 설정한 대로 다르지만

set형식에서는 each.key와 each.value가 서로 같다.

 

value에서 사용된 values()는 오브젝트의 밸류만 얻기 위해 사용됐다. 만약 키만 얻고 싶다면 keys()를 사용해야 한다.

 

apply를 해보면 3개의 유저가 생성된 걸 볼 수 있다.

 

 

마지막으로 for_each의 map을 이용해서 유저를 생성해보자

키 값은 반드시 string 이여야 하고 value 값은 어떤 타입이던지 상관없다.

each.key는 alice, bob, john이므로 name에 대입을 했고

value는 태그에 대입을 했다.

 

해당 코드를 apply해보면 3명의 사용자와 태그들이 생성된 걸 볼 수 있다.

 

 

 

지금까지 테라폼 count와 for_each문에 대해 알아보았다.

테라폼 워크스페이스에서 관리하고 있는 리소스들의 목록을 보고 싶다면 terraform state list 명령어를 입력하면 된다.

반응형