새소식

IaC/Terraform

[Terraform] 테라폼 기본 사용법 - AWS 인프라를 코드로 관리하기

  • -

클라우드 인프라 관리는 많은 기업과 조직에게 중요한 과제 중 하나입니다. 이를 효율적으로 관리하고 자동화하기 위해 Terraform이라는 도구가 많이 사용되고 있습니다. 이번 블로그에서는 Terraform의 기본 사용법에 대해 알아보겠습니다.

Terraform 설치는 아래 포스팅을 참고해주세요!😎

[IaC/Terraform] - [Terraform] 간단한 테라폼 설치 방법

Terraform이란?

Terraform은 HashiCorp에서 개발한 인프라스트럭처 코드(Infrastructure as Code, IaC) 도구입니다. Terraform을 사용하면 클라우드 인프라를 코드로 정의하고, 이를 버전 관리하고, 변경사항을 추적하며, 인프라를 생성/변경/삭제하는 등의 작업을 자동화할 수 있습니다. Terraform은 다양한 클라우드 서비스 제공자들과 호환되어 AWS, Azure, Google Cloud, 등 다양한 클라우드 환경에서 인프라를 관리할 수 있습니다.

 

Terraform 명령어 기초

[그림 1] Terraform 기본적인 흐름도

  • terraform init: Terraform 작업을 위한 초기화를 수행합니다. 프로젝트 디렉토리에서 최초로 실행해야 합니다.
  • terraform plan: 변경 사항을 미리 확인하기 위해 실행합니다. 인프라 변경 사항을 검토할 수 있습니다.
  • terraform apply: Terraform 코드에 정의된 인프라를 생성/변경합니다.
  • terraform destroy: Terraform 코드에 정의된 인프라를 삭제합니다.
  • terraform state: Terraform 상태 정보를 확인하고 관리합니다.

 

Terraform docs 참고 방법

가장 먼저 [그림 1]의 Terraform 코드를 작성해야 하는데, 가장 참고하기 좋은 문서는 Terraform docs입니다. 들어가면 먼저 어떤 provider를 사용하는지를 선택하는데, 본인 환경에 맞는 provider를 선택하면 됩니다. 여기서는 aws를 예제로 사용할 것이기 때문에 aws를 선택하였습니다.

[그림 2] Terraform docs Providers 선택

우측 상단의 Documentation을 누르면 Terraform AWS Documentation 페이지가 나올 것입니다.

 

Terraform 코드 작성

Terraform AWS Documentation 페이지에는 Terraform에서 사용할 수 있는 AWS 리소스들에 대한 대부분의 정보가 정리되어 있기 때문에 잘 활용하면 좋습니다.

[그림 3] Terraform docs에서 instance 생성 예제 검색

Instance를 생성하는 리소스를 검색하여 나온 위의 Instance 생성 예제를 그대로 코드로 입력해보겠습니다.

$ mkdir terraform && cd terraform
$ vim main.tf
provider "aws" {
  region = "ap-northeast-2"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"

  tags = {
    Name = "HelloWorld"
  }
}

Terraform에서는 .tf 확장자를 가진 독자적인 언어를 사용합니다. 이 파일에 클라우드 인프라를 정의하는 Terraform 코드를 작성해야 합니다.

Terraform은 다양한 클라우드 서비스 제공자를 지원하며, 각 제공자에 대한 인증 정보와 설정을 구성 파일에 추가해야 합니다. 여기서는 AWS Provider 설정을 추가하였고, provider 밑으로는 모두 [그림 3]의 코드를 그대로 가져왔습니다.

 

Terraform 명령 수행

그럼 작성된 코드를 Terraform을 통해 배포하는 과정을 보여드리겠습니다.

[그림 4] terraform init 명령 수행

먼저 terraform init 명령을 수행합니다. init은 코드를 실행하는데 필요한 플러그인이나 모듈을 설치하는 등 초기화 작업을 수행합니다.

[그림 5] AWS Profile 설정

terraform plan 명령부터는 실제 인프라의 정보를 가져오는 작업이 들어가기 때문에 AWS 리소스에 접근할 수 있는 권한을 가진 유저의 Profile이 필요합니다. 권한이 있는 유저의 액세스 키를 등록하여 Profile로 설정하겠습니다.

[그림 6] terraform plan 명령 수행

terraform plan 명령을 수행하면 인프라에 어떻게 반영될지에 대한 결과를 미리 확인할 수 있습니다. 여기서는 Ubuntu 이미지를 사용하여 t3.micro 타입의 Instance를 하나 생성하도록 예제 코드를 작성하였기 때문에 해당 코드 적용 결과를 미리 확인할 수 있습니다.

terraform plan 명령을 수행하여 나온 출력 결과를 통해 자신이 원하는 방향으로 인프라가 변경될 것인지를 확인하고, 문제가 없다고 판단이 되면 terraform apply 명령을 수행합니다.

[그림 7] terraform apply 명령 수행

terraform apply 명령을 수행하면 plan에서 보여주는 인프라 변경 내용을 미리 확인할 수 있고, 아래 Enter a value 부분에 yes를 입력하게 되면 실제 인프라에 반영되게 됩니다. 문제없이 잘 반영됐다면 AWS Console에서 인스턴스가 잘 생성되었는지 확인해봅시다.

[그림 8] AWS Console에서 생성된 Instance 확인

코드로 작성한 내용대로 인스턴스가 잘 만들어진 것을 확인할 수 있습니다.

참고로 다음 [그림 9]와 같은 에러가 발생한다면, Default로 지정되어 있는 VPC가 존재하지 않기 때문에 생겨나는 에러입니다.

[그림 9] Default VPC가 없는 경우 에러

terraform 코드에서 필수로 입력받는 값이 아닌 optional한 값들은 값을 지정하지 않는 경우 default 값을 가져가는데, VPC 또한 기본으로 지정된 것이 없다면 생성할 때 에러가 나게 됩니다. 이점 참고해주세요! ⚠️ 

마지막으로 terraform destroy를 명령을 통해 앞서 terraform 코드를 기반으로 실제 인프라에 적용된 내용을 삭제할 수도 있습니다.

[그림 10] terraform destroy 명령 수행

마지막으로 당부드리고 싶은 말은.. 실제 운영 환경에서 apply를 할 일이 생기신다면 plan 결과를 꼼꼼하게 살펴보고 적용하시기 바랍니다. 이런 말을 하는 이유는.... 필자 또한 의도치 않은 실수로 생산 라인 전체가 멈춘 적이 있어 트라우마로 남아 있기 때문입니다🤣🤣🤣

'IaC > Terraform' 카테고리의 다른 글

[Terraform] 간단한 테라폼 설치 방법  (0) 2023.04.23
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.