본문 바로가기
AWS

[AWS] Terraform 설치 및 사용

by spareone 2026. 3. 6.

Terraform

 

Terraform은 Infrastruction as Code(IaC) 도구입니다.

서버, 네크워크, 스토리지, DNS 등의 인프라를 코드로 나타내며, 사람이 직접 콘솔에서 생성하는 대신 코드를 실행하여 한 번에 생성할 수 있게 하는 도구입니다.

 

AWS 뿐만 아니라 다른 서비스에서도 Terraform을 사용할 수 있습니다.

 

Terraform은 보통 아래 이유들로 인해 사용됩니다.

  • 같은 환경을 반복해서 만들기 쉽습니다.
  • 설정이 코드로 남아서 추적과 리뷰가 쉽습니다.
  • 변경 전에 plan으로 미리 무엇이 바뀌는지 볼 수 있습니다.

 


AWS CLI랑 차이점은?

 

 

1. 성격 차이 

 

AWS CLI는 명령을 주어 바로바로 작업을 가능하게 합니다.

자동화 스크립트를 생성한다고 해도, 결국 일회성 명령을 모아둔 것입니다.

 

Terraform은 인프라 전체를 코드로 정의합니다.

서비스의 원하는 상태를 코드로 적어놓습니다. 다른 사람이 이 코드를 보아도 현재 인프라가 어떻게 구성되어야 하는지 알 수 있습니다.

 

 

2. 변경 전 미리 확인 가능

 

terraform plan을 통해 어떤 서비스가 생성 / 수정 / 삭제되는지 미리 확인할 수 있습니다.

 

 

3. 반복 생성 용이

 

개발/스테이징/운영 환경을 비슷하게 여러 개 만들어야 할 때 CLI는 명령을 많이 복붙해야 합니다.
Terraform은 같은 코드에 변수만 바꿔서 재사용하기 쉽습니다.

 

 

4. 상태(state)를 기준으로 관리

 

Terraform은 state를 저장해서, 코드와 실제 리소스를 연결해 관리합니다.

 

 

5. 팀 작업에 더 적합

 

Terraform 코드는 Git에 넣고 리뷰할 수 있습니다.

 

 

AWS CLI는 인터프리트, Terraform은 컴파일 과정을 거쳐 서비스를 관리한다고 생각하면 되겠습니다.

단순 작업은 aws cli를 처리하는 것이 더 빠르며, 대규모 인프라를 구성할 때는 Terraform이 편리합니다.

 


Terraform 설치

 

 

Linux

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt-get install terraform

 

 

macOS

 

brew를 이용하여 설치할 수 있습니다.

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

(xcode 관련 오류 발생 시, xcode 업데이트 후 진행해보기 바랍니다.)

 

 

Windows

 

https://developer.hashicorp.com/terraform/install 에서 설치 후 세팅

 

 

 

설치 확인법

terraform version

 

버전이 정상적으로 출력되면 설치된 것입니다.

 

 

(추가사항)

vscode에서 Terraform 관련 extension을 설치할 수 있습니다.

 


Terraform 사용 흐름

 

Terraform은 다음 흐름에 따라 사용합니다.

 

 

1. main.tf 작성

2. (최초 1회) AWS 자격 증명 연결

3. terraform init

4. terraform plan

5. terraform apply

 

 


main.tf 작성

 

이제 본격적으로 Terraform을 사용해 봅니다.

 

Terraform을 사용할 디렉터리 생성 후, main.tf 파일을 생성합니다.

 

terraform {
    required_providers {
      aws = {
        source = "hashicorp/aws"
        version = "~> 5.29.0"
      }
    }
    required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ap-northeast-2"
}

# 최신 Amazon Linux 2023 AMI를 SSM Parameter Store에서 조회
data "aws_ssm_parameter" "al2023_ami" {
  name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"
}

resource "aws_instance" "test" {
  ami           = data.aws_ssm_parameter.al2023_ami.value
  instance_type = "t2.micro"

  tags = {
    Name = "testInstance"
  }
}

# 생성된 인스턴스 정보 출력 

output "instance_id" {
  value = aws_instance.example.id
}

output "public_ip" {
  value = aws_instance.example.public_ip
}

 

이 예제는 AWS provider를 선언하고, 서울 리전 ap-northeast-2를 사용하며, SSM public parameter에서 최신 Amazon Linux 2023 x86_64 AMI를 읽어와 t2.micro 인스턴스를 만듭니다. Terraform의 resource 블록은 실제 생성할 인프라를 정의하는 기본 단위이고, provider 문서는 각 리소스별 인자를 따로 안내합니다.

 


