IaC/Infrastructure Provisioning

1. Terraform 기초 : 설치 및 .tf 파일 설명

Somaz 2023. 4. 4. 20:00
728x90
반응형

Overview

Terraform 기초부터 천천히 공부해볼 예정이다.

 

오늘은 Terraform 설치 및 기본 파일들의 역할 그리고 간단한 명령어에 대해 알아보려고 한다.

 


Terraform이란?

https://www.veritis.com/services/terraform/

 

Terraform은 HashiCorp에서 개발한 오픈 소스 코드형 인프라(IaC) 도구이다.

 

이를 통해 HCL(HashiCorp 구성 언어)이라는 선언적 언어를 사용하여 클라우드 인프라 리소스를 정의, 프로비저닝 및 관리할 수 있다.

 

Terraform은 AWS, Azure, Google Cloud 등과 같은 여러 클라우드 공급자와 온프레미스 및 기타 서비스를 지원한다. 그리고 구성 파일에 정의된 인프라의 원하는 상태를 생성하여 작동한다. 그런 다음 원하는 상태를 인프라의 실제 상태와 비교하고 원하는 상태와 일치시키는 데 필요한 변경 계획을 생성한다. 계획을 적용하면 Terraform이 필요에 따라 리소스를 생성, 업데이트 또는 삭제한다.

 


 

 

Terraform의 주요 기능

 

선언적 언어(Declarative language)

  • HCL을 사용하여 인프라의 원하는 상태를 설명하면 Terraform이 해당 상태를 달성하는 방법을 결정합니다.

 

공급자 지원(Provider support)

  • Terraform은 광범위한 클라우드 공급자 및 플랫폼을 지원하므로 동일한 구성 내에서 여러 공급자의 리소스를 관리할 수 있습니다.

 

모듈성(Modularity)

  • Terraform 구성을 모듈로 구성하여 여러 프로젝트 또는 팀 간에 코드를 쉽게 재사용하고 공유할 수 있습니다.

 

상태 관리(State management)

  • Terraform은 인프라 상태를 상태 파일에 유지하므로 시간 경과에 따른 변경 사항을 추적하고 팀원과 조정할 수 있습니다.

 

버전 관리 및 협업(Versioning and collaboration)

  • Terraform은 Git과 같은 버전 제어 시스템과 잘 통합되어 팀 구성원 간의 협업과 인프라 코드의 버전 관리 기능을 가능하게 합니다.

 

Terraform은 일관되고 모듈식이며 버전 제어 방식으로 클라우드 인프라 리소스를 관리하는 데 도움이 되는 강력한 코드형 인프라 도구이다.

 


Terraform 설치방법

 

Installed  gnupgsoftware-properties-common, and curl packages

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common

 

Install the HashiCorp GPG key

wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg

 

Verify the key's fingerprint

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

 

The gpg command will report the key fingerprint

/usr/share/keyrings/hashicorp-archive-keyring.gpg
-------------------------------------------------
pub   rsa4096 XXXX-XX-XX [SC]
AAAA AAAA AAAA AAAA
uid           [ unknown] HashiCorp Security (HashiCorp Package Signing) <security+packaging@hashicorp.com>
sub   rsa4096 XXXX-XX-XX [E]

 

Add the official HashiCorp repository to your system

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

 

Download the package information from HashiCorp

sudo apt update

 

Install Terraform from the new repository

sudo apt-get install terraform

Terraform tf 파일 설명

Terraform에서 프로젝트는 일반적으로 각각 특정 용도를 제공하는 여러 파일로 구성된다.

 

 

variables.tf

variables.tf 파일은 Terraform 구성에 필요한 입력 변수를 정의하는 데 사용된다. 변수에는 기본값, 설명 및 유형 제약 조건이 있을 수 있다. 입력 변수를 정의하면 Terraform 구성을 보다 모듈화하고 재사용 가능하며 이해하기 쉽게 만들 수 있다.

