본문 바로가기
INFRA/Automation

[Terraform] Meta-Argument 2 . for_each문

by BTC_쭈콩 2023. 6. 30.

베하 !! 

안녕하세요 BTC_콩순이들입니다 !! 

오늘은 저번 포스팅에 이어 Terraform Meta-Argument 에 대해 알아보도록 하겠습니다!!

저번에는 count 문을 설명해드리며 마지막에 단점이 있다고 말씀드렸죠 !

오늘 그 단점을 보완해줄 for_each문에 대해 알아볼게요 !!!

그럼 시작하겠습니다!

 

▶️for_each문 

for_each 메타인수는 Terraform의 resource 블록 내에서 반복문을 사용할 수 있게 해주는 기능입니다!

반복문 ! 저번에 count 에 대해서 알아봤었죠 , 그럼 count와 for_each는 어떤 차이가 있으며 어떻게 사용하는게 좋을까요?

먼저 for_each문을 사용하면 어떤 점이 좋은지부터 알아보도록 하겠습니다.

 

✅ 다양한 리소스를 쉽게 생성하고 관리할 수 있습니다. 반복문을 사용하여 여러 리소스를 일괄적으로 관리할 수 있으며, 맵의 키를 기준으로 고유한 식별자를 생성할 수 있습니다.

✅리소스의 추가, 제거, 변경이 간편합니다. 맵의 키를 추가하거나 제거하면 Terraform은 자동으로 해당 리소스를 생성하거나 제거합니다. 또한, 맵의 값이 변경되면 리소스의 속성 값도 자동으로 갱신됩니다.

✅코드의 재사용성과 유지보수성이 향상됩니다. 반복문을 사용하면 중복 코드를 줄이고, 유사한 리소스 그룹을 쉽게 생성하고 관리할 수 있습니다.

 

좋은 점이 있는만큼 단점도 있겠죠, 단점이라기 보다는 for_each 문을 사용할 때 

고려되어야 할 부분에 대해서도 알아보도록 합시다 ! 

 

☑️**for_each**는 Terraform 0.12 버전 이후에 도입된 기능이므로 이전 버전의 Terraform에서는 사용할 수 없습니다.

☑️**for_each**를 사용하면 모든 리소스 식별자를 수동으로 관리해야 합니다. 예를 들어, 특정 리소스를 참조하려면 **aws_instance.ec2["instance1"]**과 같은 형식으로 식별자를 지정해야 합니다.

☑️일부 리소스 유형에서는 **for_each**를 사용할 수 없는 경우가 있습니다. 모든 리소스 유형이 **for_each**를 지원하지는 않으며, 리소스 고유 식별자를 요구하는 경우 단일 인스턴스로만 리소스를 생성해야 합니다.

 

이러한 장단점을 고려하여 본인의 요구사항에 적합한 코드구조를 만드시면 좋을 것 같습니다. !

 

그럼 예시를 한번 알아볼까요?

 

먼저 for_each 문을 쓸때는 이렇게 정의하며 for_each는 set과 map 변수 타입을 지원합니다 !! 

 

 

set은 보통 리스트 형태의 특징을 가지며, 리스트 안은 고유한 값만 존재해야하며 중복 값을 가질 수 없습니다.

>예를 들어 [0,0,1,2] 는 0이 중복되기 때문에 안되고, [0,1,2,3] 처럼 고유한 값만 나열해야 합니다. 

 

map의 경우에는 더 자세히 설명드리도록 할게요 !! 고고 

 

💡 map은 terraform 에서 사용되는 변수 타입중 하나라고 생각하시면 쉽습니다.

 

예를들어 , variable을 정의 할 때, type = string 또는 number 이렇게 타입을 적죠!?

이때 이 타입에 map 타입을 사용하여 변수를 선언할 수 있습니다.

 



변수는 each.key , each.value 로 정의하게 되는데 이때 key에는 pub-1,pri-1 등등 네임이
value에는 각각의 cidr 값으로 분류된다고 생각하시면 좋습니다.value는 어떤 데이터 유형이든 가능합니다.
하지만 key는 고유해야 하므로 동일한 key를 가진 여러 개의 항목을 가질 수 없습니다.

 

 

 

이렇게 for_each는 map 변수타입과 함께 쓰며 동일 리소스를 각각 구성을 할 수 있도록 도와주는 meta Argument입니다!

 

 

for_each 반복문은

리스트 타입인 저번에 알아본 count 보다는 안정성이 있고,

지워질 리소스를 특정할 수 있다는 장점이 있습니다 !

 

count문으로 만들 때보다 핸들링이 더 쉬우니 더 효율적으로 리소스 관리를 할 수 있겠죠 ! 

오늘도 테라폼 메타인수에 대해 알아보는 시간을 가졌습니다! 

도움이 되셨길 바라며 다음시간에도 유익한 지식을 

공유할 수 있도록 노력할게요 !!

 

구럼 이상 BTC_콩순이들이었습니다 ! 

베빠 - ! 

 

'INFRA > Automation' 카테고리의 다른 글

MaaS (Metal as a Service)  (1) 2024.09.09
Terraform Output과 Local  (1) 2024.02.02
[Terraform] 모듈과 모듈화  (0) 2023.06.22
[Terraform] Meta-Argument 1 . Count문  (0) 2023.06.13
Terraform Remote State (S3편)  (0) 2023.05.26

댓글