본문 바로가기
IT/읽어보기

Terraform이란?

by ccclog 2024. 6. 24.
반응형

Terraform은 HashiCorp에서 개발한 오픈 소스 인프라 자동화 도구로, 인프라를 코드로 관리(IaC: Infrastructure as Code)하는 데 사용됩니다. 이 도구는 클라우드 서비스, 데이터베이스, 네트워크, 스토리지 등을 선언적 구성 파일로 정의하고 프로비저닝할 수 있게 해줍니다. Terraform을 사용하면 인프라의 설정과 관리를 자동화하고 효율적으로 처리할 수 있습니다.

Terraform의 주요 특징

  1. 선언적 구성 언어(HCL):
    • Terraform은 HashiCorp Configuration Language(HCL)라는 선언적 언어를 사용합니다. HCL은 사람이 읽기 쉽고 작성하기 쉬운 형식으로, 인프라 리소스를 정의하는 데 최적화되어 있습니다.
  2. 프로바이더(Providers):
    • Terraform은 다양한 클라우드 서비스 제공업체(AWS, Azure, Google Cloud 등)와 온프레미스 인프라를 지원하는 프로바이더를 통해 인프라를 관리합니다. 프로바이더는 각 플랫폼의 API와 상호작용하여 리소스를 생성, 업데이트, 삭제하는 역할을 합니다.
  3. 상태 파일(State File):
    • Terraform은 인프라의 현재 상태를 .tfstate 파일에 저장합니다. 이 상태 파일은 Terraform이 리소스의 현재 상태를 추적하고, 코드와 실제 인프라 간의 차이를 비교하여 변경 사항을 적용하는 데 사용됩니다. 상태 파일은 로컬에 저장하거나 원격 백엔드(예: AWS S3, Terraform Cloud)로 관리할 수 있습니다.
  4. 모듈화(Modularization):
    • Terraform은 재사용 가능한 모듈을 작성하여 인프라를 구성할 수 있습니다. 모듈은 특정 기능을 수행하는 리소스의 집합으로, 인프라 코드를 더 효율적으로 관리하고 재사용할 수 있게 합니다.
  5. 계획 및 적용(Plan and Apply):
    • terraform plan 명령어는 인프라 변경 사항을 미리 보여주며, 어떤 리소스가 생성, 업데이트, 삭제될지를 예측합니다.
    • terraform apply 명령어는 실제로 변경 사항을 적용하여 인프라를 프로비저닝합니다.
  6. 버전 관리(Versioning):
    • Terraform 코드 파일은 Git 등의 버전 관리 시스템을 통해 관리할 수 있어, 코드의 변경 이력을 추적하고 협업을 원활하게 할 수 있습니다.

Terraform 기본 구성 요소

  1. 프로바이더 설정:
    • 프로바이더는 Terraform이 특정 클라우드 서비스와 상호작용할 수 있도록 설정합니다. 예를 들어, AWS 프로바이더를 설정하는 코드는 다음과 같습니다.
     
    provider "aws" { region = "us-west-2" }
     
  2. 리소스(Resource):
    • 리소스는 실제 인프라 객체를 정의합니다. 예를 들어, AWS에서 EC2 인스턴스를 생성하는 리소스는 다음과 같습니다.
     
    resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "example-instance" } }
     
  3. 변수(Variables):
    • 변수를 사용하면 인프라 코드를 더 유연하게 만들 수 있습니다. 변수는 코드 내에서 값의 변경을 쉽게 할 수 있도록 도와줍니다.
     
    variable "instance_type" { description = "Type of instance to use" default = "t2.micro" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = var.instance_type tags = { Name = "example-instance" } }
  4. 출력값(Outputs):
    • 출력값은 Terraform이 실행된 후에 중요한 정보를 출력하는 데 사용됩니다. 예를 들어, 생성된 EC2 인스턴스의 IP 주소를 출력하는 코드는 다음과 같습니다.
     
    output "instance_ip" { value = aws_instance.example.public_ip }

Terraform의 주요 명령어

  1. terraform init: 현재 디렉토리를 Terraform 작업 공간으로 초기화합니다. 필요한 플러그인(프로바이더 등)을 다운로드합니다.
  2. terraform plan: 인프라 변경 사항을 예측하고, 어떤 리소스가 생성, 업데이트, 삭제될지를 보여줍니다.
  3. terraform apply: 인프라 변경 사항을 실제로 적용하여 리소스를 프로비저닝합니다.
  4. terraform destroy: 인프라를 삭제합니다.

Terraform 사용 예시

아래는 AWS에서 VPC, 서브넷, 그리고 EC2 인스턴스를 생성하는 간단한 예시입니다.

 
provider "aws" { region = "us-west-2" } resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" tags = { Name = "main-vpc" } } resource "aws_subnet" "main" { vpc_id = aws_vpc.main.id cidr_block = "10.0.1.0/24" tags = { Name = "main-subnet" } } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" subnet_id = aws_subnet.main.id tags = { Name = "example-instance" } } output "instance_ip" { value = aws_instance.example.public_ip }

결론

Terraform은 다양한 클라우드 서비스와 온프레미스 인프라를 코드로 관리할 수 있는 강력한 도구입니다. 선언적 구성 언어인 HCL을 사용하여 인프라를 정의하고, 상태 파일을 통해 인프라의 현재 상태를 추적하며, 프로바이더를 통해 다양한 플랫폼을 지원합니다. Terraform을 사용하면 인프라의 설정과 관리를 자동화하고, 효율적으로 처리할 수 있습니다.

반응형