ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [T102 2주차] (1) 테라폼의 기본 문법(리소스, 변수)
    테라폼(Terraform) 스터디 2023. 7. 15. 21:06
    cloudNet@ 팀의 가시다 님이 진행하는 테라폼 102 스터디 2주차 정리입니다.

    1.  외부파일(ex txt, AWS 인수 등등) 에서 데이터(데이터 리소스)를 가지고 오는 법

     

    <데이터 리소스 참고 형식>

    #####################################

    1
    2
    3
    4
    5
    6
    7
    # Terraform Code
    data "<리소스 유형>" "<이름>" {
      <인수> = <>
    }
     
    # 데이터 소스 참조
    data.<리소스 유형>.<이름>.<속성>
    cs

    #####################################

    1. 디렉토리생성(코드생략)
       
      mkdir 3.5 && cd 3.5
      cs
    2. 참조 할 txt 파일 생성
       
      echo "t101 study - 2week" > abc.txt
      cs
      abc.txt&nbsp;파일&nbsp;생성
    3. main.tf 파일 생성& 참조 경로 파일 코드 작성(Visual Studio Code에서 GUI로 실행)
      main.tf 생성
    4. 테라폼 초기화 & 실행계획 & 적용
       
      terraform init && terraform plan && terraform apply -auto-approve
      cs

    테라폼 콘솔에서 리소스 호출 확인

     
    terraform console #테라폼 콘솔 실행
    cs

     

     
    > data.local_file.abc

    cs

    data.local_file.abc 명령어 실행 및 결과

       

     
    > data.local_file.abc.filename
     

    data.local_file.abc.filename 명령어 실행 및 결과

     
    > data.local_file.abc.content
    cs

    data.local_file.abc.content 명령어 실행 및 결과

     
    >data.local_file.abc.id
    cs

    data.local_file.abc.id&nbsp;data.local_file.abc.content 명령어 실행 및 결과

     
    > exit
    cs
    AWS 데이터 소스로 가져오기 위한 조건인 인수는 Argument로 표현되어 있습니다.↓
    https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones

     

     

     

     

     

     

     

    2. 변수

    <변수 선언 기본 형식>

    #####################################

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # variable 블록 선언의 예
    variable "<이름>" {
     <인수> = <>
    }
     
    # ex)
    variable "image_id" {
     type = string
    }
    cs

    #####################################

    1. 전달할 값이 number 인지 확인하는 입력 변수의 예
    2. 전달할 값이 list 인지 확인하는 입력 변수의 예
    3. 조건 결합 사용 가능. 다음은 리스트의 모든 항목이 number 인 list 의 예
    4. 다음은 모든 값이 stringmap 의 예
    5. 다음은 object 또는 tuple 제약 조건을 사용하여 보다 복잡한 구조적 유형(structural type) 작성 가능< ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 변수 선언 예시↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓>
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      variable "string" {
        type        = string
        description = "var String"
        default     = "myString"
      }
       
      variable "number" {
        type    = number
        default = 123
      }
       
      variable "boolean" {
        default = true
      }
       
      variable "list" {
        default = [
          "google",
          "vmware",
          "amazon",
          "microsoft"
        ]
      }
       
      output "list_index_0" {
        value = var.list.0
      }
       
      output "list_all" {
        value = [
          for name in var.list : upper(name)
        ]
      }
       
      variable "map" { # Sorting
        default = {
          aws   = "amazon",
          azure = "microsoft",
          gcp   = "google"
        }
      }
       
      variable "set" { # Sorting
        type = set(string)
        default = [
          "google",
          "vmware",
          "amazon",
          "microsoft"
        ]
      }
       
      variable "object" {
        type = object({ name = string, age = number })
        default = {
          name = "abc"
          age  = 12
        }
      }
       
      variable "tuple" {
        type    = tuple([string, number, bool])
        default = ["abc"123true]
      }
       
      variable "ingress_rules" { # optional ( >= terraform 1.3.0)
        type = list(object({
          port        = number,
          description = optional(string),
          protocol    = optional(string, "tcp"),
        }))
        default = [
          { port = 80, description = "web" },
        { port = 53, protocol = "udp" }]
      }
      cs
Designed by Tistory.