Terraform 실전 · count 와 for_each · 퀴즈
퀴즈: count 와 for_each
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`count` 로 만든 인스턴스 세 개 중 가운데 항목을 목록에서 지웠습니다. 계획에 나타나는 일은?
- 뒤쪽 인스턴스가 앞으로 당겨지면서 남아 있어야 할 자원까지 재생성된다
- 색인은 그대로 유지되고 목록만 짧아져 계획에 아무 변화도 뜨지 않는다
- 색인 체계가 깨졌다고 판단해 세 인스턴스 전체가 한꺼번에 삭제된다
- 지운 항목에 해당하는 `[1]` 인스턴스 하나만 깔끔하게 삭제된다
리스트를 `for_each` 에 넘기려면 무엇이 필요한가요?
- `toset()` 으로 집합으로 바꾼다
- `tolist()` 로 감싼다
- `length()` 로 개수를 센다
- 리스트는 그대로 넘길 수 있다
이미 `count` 로 적용된 자원을 `for_each` 로 바꿀 때 `moved` 블록을 쓰지 않으면?
- 옛 주소가 사라지고 새 주소가 생긴 것으로 읽혀 전부 파괴 후 재생성된다
- 메타 인자가 바뀌었다며 `init` 단계에서 오류가 나고 진행이 막힌다
- 상태 주소가 그대로 유지되어 계획이 비고 아무 일도 일어나지 않는다
- 색인 `[0]` 과 키가 같은 순서로 자동 매핑되어 상태가 알아서 옮겨진다
`count = var.enable_x ? 1 : 0` 관용구가 여전히 유효한 이유는?
- `for_each` 는 집합과 맵만 받으므로 조건부 생성 자체를 표현할 수 없기 때문
- 삼항 연산자가 `count` 안에서만 평가되고 `for_each` 안에서는 막혀 있기 때문
- 인스턴스 키를 계산하지 않아 `for_each` 보다 계획 단계가 눈에 띄게 빠르기 때문
- 인스턴스가 최대 하나라 색인이 밀리는 문제가 없고 있고/없음을 그대로 표현하기 때문
`for_each` 의 키로 다른 리소스의 속성처럼 apply 시점에 정해지는 값을 쓰면?
- 계획 단계에서 인스턴스 목록을 알 수 없어 오류가 난다
- 키를 알 수 없어 `count` 처럼 숫자 색인으로 자동 전환된다
- 적용 시점에 키가 확정되므로 계획이 조금 느려질 뿐 문제는 없다
- 첫 apply 에서 키가 상태에 기록된 뒤부터는 정상 동작한다
`for_each` 와 `for` 표현식의 관계로 옳은 것은?
- 같은 반복 기능을 블록과 표현식으로 표기한 것일 뿐이라 어느 쪽을 써도 결과는 똑같다
- `for` 표현식은 리소스 블록 안에서만 쓸 수 있고 `output` 이나 `locals` 에서는 못 쓴다
- for_each 는 리소스 인스턴스를 늘리는 메타 인자이고, for 는 값을 다른 모양으로 바꾸는 표현식이다
- `for` 표현식은 `for_each` 에 넘길 컬렉션을 만들 때만 쓸 수 있는 문법이다