베하 !!
안녕하세요 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 |
댓글