본문 바로가기
DevOps

[T1014-이론] 2장 실행 환경 구성

by 서어켜엉 2024. 6. 14.
해당 내용은 cloudNet@ 팀의 가시다 님이 진행하는 테라폼 스터디 T101 4기에서 다룬 내용과 "테라폼으로 시작하는 IaC" (한빛미디어) 저서 내용을 정리한 것입니다.

 

1.  Terraform 실행 환경 구성 (macOS)

  • brew 를 사용하여 terraform 설치
brew install hashicorp/tap/terraform

terraform --version (잘 설치됐는지 확인)

 

  • IDE 설정
    Visual Studio Code(VSCode) mac 설치 및 Terraform 관련 Extension (HashiCorp에서 릴리즈한 HashiCorp HCL) 설치

 

2. 실습 (EC2 한대 배포하기)

  • AWS CLI 설치 및 자격증명
brew install awscli
aws configure

https://www.youtube.com/watch?v=9nBq6PxDvp4

위 강의에서 생성한 Free Tier 계정의 Access Key 와 Secret Access Key 입력

  • 작업 디렉토리 생성 및 이동
mkdir workspace
cd workspace
  • Amazon linux 2 최신 ami ID 찾기
aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2" "Name=state,Values=available" --query 'Images|sort_by(@, &CreationDate)[-1].[ImageId]' --output text
ami-0ebb3f23647161078

export AL2ID=ami-0ebb3f23647161078
  • 코드파일 작성
    • provider - Terraform 으로 정의할 Infrastructure의 Provider
    • resource - 실제로 정의할 인프라 자원의 속성을 정의
cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "$AL2ID"
  instance_type = "t2.micro"
}
EOT

VSCode 에서 main.tf 파일을 만들어서 <<EOT > EOT 사이에 있는 내용을 직접 입력해도 된다.

 

  • 코드 실행
terraform init
ls -al
tree .terraform

# plan 확인
terraform plan

# apply 실행
terraform apply
 Enter a value: yes 입력

# ec2 생성 확인 : aws 웹 관리 콘솔에서도 확인 - 서울 리전 선택
export AWS_PAGER=""
aws ec2 describe-instances --output table

 

  • EC2 태그 정보 수정
    위 파일 내용 수정, VSCode 에서 직접 편집해도 된다.
cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "$AL2ID"
  instance_type = "t2.micro"

  tags = {
    Name = "t101-study"
  }

}
EOT

 

  • 배포 실행
# plan 실행 시 아래와 같은 정보가 출력
terraform plan
# aws_instance.example will be updated in-place
  ~ resource "aws_instance" "example" {
        id                                   = "ami-0a0064415cdedc552"
      ~ tags                                 = {
          + "Name" = "t101-study"
        }
      ~ tags_all                             = {
          + "Name" = "t101-study"
        }
        # (29 unchanged attributes hidden)

        # (7 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

# apply 실행
terraform apply
 Enter a value: yes 입력

 

  • 배포한 EC2 삭제
# 리소스 삭제
terraform destroy
 Enter a value: yes 입력

# 또는
terraform destroy -auto-approve