테라폼에서 루프문 사용하기1

2024. 8. 23. 18:40IT/d . e . v . O . p . s

목차

1. 테라폼에서 루프문 사용하기1
2. 테라폼에서 루프문 사용하기2
3. 테라폼에서 루프문 사용하기3
4. 테라폼에서 루프문 사용하기4

Terraform에서 Looping이 필요한 이유는 무엇인가요?

Terraform CLI를 사용하여 인프라스트럭처 코드(IaC)를 관리할 때 , 비슷하지만 동일하지 않은 여러 리소스를 별도로 생성해야 하는 상황이 자주 발생합니다.

여기에는 여러 가용성 영역에 걸쳐 여러 인스턴스를 배포하거나, 여러 DNS 레코드를 설정하거나, 수많은 사용자 계정을 관리하는 것까지 다양할 수 있습니다.
각 리소스에 대한 구성을 수동으로 작성하는 것은 지루해지고 오류와 불일치의 가능성이 높아집니다.

여기서 Terraform의 루핑이 작용합니다. 루핑 구조는 다음과 같습니다. for문, for_each문, 그리고 count문은 컬렉션이나 개수를 기준으로 유사한 리소스를 동적으로 생성하는 방법을 제공합니다.

Terraform에서 반복작업을 위한 루프문 및 표현식

Terraform 리소스에는 5가지 유형의 메타 인수가 있다.
간단히 말해, 메타 인수는 모든 Terraform 리소스에 대해 정의할 수 있는 고유한 인수로, 리소스의 수명 주기, 프로비저닝 방법, 다른 리소스와의 관계 등 리소스의 특정 동작을 변경합니다.

Terraform의 표현식은 인프라 구성 내의 값을 참조하거나 계산하는 데 사용됩니다(동적 계산, 데이터 액세스, 리소스 참조 등).

이는 주로 Terraform 리소스 블록이나 모듈 블록에서 사용됩니다.

Terraform 리소스에는 5가지 유형의 메타 인수가 있지만
이번에는 Terraform 리소스의 루핑에 도움이 되는 표현식과 메타 인수에 초점을 맞추어 설명하겠습니다.

1.for_each - 리소스 또는 모듈의 여러 인스턴스를 만드는 데 사용되는 메타 인수입니다. 이름에서 알 수 있듯이 각각에 대해 for_each인수는 map이나 set 또는 list 사용하여 각 항목에 대한 인스턴스를 만듭니다. 복잡한 데이터 구조를 사용하고 고유 식별자로 각 인스턴스에 액세스할 수 있도록 하여 count 보다 더 많은 유연성을 제공합니다.

2.count - 이 메타 인수를 사용하면 주어진 카운트에 따라 루프를 돌며 리소스의 여러 인스턴스를 만들 수 있습니다. 이는 구성 블록을 복제하지 않고도 유사한 리소스를 만드는 데 유용합니다. 예를 들어, Terraform에서 count=5로 정의 되어진 EC2 인스턴스 생성코드는 클라우드 환경에 인스턴스 5개를 생성합니다.

3.for - list, setmap과 같은 컬렉션을 반복하고 조작하기 위한 다재다능한 표현입니다. for 문은 컬렉션 내의 요소를 반복하고 각 요소에 변경을 적용하는데 사용할 수 있으며, 조건문을 통해 옵션으로 적용될 항목을 필터링할 수도 있습니다.

예를 들어:

locals {
  original_set = {1, 2, 3, 4, 5}
  even_set = {for i in local.original_set : i if i % 2 == 0}
}

위에 예문에서는 original_set에서 정의된 숫자의 짝수만 포함하는 even_set을 생성합니다.

for vs for_each vs count

다음은 for문과 for_each문 그리고 count문의 몇 가지 핵심차이점은 아래와 같습니다.

for for_each count
목적 형태를 변경하거나 컬렉션(list, set, maps)을 필터링하는 데 사용됩니다. mapsset의 각 요소를 반복하여 여러 리소스 인스턴스를 생성합니다. 지정된 수의 리소스나 모듈의 인스턴스를 생성합니다.
사용 사례 컬렉션 수정(컬렉션 내 문자열 목록 필터링 등) 각 항목의 기본값을 기반으로 고유한 구성으로 리소스를 생성합니다. 고정된 수의 유사한 리소스를 생성합니다.
지원되는 컬렉션 유형 list, set, maps setmaps 숫자
요소에 접근하기 요소와 해당 인덱스에 양쪽 모두 접근 가능합니다. each.key 그리고 each.value를 통해 리소스의 key-value 쌍에 대한 접근이 가능합니다. count.index를 통해 현재 리소스 인덱스에 액세스가 가능합니다.
리소스 생성 데이터 조작에 사용되며, 직접적인 리소스 생성에는 사용되지 않습니다. 각 항목에서 정의된 고유한 구성을 통해 동적 리소스 생성이 가능합니다. 인덱스를 기반으로 약간의 변형(예: 명명)을 가미한 간단한 복제가 가능합니다.