본문 바로가기
공부/IaC

[Terraform on AWS] 테라폼 입문 (in Window)

by haejang 2021. 3. 15.
728x90
728x90

목차

1. Terraform이란?

2. 실습 환경 설명, terraform 설치

3. IAM User & ACCESS KEY 설정

4. 간단하게 EC2 배포해보기 (+멱등성 체험)

5. Terraform으로 프로비저닝한 리소스들 삭제

 

 

1. Terraform이란?

먼저 IaC(Infrastructure as Code, 코드형 인프라)란? 코드형태로 인프라를 작성, 정의, 배포, 업데이트 함

IaC 도구는 크게 애드 혹 스크립트, 구성 관리 도구, 서버 템플릿 도구, 서버 프로비전 도구 4가지로 나뉜다

  • 구성 관리 도구 : Ansible, Chef, Puppet - 서버를 관리하는 쪽에 좀 더 초점
  • 서버 프로비전 도구 : Terraform, AWS Cloudformation - 서버와 인프라 자체를 구성하는데에 좀 더 초점

 

2. 실습 환경 설명, terraform 설치

사용 에디터 : Sublime Text 3 (Install Package로 Terraform 설치했음)

테라폼 다운 : www.terraform.io/downloads.html 여기에서 본인 OS에 맞는 terraform 다운로드

테라폼을 어느 위치에서도 사용할 수 있게 하기 위해 환경변수 PATH도 설정해주었다

 

 

일단 C:\에 terraform이란 새 폴더를 만들어서 terraform 파일을 넣어둔다

 

 

환경 변수를 검색해서 시스템 환경 변수 편집으로 들어가자

 

 

위와 같은 방법으로 시스템 변수의 Path에 C:\terraform을 추가해주고 확인을 눌러준다

 

 

cmd로 아무 위치에서 terraform을 쳤을 때 위와 같이 나오면 terraform 설치는 끝이다

 

그리고 main.tf를 위치시킬 폴더를 하나 아무데나 생성해주자

난 Terraform이란 폴더를 하나 만들어줬고 cmd에서 그 폴더 내로 이동한 후 진행하겠다

 

해당 폴더에서도 terraform 명령어가 먹히는지 확인

 

3. IAM User & ACCESS KEY 설정

테라폼에서 AWS의 리소스를 프로비저닝 하기 위해서는 해당 계정의 ACCESS KEY와 SECRET KEY가 필요하다

간단한 실습만 진행할거긴 하지만, 그래도 루트 계정으로 진행하는건 위험하기도 하고 보안상으로도 좋지 않기 때문에 최소한의 권한만 있는 IAM User를 만든 후 진행해보겠다

콘솔 > IAM > 사용자 > 사용자 추가

 

 

테라폼으로만 접근할거니까 프로그래밍 방식 액세스만 허용해주자

 

 

EC2만 만들어볼거니까 AmazonEC2FullAccess만 연결해준다

(VPC는 기본 VPC로 진행할 예정)

 

 

생성을 완료하면 이렇게 ACCESS KEY와 SECRET KEY를 다운받을 수 있는 창이 뜬다

각각의 키를 메모장에 복사해두던지 csv 파일을 다운받든지 하자 (지금 지나면 다시 못받는다)

 

이제 다시 cmd로 돌아와서, 액세스 키와 시크릿 키를 다음과 같이 등록해주자

set AWS_ACCESS_KEY_ID=[본인 계정 액세스 키]
set AWS_SECRET_ACCESS_KEY=[본인 계정 시크릿 키]

 

set 명령은 일반 변수 등록이라 현재 터미널에서만 유용하다 (다른 cmd 창을 키면 초기화 되어있음)

영구 등록이 필요하면 setx 명령을 사용하면 되고, linux의 경우엔 export를 사용하면 된다

 

4. 간단하게 EC2 배포해보기 (+멱등성 체험)

