새소식

IaC/Terraform

1주차(3)_Terraform을 통한 리소스 배포

  • -
CloudNet@ 팀의 가시다님께서 Leading 하시는 Terraform T101 Study 내용 요약
해당 Terraform Study 는 Terraform Up and Running 책을 기반으로 진행 중입니다.

 

 

1. EC2 Instance 배포

EC2 Instance는 AWS에서 사용하는 기본적인 IaaS 서비스입니다.

편의를 위해 Default VPC를 사용할 예정이므로, Default VPC가 없다면 실습 전 생성해 줍니다.

 

 

1.1. Main.tf 작성

 

main.tf 파일 생성 후 아래의 내용을 넣고 실행해봅니다.
// main.tf

// provider 를 통해 aws를 사용할 것임을 선언
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  // ami 는 aws에서 사용하는 서버 이미지
  ami           = "ami-0c76973fbe0ee100c"
  // instance type은 해당 서버의 성능을 나타낸다.
  instance_type = "t2.micro"
}

 

 

1.2. Terraform 실행

 

아래의 명령어를 통해 Terraform 을 실행해봅니다.
terraform init && terraform plan && terraform apply -auto-approve

 

 

문제없이 배포가 되었다면 아래와 같은 화면이 보일 것입니다.

 

 

 

실제로도 잘 배포가 되었을지 콘솔에서 확인해봅니다.

 

 

EC2 Instance가 잘 실행되고 있는 것을 확인했습니다.

이제 다시 Terraform 명령어를 사용해서 배포한 EC2를 삭제해봅니다.

terrafrom destroy -auto-approve

 

문제없이 수행되었다면 마찬가지로 아래와 같은 화면이 보일 것입니다.

 

 

굉장히 간단하게 AWS EC2 서버를 배포하고 삭제했습니다. 

그럼 방금 진행한 일련의 과정 속에 어떠한 일들이 있었는 지 하나씩 자세하게 살펴보겠습니다.

 

 

 

2. Terraform 파헤치기

 

2.1. tf 파일

.tf 는 Terraform 에서 사용하는 확장자명

Terraform은 HashiCorp 사에서 Go 언어를 기반으로 개발한 오픈소스 프로비저닝 도구라고 앞서 설명하였습니다.

Terraform은 HCL 이라고 하는 언어로 동작하게 되는데, 이 때 HCL 이 동작할 수 있는 파일이 바로 .tf 확장자가 붙은 파일입니다.

 

Ex)
Python > .py 파일 , JavaScript > .js 파일 , Terraform > .tf 파일 !!

 

그래서 처음에 main.tf 파일을 만들어서 terraform 을 실행시켜 주었습니다.

그렇다면 main.tf 안의 내용은 어떻게 구성했던 것일까요??

 

 

2.2. Terraform Resource

 

provider어떤 클라우드 리소스 공급자를 사용할 것인 지 정하는 것입니다. (AWS, GCP 등)

 

 

해당 공급자를 통해 생성할 리소스는 아래와 같은 형식으로 구성되어 있다.
resource “<PROVIDER>_<TYPE>” “<NAME>” {
  [CONFIG ...]
}
  • PROVIDER : ‘aws’ 같은 공급자의 이름
  • TYPE : ‘security_group’ 같은 리소스의 유형
  • NAME : 리소스의 이름
  • CONFIG : 한개 이상 arguments

 

 

위 내용을 이해하고 main.tf 파일을 다시 살펴보겠습니다.

// main.tf

resource "aws_instance" "example" {
  // ami 는 aws에서 사용하는 서버 이미지
  ami           = "ami-0c76973fbe0ee100c"
  // instance type은 해당 서버의 성능을 나타낸다.
  instance_type = "t2.micro"
}

 

위 리소스는 아래와 같이 해석할 수 있습니다.

  1. AWS 라는 Provider가 제공하는,
  2. Instance 라는 Resource Type을 생성하겠다.
  3. 여기서 생성하는 AWS_Instance 에는 Example 이라는 이름을 부여할 것이다.
    해당 이름은 마음대로 지정해줘도 되지만 생성할 리소스가 어떤 리소스인지 구분될 수 있는 이름을 부여해주는 것이 좋습니다.
  4. Example 이라는 Instance는 "ami-0c76973fbe0ee100c" 라는 ami 를 이용해 생성할 것이며,
    "t2.micro" 유형으로 생성할 것이다.

 

 

실제로는 이 외에도 굉장히 많은 config 가 필요할 것이므로 아래 문서에서 지원하는 Config 유형을 확인해보는 것이 좋습니다.
 

Terraform Registry

 

registry.terraform.io

 

 

2.3. Terraform Command

 

Terraform Resource 가 어떻게 구성되는 지 알아보았다면,

이제 Resource를 실제로 생성하고 삭제하는 Terraform 명령어를 살펴보겠습니다.

 

Terraform 은 기본적으로 init, plan, apply, destroy 의 수명 주기를 가지고 있습니다.

 

 

Terraform init
  • 해당 Terraform 코드가 어떤 공급자를 사용하는지 확인하고, 공급자에 대한 코드를 다운로드하는 작업 실행
  • 또한, Backend 및 Lock 상태 확인 등의 작업을 실행

 

 

 

저는 aws 공급자를 사용하기에 실제로 aws 공급자 에 대한 정보를 다운로드 했는 지 확인해보겠습니다.

해당 내용은 terraform init 을 실행하면 생성되는 .terraform 디렉토리를 확인하면 됩니다.

 

 

 

Terraform plan
  • 테라폼을 실제 변경하기 전에 테라폼이 수행할 작업 확인 가능
  • plan 으로 변경되는 리소스에 대한 결과값은 +, -, ~ 등으로 표현됨 (Linux 의 Diff 명령어와 유사)
  • 실제 리소스를 생성하지 않고 코드를 스캔하는 작업이므로, 여러번 수행해도 리소스에는 영향을 미치지 않음

 

 

 

위 사진처럼 terraform plan 명령어를 입력했을 때, 변경되는 리소스를 확인할 수 있습니다.

해당 내역은 -out={file} 옵션으로 별도 출력할 수도 있습니다.

terraform plan -out=test.tf

 

 

 

Terraform apply
  • 테라폼 리소스를 실제로 배포하는 작업

 

apply 명령어를 실행하면 실제로 배포를 수행할 것인지 묻는 메시지가 출력되는데,
이를 피하기 위해서 -auto-apply 옵션을 함께 사용할 수 있습니다.

 

 

Terraform destroy
  • terraform apply 명령어로 생성한 리소스를 삭제하는 작업

 

apply 작업과 마찬가지로 실제 삭제를 수행할 것인지 묻는 메시지가 출력되는데,

이를 피하기 위해서 -auto-apply 옵션을 함께 사용할 수 있습니다.

 

 


 

Terraform 을 통해 리소스를 생성하는 법과 Terraform 명령어에 대해 알아보았습니다.

다음에는 간단한 웹서버를 배포하는 법을 알아보겠습니다.

 

Contents

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