Quiz: count and for_each
한국어 원문으로 표시합니다.
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에 넘길 컬렉션을 만들 때만 쓸 수 있는 문법이다