테라폼(Terraform) 사용 가이드 3: EC2 생성하기

2023. 12. 4. 17:33·DevOps/테라폼(Terraform)
반응형
 
 
 

MacOS에서 테라폼을 사용하여 EC2 인스턴스를 생성해 보자

 

📌  Terraform 사용을 위한 전제조건

1. Terraform CLI (1.2.0 이상)가 설치되어 있어야 한다.

2. AWS CLI가 설치되어 있어야 한다.

3. AWS 계정 및 자격 증명 보유 (IAM 계정 생성 권장)

4. AWS CLI에서 aws configure 명령어로 환경변수를 설정한다. [Access key, Secret key]

특히 전제조건 중에 AWS CLI의 계정 연결은 매우 중요하니 꼭 수행하고 진행하도록 하자

 

1. 테라폼 main.tf 파일 구성

로컬 PC에 테라폼 전용 디렉토리(폴더) 생성

  • 로컬 PC에 테라폼 작업을 진행할 디렉토리를 생성한다.
mkdir terraform
cd terraform

 

테라폼 코드가 담긴 tf파일 생성

  • main.tf 파일 생성 및 구성 (터미널에서 vim을 사용했다. vsCode에서 폴더를 열고 파일을 만들어도 된다.)
vim main.tf

 

vsCode에서 테라폼 코드(main.tf)가 있는 폴더 열기

  • terraform 코드를 vsCode에서 작성하기 위해 추천하는 확장 프로그램이 있다. (extension에서 Teffaform과 HashiCorp Terraform을 검색해서 설치해 주자)

vsCode에서 테라폼을 사용하기 편하게 해주는 extension
vsCode에서 테라폼을 사용하기 편하게 해주는 extension

  • vsCode에서 아래의 코드를 main.tf 내부에 적어주면 된다.
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.29.0"
    }   
  }
  required_version = ">= 1.2.0"
}

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

resource "aws_instance" "app_server" {
  ami                   = "ami-0ea766b7a13aecc49"
  instance_type         = "t4g.micro"
  tags = {  
    Name = "ExampleAppServerInstance"
  }
}

vsCode에 테라폼 코드 작성

 

2. 테라폼 초기화 (init)

테라폼 초기화를 하는 이유

프로바이더 플러그인 설치

  • Terraform 구성에 정의된 프로바이더(예: AWS, Google Cloud)에 대한 플러그인을 다운로드하고 설치한다. 이 플러그인들은 Terraform이 클라우드 서비스와 상호 작용하는 데 필요하다.

 

모듈 다운로드

  • Terraform 코드에 사용된 모듈이 있으면 이를 다운로드하고 준비한다.

 

.terraform 디렉토리 생성

  • 필요한 모든 파일과 설정을 저장하기 위한 .terraform 디렉토리를 생성한다.

 

상태 파일 준비

  • 필요하다면 Terraform의 상태 관리를 위한 기본 설정을 구성한다.

 

테라폼 초기화 작업 진행

  • 테라폼은 작성한 코드(main.tf)가 존재하는 디렉토리에서 Terraform 초기화 명령어를 입력해서 기동을 시작한다.
terraform init
  • 명령어를 입력해서 성공하면 아래와 같이 "Terraform has been successfully initialized!" 라고 나온다.

terraform init
terraform init

 

3. 인프라 검사 (plan)

테라폼 코드를 검사하는 명령어 입력

  • 디렉토리 초기화를 완료했다면 다음으로 Terraform 코드에 대한 검증을 하는 명령어를 입력한다.
terraform plan
  • 명령어를 입력하면 아래와 같이 나온다.

인프라 검사 명령어 입력
인프라 검사 명령어 입력

 

  • 계속해서 이런 식으로 plan(계획)을 검사한 후에 마지막에 결과를 보여준다. (나는 지금 EC2 한 개만 띄우기 때문에 1 to add다.)

인프라 검사 결과
인프라 검사 결과

 

  • 그리고 맨 하단에는 아래와 같은 문구가 보일 것이다. 검사에 성공했으니 인프라 구축 명령어인 apply를 입력하라는 말이다.
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run
"terraform apply" now.

 

 

4. 인프라 구축 (apply)

EC2 인스턴스 생성 명령어 입력하기

  • 디렉토리 검사에서 통과했으면 Terraform 인프라를 구축하는 apply 명령어를 입력한다.
terraform apply
  • 이 명령어를 입력하면 한번 더 plan이 진행되고 "Do you want to perform these actions?" 라는 질문이 나온다.

인프라 구축 명령어 입력
인프라 구축 명령어 입력

 

EC2 인스턴스 생성 완료
EC2 인스턴스 생성 완료

 

생성된 EC2 인스턴스 확인하기

  • AWS 웹 콘솔에 들어가서 방금 생성한 EC2가 잘 생성되었는지 확인한다.

ec2 인스턴스 확인
ec2 인스턴스 확인

 

5. 상태 검사 (show)

터미널에서 테라폼 상태를 확인

  • Terraform 상태 확인 명령어를 입력한다.
terraform show
  • 아래와 같이 동작중인 테라폼의 상황이 나온다.

테라폼 상태 CLI에서 확인
테라폼 상태 CLI에서 확인

 

6. 수동으로 상태 관리 (state list)

상태 목록 명령어 입력하기

  • Terraform 상태 목록 명령어
terraform state list

테라폼 상태 수동으로 관리하기
테라폼 상태 수동으로 관리하기

 

