티스토리 뷰
지난 포스트를 통해 macOS 로컬에 Terraform 환경을 세팅했다. 이번 포스트부터는 테라폼을 본격적으로 훑어보고, 실제 코드를 통해 IaC 환경을 구축해 본다.
본 포스팅은 테라폼 공식 홈페이지 ( https://www.terraform.io/ ) 에서 참조한다.
HashiCorp 는 인프라 전문 기업이며, Terraform 외에도 정말 다양한 인프라 관련 소프트웨어를 제공하고 있다.
테라폼을 이루는 키워드 세 가지
테라폼을 통해 인프라를 관리할 때 가장 핵심적으로 말하는 키워드가 Write, Plan, Apply 이다.
- Write : 인프라 코드를 작성하고,
- Plan : 인프라 코드를 검증하고,
- Apply : 인프라 코드를 실제 인프라에 반영하게 된다.
Write
테라폼은 HCL (HashiCorp Configuration Language) 를 기반으로 코드를 작성한다. 해당 언어는 YAML 코드와 상당히 비슷한 생김새이며, 굉장히 간결하게 작성되어 복잡한 인프라를 간단하게 정의할 수 있다.
다음은 Terraform 공식 문서에서 발췌한 예시 코드이다.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 1.0.4"
}
}
}
variable "aws_region" {}
variable "base_cidr_block" {
description = "A /16 CIDR range definition, such as 10.1.0.0/16, that the VPC will use"
default = "10.1.0.0/16"
}
variable "availability_zones" {
description = "A list of availability zones in which to create subnets"
type = list(string)
}
provider "aws" {
region = var.aws_region
}
resource "aws_vpc" "main" {
# Referencing the base_cidr_block variable allows the network address
# to be changed without modifying the configuration.
cidr_block = var.base_cidr_block
}
resource "aws_subnet" "az" {
# Create one subnet for each given availability zone.
count = length(var.availability_zones)
# For each subnet, use one of the specified availability zones.
availability_zone = var.availability_zones[count.index]
# By referencing the aws_vpc.main object, Terraform knows that the subnet
# must be created only after the VPC is created.
vpc_id = aws_vpc.main.id
# Built-in functions and operators can be used for simple transformations of
# values, such as computing a subnet address. Here we create a /20 prefix for
# each subnet, using consecutive addresses for each availability zone,
# such as 10.1.16.0/20 .
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 4, count.index+1)
}
Plan
Terraform Plan 을 통해 해당 인프라 코드가 어떠한 변화를 가져올지 확인할 수 있다.
이전 인프라 대비 변경된 인프라 코드를 비교하여, 어떠한 리소스가 추가될 것인지, 어떠한 리소스가 수정될 것인지를 콘솔에 명시적으로 표현해 줌으로써 편리하게 인프라를 관리할 수 있다.
Apply
Plan 을 통해 변경된 사항을 확인한 후, Apply 를 통해 최종적으로 변경된 인프라 구조를 실제 환경에 반영할 수 있다.
Provider Agnostic
Terraform 은 AWS 에 의존적이지 않고, 여러 플랫폼 (GCP, Azure 등) 을 지원하는 소프트웨어이다.
- Terraform AWS 소스를 가져다 쓰게 되면 AWS 인프라를 관리할 수 있게 되고,
- Terraform GCP 소스를 가져다 쓰게 되면 GCP 인프라를 관리할 수 있게 되고,
- Terraform Azure 소스를 가져다 쓰게 되면 Azure 인프라를 관리할 수 있게 된다.
Terraform Registry
Terraform Registry는 Provider 와 Module 을 제공하는 서드파티 공간이다.
- Provider 는 GCP, AWS, Azure 와 같은 Service Provider 를 의미하며, 특정 플랫폼의 프로바이더를 사용하면 해당 플랫폼에 맞는 인프라를 관리할 수 있다.
- Module 은 인프라 리소스의 그룹 템플릿이라 정의할 수 있다. 흔히 프로그램을 만들 때 공통 모듈을 분리하여 재사용성을 최대화할 수 있듯, Module 을 사용하면 이미 정의되어 있는 리소스 템플릿을 통해 반복 작업을 줄이고 효율적인 인프라 정의를 할 수 있다.
커뮤니티에서 다른 개발자들이 만든 모듈이나 플랫폼에서 공식적으로 제공하는 리소스를 활용할 때 Terraform Registry 를 참고하면 좋다.
Browser Providers 버튼을 클릭하면 현재 Terraform 에서 제공되는 수많은 리소스를 확인할 수 있으며, 상세 화면에서 해당 리소스를 사용하는 방법 등 다양한 문서를 확인할 수 있다.
'인프라 > Terraform' 카테고리의 다른 글
Terraform 다루어보기 (AWS Provider) (0) | 2022.08.19 |
---|---|
Intellij HCL 설정하기 (0) | 2022.08.16 |
Terraform 다루어보기 (local_file) (0) | 2022.08.15 |
Terraform 설치 및 기본 설정 (0) | 2022.08.11 |
Terraform 이 무엇인가? (0) | 2022.08.10 |
- Total
- Today
- Yesterday
- entrypoint
- Operator
- 스타트업
- 도커
- dockerfile
- 디자인
- docker
- main
- ecr
- 머티리얼
- EC2
- 메터리얼
- Android
- 테라폼
- 자료형
- 자격증명
- DESIGN
- Material
- AWS
- Container
- 컨테이너
- 안드로이드
- cmd
- Java
- uiux
- 자바
- Terraform
- HCL
- env
- dockerhub
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |