Terraform AWS Provider 설치 및 기본 사용법

1. Infrastructure as Code

Infrastructure as Code(IaC)는 인프라 환경을 코드로 정의하고 관리하는 것을 의미합니다. IaC를 통해 인프라를 코드로 관리하면 인프라를 일관되고 반복 가능한 방식으로 적용할 수 있어, 인프라 변경과 배포를 자동화할 수 있습니다. IaC의 주요 이점은 다음과 같습니다.

  • 일관성: 코드로 정의된 인프라는 일관되게 배포할 수 있어, 환경 간의 설정 차이를 줄일 수 있음
  • 반복 가능성: 동일한 인프라를 여러 환경에서 쉽게 재현 가능
  • 버전 관리: 인프라 코드를 버전 관리 시스템에 저장하여 변경 내역을 추적할 수 있음
  • 자동화: 인프라 배포와 관리를 자동화하여 작업 효율성을 높일 수 있습니다.

 

2. Terraform

Terraform은 HashiCorp에서 제공하는 IaC 도구로, 사람이 읽을 수 있는 설정 파일을 통해 리소스 및 인프라를 정의하고 관리할 수 있습니다. 주로 .tf 파일을 사용해 인프라를 선언적으로 정의합니다.

2.1. Terraform plugins (Providers)

Terraform 플러그인은 providers라고 불리며, 클라우드 플랫폼(예: AWS, Azure)뿐 아니라 데이터베이스나 모니터링 서비스와의 상호작용도 가능하게 합니다. 이를 통해 다양한 클라우드 플랫폼과 온프레미스 환경에서 정의된 인프라를 관리할 수 있습니다. Terraform plugin은 Terraform Registry에서 찾아볼 수 있습니다.

2.2. Terraform 설치

Terraform을 설치하기 위해서 아래와 같은 명령어들을 실행합니다.

  • 패키지 목록 업데이트 및 필요한 패키지 설치
$ sudo apt-get update && sudo apt-get install -y gnupg software-properties-common

 

  • HashiCorp의 GPG 키 다운로드 및 설치, 지문 확인
$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null

$ gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint

 

  • HashiCorp의 APT 저장소 추가
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list

 

  • 패키지 목록 업데이트 및 Terraform 설치
$ sudo apt-get update && sudo apt-get install -y terraform
$ terraform --version

 

  • Terraform 자동 완성 활성화
$ terraform -install-autocomplete  # 명령어 실행 후 Shell 재시작 시 적용됨

 

3. AWS에 인프라 구축

Terraform을 이용해 AWS에 인프라를 구축하려면 AWS Provider를 설정해야 합니다.

3.1. AWS Provider 설정

Terraform에서는 AWS Provider를 사용하여 AWS 리소스를 관리합니다. 이를 위해 AWS CLI가 필요하며(설치 방법은 AWS CLI 시작하기 참고), 적절한 권한이 설정된 AWS 계정을 사용해야 합니다. 계정을 지정하기 위한 다양한 방식이 있지만 여기서는 환경변수를 통해 Terraform에서 사용할 IAM을 지정하였습니다.

$ export AWS_ACCESS_KEY_ID=
$ export AWS_SECRET_ACCESS_KEY=

 

3.2. Terraform Configuration 작성

Terraform을 사용해 AWS에 인프라를 구축하려면, AWS 인스턴스를 정의하는 기본 설정 파일(main.tf)을 작성해야 합니다.

  • 작업 공간 생성
$ mkdir test-terraform-aws
$ cd test-terraform-aws
  • Configuration 작성 (main.tf)
# Terraform 설정
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

# AWS Provider 설정
provider "aws" {
  region  = "ap-northeast-2"
}

# 인프라의 구성요소 정의
resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

 

3.3. Terraform Configuration 빌드 및 적용

  • Provider 다운로드
$ terraform init
  • Configuration 포맷팅 및 검증
$ terraform fmt        # 코드 포맷팅
$ terraform validate   # 설정 검증
  • 인프라 생성
$ terraform apply      # "yes" 입력 후 인프라 생성

 

3.4. Terraform 상태 확인

설정을 적용하고 나면, Terraform은 terraform.tfstate라는 파일을 작성합니다. 이 파일에는 생성된 리소스의 ID와 속성 정보가 저장됩니다. 해당 파일을 통해 Terraform은 리소스를 추적하며, terraform show 명령어로 현재 상태를 확인할 수 있습니다. 참고로, terraform.tfstate 파일은 Terraform이 인프라의 상태를 추적하는 중요한 파일이므로 백업 및 보호가 필요합니다.

$ terraform show

3.5. 변경 사항 적용

Configuration 파일을 변경한 뒤 terraform apply 명령어를 실행하여 수정된 설정을 적용할 수 있습니다. 변경 사항이 있으면 “yes”를 입력하여 적용합니다.

$ terraform apply

3.6. 인프라 삭제

더 이상 필요하지 않은 인프라는 terraform destroy 명령어로 삭제할 수 있습니다. 삭제하기 전에 현재 설정 상태를 확인하고, “yes”를 입력하여 삭제를 승인합니다.

$ terraform destroy

 

참고

https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code

 

What is Infrastructure as Code with Terraform? | Terraform | HashiCorp Developer

Learn how infrastructure as code lets you safely build, change, and manage infrastructure. Try Terraform.

developer.hashicorp.com

https://registry.terraform.io/providers/hashicorp/aws/latest/docs

 

Terraform Registry

 

registry.terraform.io