IT일상

Terraform으로 AWS EC2와 S3 생성해보기

  • 인프라
Profile picture

Written by solo5star

2023. 6. 6. 18:16

AWS를 이번에 처음 사용해보는데요, AWS에서 제공하는 컴퓨팅 자원의 종류가 많고 어려워서 Terraform으로 설정해두고 쓰려고 합니다.

Terraform과 AWS 둘 다 처음이기 때문에 글에서 부족한 부분이 많이 보일수도 있는 점 양해부탁드립니다.

Terraform이란?

1

인프라를 선언적인 코드로 정의(Infrastructure as Code, IaC) 할 수 있는, HashiCorp사에서 만든 오픈 소스 도구입니다.

IaC 등장 배경

가상화 기술이 발전하면서 여러 대의 서버를 만드는 것이 굉장히 쉬워졌습니다. 하지만 요즈음 서버 자원의 종류가 많아지고 규모가 커지면서 관리(provisioning) 및 운영(operation)이 어려워졌습니다. IaC(Infrastructure as Code)라는 개념이 등장한 배경이기도 한데요, 인프라 자원을 코드로 작성하여 자동화, 재사용, 버전 관리가 가능해졌습니다.

IaC 도구의 종류

IaC 도구는 다양하게 있는데요, Chef, Puppet, Ansible, AWS CloudFormation, 이 글에서 다루는 Terraform 등이 있습니다.

2

각 도구가 맡는 역할을 잘 나타낸 그림이 있어 가져와 봤습니다.

개인적으로 이 중 Terraform을 다루게 된 이유는 주변에서 많이 들렸던 것이 첫 번째 이유구요. 또, 자원을 선언적으로 관리할 수 있다는 점이 매력적으로 다가왔습니다. Azure, AWS 등 플랫폼에 구애받지 않는다는 점도 있구요.

준비물

당연하지만 AWS에 가입이 되어있어야 합니다! 가입을 어떻게 하는지는 생략하겠습니다.

AWS CLI 설치

AWS 작업들을 명령줄에서 수행할 수 있는 도구인 AWS CLI가 설치되어 있어야 합니다.

https://aws.amazon.com/ko/cli/

위의 사이트에서 다운받은 후 설치하세요.

3

aws --version 을 입력했을 때 위와 같이 뜨면 OK입니다.

Terraform 설치

https://developer.hashicorp.com/terraform/downloads?product_intent=terraform

윈도우의 경우 인스톨러 형식이 아닌 terraform.exe 바이너리만 다운로드될텐데 C:\terraform 같은 임의의 위치에 넣으시고 환경변수를 잡아주시면 되겠습니다.

4

마찬가지로 terraform -version 명령을 통해 설치가 잘 되었는지 확인해주시구요!

AWS Access Key 및 Secret Key 발급

이미 발급된 Access Key 및 Secret Key가 있다면 이 과정은 넘어가셔도 됩니다!

5

AWS 홈페이지에서 오른쪽 상단의 메뉴의 보안 자격 증명으로 이동하세요.

6

페이지 내에 액세스 키 문단이 있을텐데, 여기서 액세스 키를 만드시면 됩니다.

지금 메뉴에서 만드는 액세스 키는 루트 사용자 액세스 키 입니다. 즉 모든 권한을 가지고 있는 액세스 키를 만들게 되는데요, 이는 별로 권장되지 않습니다.

가능하다면 IAM에서 계정을 만드신 뒤 사용할 권한만 부여하고 액세스 키를 만드시는 것을 권장합니다.

7

루트 사용자라는 점을 꼭 염두해두시고 액세스 키를 만들어주세요.

8

액세스 키를 발급했다면 비밀 액세스 키(Secret Key)도 같이 발급이 될겁니다. Secret Key의 경우 나중에 확인할 수 없기 때문에 따로 복사해두는 것을 권장합니다.

AWS CLI 로그인

터미널 창을 열고 aws configure 명령을 입력하면 됩니다.

로그인에는 Access Key와 Secret Key 입력이 필요합니다.

9