(최초 1회) AWS 자격 증명 연결

 

자격 증명을 위해 AWS CLI가 설치되어 있어야 합니다.

이것이 싫다면, 환경변수에 access key, secret access key를 삽입하거나 main.tf에 박아버리는 방법도 존재하긴 합니다. (보안상 비권장)

 

여기선 AWS CLI를 통해 자격 증명을 받았습니다.

 

aws configure

 

AWS CLI 설치 등의 정보는 아래 URL을 참고하기 바랍니다.

https://blog.spareone.io/142

 

[AWS] AWS CLI 설치 및 사용

AWS CLI는 AWS를 명령어로 관리하는 도구이며, 여러 서비스들을 스크립트를 통해 자동화할 수 있습니다. 일반적으로는 콘솔을 통해 상호작용하며 서비스를 생성하고 삭제합니다. 그러니 aws cli를

blog.spareone.io

 


Terraform 실행

 

main.tf가 존재하는 디렉터리로 이동 후 아래 명령어를 입력합니다.

 

terraform init

 

이 명령어를 통해 현재 디렉터리를 Terraform 작업 디렉토리로 초기화합니다.

 

  • 필요한 provider 플러그인 설치
  • 설정된 backend 초기화
  • 참조 module 다운로드
  • .terraform 디렉터리와 .terraform.lock.hcl 같은 초기화 산출물 생성

 

위의 역할을 주로 수행하며, main.tf 수정할 때마다 실행할 필요는 없습니다.

 

아래의 경우에만 실행하면 됩니다.

 

  • 새로 main.tf를 작성한 직후
  • 다른 사람이 만든 Terraform 프로젝트를 clone한 직후
  • provider 버전을 바꿨을 때
  • module 구성을 바꿨을 때
  • backend 설정을 바꿨을 때

 

 

terraform plan


# (plan 저장 시)
terraform plan -out=tfplan

 

terraform plan은 현재 코드와 실제 인프라 상태를 비교해서, 무엇이 바뀔지 미리 보여주는 단계입니다.

 

Terraform은 대체로 아래를 비교합니다.

  • 내가 쓴 코드
  • Terraform state
  • 실제 클라우드의 현재 상태

 

이 부분을 꼼꼼히 확인할 경우 실수를 방지할 수 있습니다.

 

-out 옵션을 주면 구성된 계획을 저장할 수 있으며, 언제든지 apply할 수 있습니다.

 

terraform apply

# 사용자 입력 없이 바로 실행
terraform apply -auto-approve

 

terraform apply는 plan 결과를 실제로 실행해서 인프라를 생성·수정·삭제하는 단계입니다.

 

보통 실행하면 Terraform이 내부적으로 새 plan을 만들고, 사용자에게 승인 여부를 묻습니다. 사용자가 yes를 입력할 경우 작업이 진행됩니다.

-auto-approve 옵션 추가 시 yes 입력 단계를 건너뛰고 바로 작업이 진행됩니다.

 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

instance_id = "[생성된 인스턴스 ID]"
public_ip = "[생성된 인스턴스 공인IP]"

 

최종적으로 위와 같이 작업이 이루어지게 됩니다.

 


리소스 삭제

 

 

아래 명령어를 통해 main.tf에서 생성한 리소스를 일괄 제거할 수 있습니다.

 

terraform destroy

 

 

특정 리소스만 삭제를 해야 하는 경우, main.tf 코드에서 삭제할 리소스만 주석 처리합니다.

terraform {
    required_providers {
      aws = {
        source = "hashicorp/aws"
        version = "~> 5.29.0"
      }
    }
    required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ap-northeast-2"
}

# 최신 Amazon Linux 2023 AMI를 SSM Parameter Store에서 조회
data "aws_ssm_parameter" "al2023_ami" {
  name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"
}

# resource "aws_instance" "test" {
#   ami           = data.aws_ssm_parameter.al2023_ami.value
#   instance_type = "t2.micro"

#   tags = {
#     Name = "testInstance"
#   }
# }

 

주석 처리 후 plan->apply 과정을 거치면 주석 처리된 부분의 리소스가 제거됩니다.

'AWS' 카테고리의 다른 글

[AWS] CloudShell 사용  (0) 2026.03.06
[AWS] AWS CLI 설치 및 사용  (0) 2026.03.06

댓글