이 명령어는 왜 사용하는가?

  • "terraform state list" 명령어는 Terraform 상태 파일에 있는 리소스의 목록을 보여준다. 이 명령어를 사용하면 현재 Terraform이 관리하고 있는 모든 리소스의 식별자들을 확인할 수 있다.
  • 이 명령어는 특히 상태 파일을 수동으로 관리할 필요가 있을 때 유용하다. 예를 들어, 리소스를 다른 상태 파일로 이동하거나, Terraform 구성에서 삭제된 리소스를 수동으로 상태 파일에서 제거할 때 말이다. "terraform state list"로 현재 관리 중인 리소스를 정확히 알아내고, 필요한 경우 "terraform state" 명령어의 다른 옵션들(예: 'mv', 'rm')을 사용해 상태를 관리할 수 있다.

 

수동으로 상태를 관리하는 방법1 - "terraform state mv"

terraform state mv 명령어 사용

  • "terraform state mv" 명령어는 Terraform 상태 파일에서 리소스의 위치를 변경하는 데 사용한다. 간단히 말해서, 이 명령어는 Terraform이 관리하는 리소스의 '주소'를 변경하는 것이다.
  • 예를 들어, 한 Terraform 모듈 내의 리소스를 다른 모듈로 이동하거나, 리소스의 이름을 바꿀 때 사용할 수 있다. 이렇게 하면 Terraform 상태 파일 내에서만 리소스의 위치가 바뀌고, 실제 인프라에는 영향을 주지 않는다.

 

Terraform의 상태 파일에서 리소스의 '주소'를 변경하는 이유

리팩토링 또는 재구성

  • Terraform 코드의 구조를 변경하거나 리팩토링할 때, 리소스를 다른 모듈이나 위치로 이동해야 할 수 있다. 이 경우, `terraform state mv`를 사용하면 기존 인프라에 영향을 주지 않고 코드 구조를 변경할 수 있다.

 

리소스 이름 변경

  • 리소스의 식별자나 경로를 더 명확하거나 의미 있는 것으로 변경하려는 경우에 사용할 수 있다.

 

효율적인 관리

  • 특정 리소스를 더 적절한 모듈이나 위치로 옮겨서 관리의 효율성을 높이려는 경우에도 사용된다.

 

수동으로 상태를 관리하는 방법2 - "terraform state rm"

  • "terraform state rm" 명령어는 Terraform 상태 파일에서 리소스의 추적을 제거하는 걸 의미한다. 이 명령어를 사용하면, 해당 리소스는 더 이상 Terraform의 관리 하에 있지 않게 되지만, 실제 클라우드 환경이나 인프라에서는 리소스가 그대로 유지된다.
  • 간단히 말해서, "terraform state rm"은 Terraform의 상태 관리에서만 리소스를 제거할 뿐, 실제 리소스 자체를 클라우드 환경에서 제거하지 않는다. 이 명령어는 주로 Terraform이 더 이상 특정 리소스를 관리하지 않아야 할 때 사용된다.

 

 

생성한 EC2를 파괴시켜 보자 👇🏻👇🏻

 

테라폼(Terraform) 사용 가이드 4: 생성된 AWS EC2 인스턴스 파괴하기

테라폼을 사용하여 생성한 EC2 인스턴스를 파괴하는 방법을 알아보자 📌 서론 이번 포스트에서는 terraform으로 생성했던 EC2 인스턴스를 제거해볼 예정이다. 이를 위해서는 테라폼을 통해 만든 EC2

curiousjinan.tistory.com

이 포스트는 Team chillwave에서 사이드 프로젝트 중 적용했던 부분을 다시 공부하며 기록한 것입니다.
시간이 괜찮다면 팀원 '평양냉면7 '님의 블로그도 한번 봐주세요 :)

 

하다보니 재미있는 개발

하다 보니 재미있는 개발에 빠져있는 중입니다. 문의사항: ysoil8811@gmail.com

yijoon009.tistory.com

 

반응형

'DevOps > 테라폼(Terraform)' 카테고리의 다른 글

테라폼(Terraform) 사용 가이드 6: 테라폼으로 IAM 정책 생성/관리하기  (1) 2023.12.05
테라폼(Terraform) 사용 가이드 5: variable/output(입출력 변수) 사용하기  (1) 2023.12.05
테라폼(Terraform) 사용 가이드 4: 생성된 AWS EC2 인스턴스 파괴하기  (0) 2023.12.05
테라폼(Terraform) 사용 가이드 2:MacOS에 테라폼 설치하기  (1) 2023.12.04
테라폼(Terraform) 사용 가이드 1: 테라폼이란?  (1) 2023.12.04
'DevOps/테라폼(Terraform)' 카테고리의 다른 글
  • 테라폼(Terraform) 사용 가이드 5: variable/output(입출력 변수) 사용하기
  • 테라폼(Terraform) 사용 가이드 4: 생성된 AWS EC2 인스턴스 파괴하기
  • 테라폼(Terraform) 사용 가이드 2:MacOS에 테라폼 설치하기
  • 테라폼(Terraform) 사용 가이드 1: 테라폼이란?
Stark97
Stark97
소통 및 문의: dig04059@gmail.com (편하게 연락주세요!) 링크드인 소통이나 커피챗도 환영합니다!
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15)
      • DDD (12)
      • gRPC (9)
      • Apache Kafka (19)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 채팅 서비스 (1)
      • AI 탐험대 (1)
      • 팀 Pulse (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
테라폼(Terraform) 사용 가이드 3: EC2 생성하기
상단으로

티스토리툴바