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에서 아래의 코드를 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"
}
}
2. 테라폼 초기화 (init)
테라폼 초기화를 하는 이유
프로바이더 플러그인 설치
- Terraform 구성에 정의된 프로바이더(예: AWS, Google Cloud)에 대한 플러그인을 다운로드하고 설치한다. 이 플러그인들은 Terraform이 클라우드 서비스와 상호 작용하는 데 필요하다.
모듈 다운로드
- Terraform 코드에 사용된 모듈이 있으면 이를 다운로드하고 준비한다.
.terraform 디렉토리 생성
- 필요한 모든 파일과 설정을 저장하기 위한 .terraform 디렉토리를 생성한다.
상태 파일 준비
- 필요하다면 Terraform의 상태 관리를 위한 기본 설정을 구성한다.
테라폼 초기화 작업 진행
- 테라폼은 작성한 코드(main.tf)가 존재하는 디렉토리에서 Terraform 초기화 명령어를 입력해서 기동을 시작한다.
terraform init
- 명령어를 입력해서 성공하면 아래와 같이 "Terraform has been successfully initialized!" 라고 나온다.
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 인스턴스 확인하기
- AWS 웹 콘솔에 들어가서 방금 생성한 EC2가 잘 생성되었는지 확인한다.
5. 상태 검사 (show)
터미널에서 테라폼 상태를 확인
- Terraform 상태 확인 명령어를 입력한다.
terraform show
- 아래와 같이 동작중인 테라폼의 상황이 나온다.
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를 파괴시켜 보자 👇🏻👇🏻
이 포스트는 Team chillwave에서 사이드 프로젝트 중 적용했던 부분을 다시 공부하며 기록한 것입니다.
시간이 괜찮다면 팀원 '평양냉면7 '님의 블로그도 한번 봐주세요 :)
'AWS > 테라폼(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 |