리전은 ap-northeast-2 (아시아 태평양(서울)) 를 입력하면 됩니다. 다른 리전을 사용하고 싶다면 아래 링크를 참고하여 리전을 선택해주세요.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

aws sts get-caller-identity 명령을 실행하여 로그인이 잘 되었는지 확인해보세요.

10

Terraform 코드 작성

사전 준비가 모두 끝났습니다! 이제 terraform 코드를 작성할 차례인데요, 저는 VSCode를 사용하여 진행하겠습니다.

11

VSCode에 Terraform 확장 프로그램이 있으니 설치하시면 됩니다. Syntax Highlighting, IntelliSense 등 Terraform 코드 작성을 편리하게 할 수 있도록 도와줍니다.

12
코드보기
main.tf
terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-2"
}

main.tf 파일을 만들고 코드를 작성해줍니다.

13 14

저장 후 terraform init 명령을 실행하면 .terraform 폴더와 .terraform.lock.hcl 파일이 생성됩니다.

terraform init 명령은 위와 같이 terraform 설정을 수정하거나 git에서 소스 코드를 clone하였을 때 실행하는 명령입니다. (마치 npm install 처럼)

terraform init을 성공적으로 수행했다면 현재 디렉토리에서 terraform을 사용할 준비가 끝난 겁니다!

Terraform으로 EC2 생성하기

EC2는 AWS에서 제공하는 컴퓨팅 자원입니다. 24시간 전원이 연결된 컴퓨터를 대여하는 것과 똑같습니다. EC2에 Django, Spring 같은 서버들을 올려 서비스할 수 있습니다.

15
코드보기
ec2.tf
resource "aws_instance" "my_instance" {
  ami = "ami-0e05f79e46019bfac"
  instance_type = "t2.micro"
}

resource 블록을 만들고 위와 같이 작성해줍니다. ami(Amazon Machine Images)는 Amazon Linux 64-Bit x86으로 선택하였구요, 인스턴스 타입은 t2.micro 입니다.

16 17

terraform plan 명령을 입력하면 자원(resource)을 어떻게 생성하고 삭제할 것인지 계획을 출력해줍니다.

18 19

terraform apply 를 실행하면 tf 파일에 정의된 대로 자원(resource)를 생성합니다. 이렇게 EC2를 성공적으로 생성하였습니다! 진행하면서 크게 어려웠던 점은 없는 것 같네요.

20

AWS 콘솔에 들어가보면 인스턴스가 잘 생성된 것을 확인할 수 있습니다.

21

terraform show 명령으로도 생성된 자원을 확인할 수 있습니다.

지금은 VPC나 보안 그룹 설정이 전혀 되어있지 않기 때문에 외부에서 접속할 방법이 없습니다. 이 부분은 향후 다루어 보겠습니다.

Terraform으로 S3 생성하기

S3(Simple Storage Service)는 AWS에서 제공하는 객체 스토리지 서비스입니다. 객체 스토리지? 라는 말이 잘 안 와닿을 수 있는데, 파일 스토리지 역할을 한다고 보시면 됩니다. Vue, React 프로젝트를 빌드하여 나온 정적 html, css, js 파일들을 S3에 올려 서비스할 수 있습니다.

22
코드보기
s3.tf
resource "aws_s3_bucket" "my_s3" {
  bucket = "example-bucket-with-terraform"
}

EC2에서 했던 것처럼 resource 블록을 만들고 S3 자원을 정의해줍니다.

bucket = "" 안의 내용은 S3 버킷의 이름입니다.

terraform plan 명령을 사용하여 자원이 어떻게 생성될 지 확인한 후 terraform apply 명령을 실행하여 자원을 생성합니다.

23 24

버킷이 잘 생성된 것을 확인할 수 있습니다. 퍼블릭이 아니어서 외부에서의 접근은 불가능한데요, 이것도 따로 다루어보겠습니다.

Terraform으로 생성한 자원 삭제

25

terraform destroy 명령으로 자원을 모두 삭제할 수 있습니다.


Profile picture

Written by solo5star

안녕하세요 👋 개발과 IT에 관심이 많은 solo5star입니다

  • GitHub
  • Baekjoon
  • solved.ac
  • about
© 2023, Built with Gatsby