-
[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으로 선언하여 설정
↓ 자세한 내용 ↓
'terraform' 카테고리의 다른 글
[Terraform] 테라폼의 모듈화 (0) 2024.11.30 [Terraform] 개요 및 작동 흐름 (0) 2024.11.28 [Terraform] Azure 환경 기반 Terraform 설치 (0) 2024.11.21