ABOUT ME

누구나 알기 쉽게 클라우드 설명해주는 남자

Today
Yesterday
Total
  • Terraform Local

    IaC/Terraform 기초 2023. 9. 20. 01:21

     

     

    이번엔 terraform local에 대해서 알아보겠습니다.

    테라폼에서는 locals라는 블록 안에 local value들을 만들어서 활용할 수 있습니다.

    그리고 local 안에서 프로그래밍 언어처럼 반복문이나 조건문을 통해 로직을 구현하는 것도 가능합니다.

     

    한번 간단한 코드와 함께 살펴보겠습니다.

     

    locals {
      s3_bucket_name = "cloudman-sample-bucket-01"
    }
    
    resource "aws_s3_bucket" "cloudman_s3_sample_bucket" {
      bucket = local.s3_bucket_name
      bucket_prefix = "logs/"
      tags = {
        log = "yes"
        expired = "yes"
      }
    }

     

    예전에는 s3 bucket 이름을 var.cloudman_bucket_name로 했는데요.

    그러면 local과 variable은 어떤 차이가 있을까요?

     

    variable에서도 설명드렸지만 variable은 입력받아서 값을 전달하기 때문에

    테라폼을 실행하는 시점에 입력값에 따라 달라질 수 있는 가능성이 있지만,

    local의 경우는 반복적으로 같은 값이 들어가야 하는 경우

    값을 local로 설정하여 전달하면 반복된 리소스 생성에 같은 값으로

    테라폼이 실행되는 특징이 있습니다.

     

    즉, varaible은 입력값을 받아서 테라폼을 실행할 때 상황에 따라 바뀌는 값,

    local을 module을 호출하여 반복적인 작업을 할 때 고정되는 값이나,

    logic이 필요한 값이라고 생각하시면 됩니다.

     

    그러면 local에서 간단한 반복문이나 조건문을 어떻게 만들 수 있는지에 대해서 살펴봅시다.

     

    locals {
      s3_bucket_name = "cloudman-sample-bucket-01"
      sample_tuple   = [1,2,3,4]
      result_of_loop = [for num in local.sample_tuple: num]
    }

     

    sample_tuple을 1부터 4까지 숫자로 설정하고

    result_of_loop에서 local.sample_tuple의 for문을 돌리면

    다음과 같이 sample_tuple과 동일한 값을 가진 결과값을 가지는 것을 알 수 있습니다.

     

    terraform console result

     

    기본적으로 for 문은 in 뒤에 오는 tuple이나 list의 element들을 하나씩 불러옵니다.

    하지만 다음과 같이 index의 값도 따로 설정하여 index와 element를 분리하여 따로 처리하는 것도 가능합니다.

     

    sample_tuple    = [1,2,3,4]
    result_of_loop  = [for index, element in local.sample_tuple: element]
    result_of_index = [for index, element in local.sample_tuple: index]

     

    이렇게 코드를 작성했을 때, 다음과 같이

    result_of_loop는 sample_tuple의 element인 1,2,3,4의 결과값이 나오고,

    result_of_index는 sample_tuple의 index인 0,1,2,3의 결과값이 나온다.

     

    terraform console result

     

    간단한 반복문이지만, 이렇게 반복문을 활용하면

    반복적으로 생성되는 리소스의 이름을 다르게 하거나

    다른 옵션을 주는 것이 가능합니다.

     

    이번엔 간단한 조건문을 살펴보겠습니다.

     

    sample_tuple    = [1,2,3,4]
    result_of_condition_1 = [for index, element in local.sample_tuple: element if index%2 == 0]
    result_of_condition_2 = [for index, element in local.sample_tuple: index%2 == 0 ? element:null]

     

    result_of_condition_1의 결과값은 어떻게 나올까요?

    result_of_condition_1의 조건문을 살펴보면 index가 짝수인 element를 결과값으로 찍도록 조건이 되어있기 때문에

    0번째, 2번째 element인 1, 3이 찍힐 것으로 예상해볼 수 있습니다.

     

    그러면 result_of_condition_2의 결과값은 어떨까요?

    result_of_condition_2에서는 삼항연산자를 활용한 조건문이 작성되었는데요,

    result_of_condition_1과 같은 조건이지만 index가 짝수가 아니라면 null값을 넣도록 되었기 때문에

    1, null, 3, null이 찍히는 것을 예상해 볼 수 있습니다.

    그러면 예상대로 찍혔는지 한번 볼까요?

     

    result of condition

     

    그러면 result_of_condition_2의 결과값이 result_of_condition_1과 동일하게 나오도록 하려면 어떻게 하면 될까요?

     

    한번 더 result_of_condition2에 loop를 만들고 if로 null이 아닌 조건을 넣거나,

    만약 string이라면 compact라는 함수를 사용하면 tuple이나 list에 null을 제거한 결과값을 가져올 수 있습니다.

     

    이번엔 terraform local과 간단한 테라폼 로직에 대해서 알아보았는데요.

    좀 더 테라폼에서 제공되는 함수들에 대해서 알고 싶은 분들은 아래의 링크를 통해

    테라폼 공식문서에서 참고하시기 바랍니다.

    https://developer.hashicorp.com/terraform/language/functions

     

    이렇게 local에 대한 설명을 마치겠습니다.

    'IaC > Terraform 기초' 카테고리의 다른 글

    Terraform Variable  (0) 2023.09.19
    Terraform State Lock  (0) 2023.09.15
    Terraform Backend  (0) 2023.09.12
    Terraform Provider  (0) 2023.09.12
    Terraform Apply  (0) 2023.09.05
Designed by Tistory.