일단 기본 VPC가 배포되어 있어야 한다 (없으면 작업 > 기본 VPC 생성으로 만들면 됨)

기본 VPC로 진행하면 VPC id나 서브넷 id 등을 지정할 필요가 없다

지금은 맛보기만 하는거기때문에 최대한 간단하게 간단하게 해보겠다

 

 

일단 만들어둔 폴더에 main.tf 파일을 생성한 다음, 공급자(provider)를 설정해줘야 한다

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

 

PROVIDER는 AWS, Azure 등 공급자의 이름이다

따라서 위 구문으로 인해 테라폼은 아마존 웹 서비스의 서울 리전에서 인프라를 배포해야 한다는걸 인지하게 된다

이제 EC2를 만들기 위해 아래에 다음 구문을 적어주자

 

resource "aws_instance" "testEC2" {
  ami           = "ami-0e17ad9abf7e5c818"
  instance_type = "t2.micro"
}

aws_instance 자리엔 생성할 리소스 타입을, testEC2 자리엔 가독성을 위해 다른 코드들과 구분될만한 이름을 적어주면 된다

AMI는 서울 리전의 Amazon Linux 2 AMI이다

 

 

간단한 코드가 완성되었으니, 실행을 해보자

cmd에서 아래 명령들을 차례대로 쳐주자

 

terraform init
terraform plan
terraform apply

 

init : 테라폼을 수행하기 위한 공급자의 최신 플러그인들을 자동 설정 - provider 구문이 설정된 후에 실행할 수 있다

 

 

plan : 테라폼이 실행했을 시, 실제로 생성되거나 변경되는 내역을 보여준다

테라폼은 멱등성(Idempotency)이라는 중요한 개념이 있기 때문에, 같은 코드들을 조금씩 변경하면서 실행했을 때 매번 새롭게 생성되는것이 아니라 변경된 부분만 반영되어 프로비저닝된다

 

 

마지막으로 apply 명령으로 테라폼을 실제로 실행시키게 되는데, 변경 내역을 확인한다고 하기 위해 중간에 yes를 한번 쳐주고 진행하면 끝난다

 

 

완료된 후 콘솔에 가보면

 

 

설정했던 대로의 인스턴스가 만들어져 있다

 

근데 우리는 멱등성을 경험해보고 싶기 때문에, 코드를 아래와 같이 좀 수정해서 다시 실행시켜보겠다

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

resource "aws_instance" "testEC2" {
  ami           = "ami-0e17ad9abf7e5c818"
  instance_type = "t2.micro"

  tags = {
    Name = "Web Server"
  }
}

별건 없고 그냥 Tag만 추가해주었다

이러고 다시 apply를 해주면

 

 

아까 그 인스턴스에 그대로 태그만 생긴게 확인되었다

: 멱등성 때문에 변경된 부분만 반영해서 변경된 것

(물론 user data같은걸 바꾸게 된다면 종료하고 다시 만들어야하긴 한다)

 

5. Terraform으로 프로비저닝한 리소스들 삭제

terraform destroy

그냥 그대로 destory 명령만 해주면 삭제될 변경사항들이 쭈루룩 생기면서 yes를 누르라고 나온다

yes만 마저 눌러주면 알아서 전부 삭제된다

 

요약

  • Terraform은 IaC 중에서도 리소스 프로비저닝 도구 -> 서버 관리용으론 맞지 않다
  • Terrform을 설치한 후, 프로바이더(여기선 aws)를 설정해주기만 하면 간단하게 해당 프로바이더의 리소스들을 생성, 변경, 삭제 가능
  • 주요 명령
    • init : 처음에 필요 플러그인들을 자동 설치(main.tf 파일에 프로바이더 설정 후 실행 가능)
    • plan : 바뀔 변경 사항들을 확인
    • apply : 테라폼 실행
    • destroy : 문서에 명시되어 있는 리소스들 삭제

 

728x90
728x90

댓글