ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Terraform] Terraform 구성 요소 (Block)
    terraform 2024. 11. 29. 11:25

    Terraform 구성요소 (Block)

     

    Terraform의 구성요소에는 provider, resource, variable, locals, data, output, module,  … 이 있다.

     

    provider

    • Terraform으로 생성할 인프라 공급자 정의 ex) Azure, AWS, Google 
    • 일반적으로 provider.tf 파일에 정의

     

    [예시]

    # Configure the Azure provider
    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 3.0.2"
        }
      }
    
      required_version = ">= 1.1.0"
    }
    
    provider "azurerm" {
      features {}
    }

     

    resource

    • Terraform으로 생성할 인프라 리소스 정의
    • 일반적으로 main.tf 파일에 정의

     

    [예시]

    # Create virtual network
    resource "azurerm_virtual_network" "my_terraform_network" {
      name                = "myVnet"
      address_space       = ["10.0.0.0/16"]
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    }

     

    variable

    • 모듈에서 사용할 변수를 정의할 때 사용
    • 일반적으로 variables.tf 파일에 정의

    [예시]

    #variables.tf 파일
    variable "resource_group_location" {
      type        = string
      default     = "koreacentral"
      description = "Location of the resource group."
    }
    #main.tf 파일
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = "rg-krc"
    }

     

    이렇게 먼저 variables.tf 파일에 변수를 정의해놓고, ex. resource_group_location

    main.tf 파일 등에서 변수를 사용하면 된다. ex. var.resource_group_location

     

    locals

    • 현재 실행 파일에서 사용되는 지역 변수를 정의할 때 사용

    [예시]

    provider "azurerm" {
      features {}
    }
    
    locals {
      resource_group_name = "my-resource-group"
      location            = "East US"
      vm_name             = "myVM"
      vm_size             = "Standard_DS1_v2"
    }
    
    resource "azurerm_resource_group" "example" {
      name     = local.resource_group_name
      location = local.location
    }
    
    resource "azurerm_linux_virtual_machine" "example" {
      name                = local.vm_name
      resource_group_name = azurerm_resource_group.example.name
      location            = local.location
      size                = local.vm_size
      admin_username      = "azureuser"
      admin_password      = "P@ssw0rd1234!"  # 비밀번호는 안전하게 관리해야 함.
      
      network_interface_ids = [azurerm_network_interface.example.id]
    
      os_disk {
        caching       = "ReadWrite"
        create_option = "FromImage"
      }
    
      source_image_reference {
        publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "18.04-LTS"
        version   = "latest"
      }
    }

     

    이렇게 locals 변수를 먼저 정의하고,

    밑에서 local.resource_group_name 및 local.location와 같이 사용한다.

     

    data

    • 이미 생성된 리소스의 정보를 가져올 때 사용
    • Terraform이 관리하지 않는 클라우드 공급자(ex. Azure) 리소스에 대한 정보를 가져와 다른 리소스의 구성에 활용

    [예시]

    data "azurerm_virtual_network" "example" {
      name                = "my-vnet"
      resource_group_name = "my-resource-group"
    }
    
    output "vnet_address_space" {
      value = data.azurerm_virtual_network.example.address_space
    }

     

    이 예제에서 data "azurerm_virtual_network" "example" 블록은 my-resource-group 리소스 그룹 내의 my-vnet 가상 네트워크의 정보를 가져오고, output 블록은 해당 VNet의 주소 공간을 출력한다.

     

    output

    • Terraform 수행 결과를 출력하는데 사용
    • output으로 정의한 값은, 외부로 노출 시켜주어 다른 모듈에서도 참조할 수 있도록 한다.

    [예시]

    terraform output <output_name>
    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "public_ip_address" {
      value = azurerm_linux_virtual_machine.my_terraform_vm.public_ip_address
    }

     

    module

    • Terraform 구성 파일 내 재사용 가능한 블록으로, 특정 인프라 리소스를 정의하고 관리하는데 사용 (템플릿?)
    • 기존에 작성된 모듈은 다른 모듈에서 참조하여 쓸 수 있다.
      • 모듈에서 필요한 값은 variable를 통해 선언하여 설정
      • 모듈에서 생성된 값 중 외부 모듈에서 참조하고 싶은 값은 output으로 선언하여 설정

    ↓ 자세한 내용 ↓

    https://bbiyak-cloud.tistory.com/82

    'terraform' 카테고리의 다른 글

    [Terraform] 테라폼의 모듈화  (0) 2024.11.30
    [Terraform] 개요 및 작동 흐름  (0) 2024.11.28
    [Terraform] Azure 환경 기반 Terraform 설치  (0) 2024.11.21
Designed by Tistory.