variable "region" {
  description = "The AWS region where the resources will be created"
  type        = string
  default     = "ap-northeast-2"
}

 

terraform.tfvars

terraform.tfvars 파일은 variables.tf에 정의된 입력 변수에 대한 값을 제공하는 데 사용된다. 파일 이름은 아무거나 지정할 수 있지만 .tfvars 또는 .tfvars.json 확장자가 있어야 한다.

이 파일을 사용하여 구성을 사용자 정의하고 다양한 환경 또는 구성을 쉽게 관리할 수 있다

region = "us-east-1"

 

 

main.tf

main.tf 파일은 Terraform 리소스, 데이터 소스 및 모듈을 포함하는 기본 구성 파일이다. 생성, 업데이트 또는 삭제하려는 인프라를 설명한다. main.tf에 정의된 리소스는 terraform apply를 실행할 때 생성되거나 수정된다.

provider "aws" {
  region = var.region
}

resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "example-vpc"
  }
}

 

 

outputs.tf

outputs.tf 파일은 Terraform 구성이 생성할 출력 값을 정의하는 데 사용된다. 이러한 출력 값은 생성된 인프라에 대한 중요한 정보를 표시하거나 모듈 간에 데이터를 전달하는 데 사용할 수 있다. 출력은 terraform apply를 실행할 때 표시되며 terraform output 명령을 사용하여 쿼리할 수 있다.

output "vpc_id" {
  value       = aws_vpc.example.id
  description = "The ID of the created VPC"
}

 

version.tf 

version.tf 파일은 필요한 Terraform 버전과 공급자 플러그인을 지정하는 데 사용되는 Terraform 구성 파일이다. 별도의 파일에 필요한 버전을 정의하면 Terraform 구성이 예상되는 버전의 Terraform 및 사용 중인 제공자 플러그인과 호환되는지 확인할 수 있다.

terraform {
  required_version = ">= 1.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.47"
    }
  }
}

Terraform 명령어

$ terraform -help
Usage: terraform [global options] <subcommand> [args]

The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.

Main commands:
  init          Prepare your working directory for other commands
  validate      Check whether the configuration is valid
  plan          Show changes required by the current configuration
  apply         Create or update infrastructure
  destroy       Destroy previously-created infrastructure

All other commands:
  console       Try Terraform expressions at an interactive command prompt
  fmt           Reformat your configuration in the standard style
  force-unlock  Release a stuck lock on the current workspace
  get           Install or upgrade remote Terraform modules
  graph         Generate a Graphviz graph of the steps in an operation
  import        Associate existing infrastructure with a Terraform resource
  login         Obtain and save credentials for a remote host
  logout        Remove locally-stored credentials for a remote host
  metadata      Metadata related commands
  output        Show output values from your root module
  providers     Show the providers required for this configuration
  refresh       Update the state to match remote systems
  show          Show the current state or a saved plan
  state         Advanced state management
  taint         Mark a resource instance as not fully functional
  test          Experimental support for module integration testing
  untaint       Remove the 'tainted' state from a resource instance
  version       Show the current Terraform version
  workspace     Workspace management

Global options (use these before the subcommand, if any):
  -chdir=DIR    Switch to a different working directory before executing the
                given subcommand.
  -help         Show this help output, or the help for a specified subcommand.
  -version      An alias for the "version" subcommand.

 

terraform apply시 값 읽는 순서

terraform apply -var-file="terraform.tfvars"
  1. 환경변수
  2. terraform.tfvars 파일
  3. terraform.tfvars.json 파일
  4. *.auto.tfvars 또는 *.auto.tfvars.json 파일중 사전식 순서대로
  5. Command Line 의 -var 또는 -var-file 옵션을 명시된 순서대로

 


마무리

다음시간에는 Terraform 변수 사용법에 대해서 공부해보도록 하겠다!

 


Reference

Install Terraform

 

Terraform의 모든 것

 

Terraform 간단 사용법

 

Terraform AWS Provider Github 주소

 

Terraform input variables

728x90
반응형