Today
-
Yesterday
-
Total
-


  • [TF]Terraform Count, Foreach
    DevOps/Terraform 2021. 12. 19. 17:22

    IAM User 생성

    provider "aws" {
      region = "ap-northeast-2"
    }
    
    resource "aws_iam_user" "user_1" {
      name = "user-1"
    }
    
    resource "aws_iam_user" "user_2" {
      name = "user-2"
    }
    
    resource "aws_iam_user" "user_3" {
      name = "user-3"
    }
    
    output "user_arns" {
      value = [
        aws_iam_user.user_1.arn,
        aws_iam_user.user_2.arn,
        aws_iam_user.user_3.arn,
      ]
    }

    Output 결과

    소 수의 사용자의 경우 위와 같은 코드를 사용할 수 있지만 다 수의 사용자를 관리하기 쉽게 반복문을 사용하여 반복적인 작업을 해결 할 수 있다.

    Terraform에서 반복문은 count, foreach를 사용할 수 있다.


    count

    resource, module, data에도 적용이 가능하다.

    meta-argument는 resource Block Body의 최상단

    {count.index}를 사용하여 인덱스 정보를 가져올 수 있다.

    resource "aws_iam_user" "count" {
      count = 10 #meta argument
    
      name = "count-user-${count.index}"
    }
    
    output "count_user_arns" {
      value = aws_iam_user.count.*.arn
    }

    output 출력값

    0~9까지의 IAM user가 생성됐다.

     

    count의 몇가지의 문제점을 해결하기 위해 for ~each가 있다.


    for ~ each

    set / map을 지원

    set은 유니크한 객체를 취급 (중복불가능)

    map은 Key Value로 값을 받는다.

     

    set을 이용한 생성

    resource "aws_iam_user" "for_each_set" {
      for_each = toset(
        "for-each-set-user-1"
        "for-each-set-user-2"
        "for-each-set-user-3"
      )
    
      name = each.key
    }
    
    output "for_each_set_user_arns" {
      value = values(aws_iam_user.for_each_set).*.arn
    }

    set은 List 형식으로 받기때문에 형변환이 필요하여 toset을 사용한다.

    특별한 값이 생기는데 each,key, each.value가 생성된다.

     

    map을 이용한 생성

    resource "aws_iam_user" "for_each_map" {
      for_each = {
        alice = {
          level = "low"
          manager = "posquit0"
        }
        bob = {
          level = "mid"
          manager = "posquit0"
        }
        jhon = {
          level = "high"
          manager = "steve"
        }
      }
    
      name = each.key
    	
      tags = each.value
    }

    ["alice"] = user.object로 저장되기 때문에 Key 값은 무조건 String이고 유일해야한다.

    Value 값은 제한이 없어 해당 객체의 대한 데이터를 넣으면 관리가 용이하다.

     

    정상적으로 생성 되면 IAM User에 alice의 정보를 보게되면 Tag Key, Tag Value 값이 생성된다.

    count의 경우 중간에 있는 IAM User가 삭제가 될 경우 쉬프트되어 결과적으로 삭제되고 재생성되지만

    foreach를 사용하게 되면 중간에 있는 유저가 삭제 되더라도 Key, Value를 사용하기 때문에 해당 IAM User만 삭제가 된다.


    Terraform Workspace에서 관리하는 Resource List 조회

    terraform state list

     

    'DevOps > Terraform' 카테고리의 다른 글

    [TF]Terraform 반복문  (0) 2021.12.22
    [TF]Terraform 조건문  (0) 2021.12.21
    [TF]Terraform Variable & Local & Output  (0) 2021.12.19
    [TF] AWS Resource 생성  (0) 2021.12.19
    [TF]HCL 기초문법  (0) 2021.12.19

    댓글

www.devc4sh.com