[기본 구성 요소] Modules
2024. 11. 26. 14:44ㆍTerraform/[인프런] 아키텍처와 함께하는 Terraform
1. Modeuls
- 인프라 코드를 구성하고 재사용하기 위한 단위이다.
- 코드의 반복을 줄이고 관리와 유지보수를 쉽게 하기 위해 사용된다.
- 모듈은 하나 이상의 Terraform 구성 파일로 구성된 디렉토리이다.
- Terraform 구성 파일은 기본적으로 루트 모듈이며, 이를 기반으로 하위 모듈을 호출하여 구성 요소를 재사용할 수 있다.
2. Modules 주요 특징
- 코드 재사용성 : 반복적으로 사용되는 리소스를 하나의 모듈로 정의하여 재사용한다.
- 모듈 호출 : 루트 모듈에서 하위 모듈을 호출해 구성 요소를 조립하듯 사용한다.
- 매개변수화 : 변수와 출력 값을 활용해 모듈의 유연성과 확장성 높인다.
3. Modules 예제
- VPC를 생성하는 하위 모듈 만들기 예제
* 하위 모듈 디렉토리 구조
modules/
└── vpc/
├── main.tf
├── variables.tf
└── outputs.tf
* 하위 모듈 구성 파일(modules/vpc/main.tf)
resource "aws_vpc" "main" {
cidr_block = var.cidr_block
tags = {
Name = var.name
}
}
resource "aws_subnet" "subnet" {
vpc_id = aws_vpc.main.id
cidr_block = var.subnet_cidr_block
availability_zone = var.availability_zone
tags = {
Name = "${var.name}-subnet"
}
}
* 하위 모듈 구성 파일(modules/vpc/variables.tf)
variable "cidr_block" {
description = "CIDR block for the VPC"
type = string
}
variable "subnet_cidr_block" {
description = "CIDR block for the subnet"
type = string
}
variable "availability_zone" {
description = "Availability zone for the subnet"
type = string
}
variable "name" {
description = "Name tag for the VPC and subnet"
type = string
}
* 하위 모듈 구성 파일(modules/vpc/outputs.tf)
output "vpc_id" {
value = aws_vpc.main.id
}
output "subnet_id" {
value = aws_subnet.subnet.id
}
- 루트 모듈에서 하위 모듈 호출 예제
* 루트 모듈 디렉토리 구조
.
├── main.tf
├── variables.tf
└── terraform.tfvars
* 루트 모듈 구성 파일(main.tf)
provider "aws" {
region = "ap-northeast-2"
}
module "vpc" {
source = "./modules/vpc" # 로컬 디렉토리에서 모듈 호출
cidr_block = "10.0.0.0/16"
subnet_cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
name = "MyVPC"
}
output "vpc_id" {
value = module.vpc.vpc_id
}
output "subnet_id" {
value = module.vpc.subnet_id
}
* 루트 모듈 구성 파일(terraform.tfvars)
cidr_block = "10.0.0.0/16"
subnet_cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
name = "MyVPC"
'Terraform > [인프런] 아키텍처와 함께하는 Terraform' 카테고리의 다른 글
[기본 구성 요소] 워크스페이스 (0) | 2024.11.26 |
---|---|
[기본 구성 요소] 백엔드(Backends) (0) | 2024.11.26 |
[기본 구성 요소] state 파일 (0) | 2024.11.26 |
[기본 구성 요소] Output (1) | 2024.11.26 |
[기본 구성 요소] Variables (0) | 2024.11.26 |