Terraform 시작하기

5614 단어 terraformaws입문aws

Introduction

공식 문서에서는 Terraform을 다음과 같이 소개한다.

Terraform is an infrastructure as code (IaC) tool that allows you to build, change, and version infrastructure safely and efficiently. This includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc. Terraform can manage both existing service providers and custom in-house solutions.

쉽게 말해서, 테라폼이란 인프라를 안전하고 효율적으로 구축, 변경 및 버전화를 할 수 있는 코드형 인프라 도구이다 (IaC). 보통은 인프라를 GUI로 관리하곤 하는데, 코드로 관리할 수 있다는 점이 큰 장점인 것 같다. 뿐만 아니라, AWS, Azure, Docker, GCP, OCI, 그리고 Terraform Cloud 등 다양한 클라우드 플랫폼을 지원하며 버전 관리가 가능하다. 이전에 AWS CloudFormation을 사용해본 경험이 있는데, Terraform은 그것과 매우 유사하면서 더 다양한 플랫폼을 지원하는 것으로 보인다.

Key Features

https://www.terraform.io/intro/index.html#key-features

Infrastructure as Code
인프라를 사람이 읽을 수 있는 코드로 만들 수 있다. 이를 통해 버전 관리, 공유 및 재사용이 가능하다.

Execution Plan
수행할 작업을 설명하는 실행 계획을 생성한다. 이를 통해 수행 계획을 검토해볼 수 있다. 또한, 실제 적용 전에 승인을 요청함으로써 보다 안전하게 인프라를 관리할 수 있다.

Resource Graph
리소스 그래프를 만들고, 의존성이 없는 리소스들을 병렬로 생성 및 변경한다. 이를 통해 리소스를 최대한 빠르고 효율적으로 운영이 가능하다.

Change Automation
사람의 개입을 최소한으로 하면서 복잡한 인프라 변경을 적용 및 관리할 수 있다. configuration 파일을 업데이트 할 때, Terraform은 변경된 사항을 확인하고 종속성을 고려하여 증분 실행 계획을 생성한다. (솔직히 이 부분에 대해서는 아직 와닿지 않는다. 조금 더 공부해보고 이해가 되면 다시 자세한 설명을 적는걸로..)

Getting Started with AWS

https://learn.hashicorp.com/collections/terraform/aws-get-started

나는 내가 관리하고자 하는 인프라가 AWS에 구축되어 있기 때문에, AWS 리소스를 관리할 목적으로 Terraform을 공부하고 있다. 그리고 마침 공식 문서에 이 내용이 굉장히 잘 정리가 되어있다. AWS뿐만 아니라, Azure, Docker 등 다양한 플랫폼에서 어떻게 처음 시작할지 막막한 사람들을 위해 쉽고 친절하게 가이드가 잘 정리되어 있으니, 나처럼 처음 Terraform을 시작하는 사람들은 공식 문서를 보면서 간단히 따라해보는 것을 강력 추천한다. 아래는 공부하면서 기록했던 내용을 적어봤다.

Write Configuration

# sample configuration

# Terraform 셋팅 관련 설정을 위한 블록
terraform {
  required_providers { # Terraform이 인프라를 provisioning 하기 위해 필요한 소스
    aws = {
      source  = "hashicorp/aws" # optional hostname
      version = "~> 3.27" # optional, but recommended. 만약 설정하지 않으면, Terraform은 가장 최신 버전을 사용함!
    }
  }

  required_version = ">= 0.14.9"
}

# provider란 Terraform이 당신이 정의한 리소스를 생성 및 관리하기위해 사용할 플러그인
# 구체적인 provider를 정의하기 위한 블록. 이 경우에는 "aws"
provider "aws" {
  profile = "default" # 이 값은 Terraform 이 너의 local에 AWS config file의 AWS credencials를 참고한다.
  region  = "us-west-2"
}

# 인프라의 컴포넌트들을 정의하기 위해 사용하는 블록
# resource "{RESOURCE_TYPE}" "{RESOURCE_NAME}"
resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

Command

terraform init # download necessary providers

Inspect state

  • terraform apply를 하고나면, terraform.tfstate 라는 파일이 생성된다. Terraform은 자신이 관리하는 모든 리소스들의 ID와 속성값들을 이 파일에 저장한다.
  • Terraform state파일은 리소스를 트랙킹할 수 있는 유일한 방법이다.
  • 가끔 민감한 정보를 가지고 있을 수 있기 때문에 반드시 이 파일의 정보는 보안이 잘 유지되어야 한다. (테라폼은 이 정보를 remote에 저장해서 관리하는걸 권장한다)
  • terraform show 명령어로 inspect 할 수 있다.

Change Infrastructure

-   : 리소스를 제거한다는 의미
+   : 리소스를 생성한다는 의미
-/+ : 리소스를 제거하고 다시 생성한다는 의미 (교체가 아님)

좋은 웹페이지 즐겨찾기