Introduction

Providers

  1. 해당 링크에서 Terraform Provider 목록 확인

  2. 해당 링크에서 AWS Provider 설정 확인

  3. Terraform 코드를 저장할 디렉토리 생성

    mkdir terraform && cd terraform
  4. Terraform 코드를 작성할 파일 생성

    touch main.tf
  5. 아래의 코드 블록을 추가하고 저장

    terraform {
      required_providers {
        aws = {
          source = "hashicorp/aws"
          version = "5.45.0"
        }
      }
    }
  6. Provider 다운로드

    terraform init
  7. 생성된 디렉토리 및 파일 확인

    find .
  8. Dependency Lock 파일 확인

    cat .terraform.lock.hcl
  9. Dependency Lock 파일 복제본 생성

    cp .terraform.lock.hcl .terraform.lock.hcl.copy
  10. 다수의 개발자가 다양한 플랫폼에서 협업한다고 가정하고 Dependency Lock 파일 업데이트

    terraform providers lock \
    --platform=linux_arm64 \
    --platform=linux_amd64 \
    --platform=darwin_amd64 \
    --platform=windows_amd64
  11. Dependency Lock 파일의 변경사항 확인

    diff .terraform.lock.hcl.copy .terraform.lock.hcl -y
  12. 복사한 Dependency Lock 파일 삭제

    rm .terraform.lock.hcl.copy
  13. 해당 링크를 통해서 Terraform 코드에 사용되는 .gitignore 파일 확인

리소스 생성

  1. 해당 링크를 통해서 EC2 인스턴스 생성에 사용되는 코드 블록 확인

  2. Terraform 코드에 아래의 코드블록을 추가하고 저장

    resource "aws_instance" "web" {}
  3. 인프라 변경 사항 확인

    terraform plan
  4. 위의 링크를 통해서 EC2 인스턴스 생성시 요구되는 변수 확인

  5. 위에서 추가한 코드 블록을 아래와 같이 수정하고 저장

    resource "aws_instance" "web" {
      ami = "ami-0c031a79ffb01a803"
      instance_type = "t2.micro"
    }
  6. 인프라 변경 사항 확인

    terraform plan
  7. 인프라 변경 사항 반영

    terraform apply
  8. 해당 링크를 통해서 AWS Provider에 AWS 자격증명을 설정하는 방법 확인

  9. AWS 자격 증명 설정

    aws configure
  10. AWS API를 호출하는 AWS 자격증명 확인

    aws sts get-caller-identity
  11. 인프라 변경 사항 반영

    terraform apply
  12. AWS 자격증명 재설정 - region에 ap-northeast-2 입력

    aws configure
  13. AWS CLI 설정 파일 확인

    cat ~/.aws/config
  14. 인프라 변경 사항 반영

    terraform apply
  15. 해당 링크를 통해서 aws_instance 리소스가 제공하는 속성 정보 확인

  16. Terraform 코드에 아래의 코드블록을 추가하고 저장

    output "web_instance_id" {
      value = aws_instance.web.id
    }
  17. 인프라 변경 사항 확인

    terraform plan
  18. Terraform 상태 파일 확인

    cat terraform.tfstate
  19. 인프라 변경 사항 반영

    terraform apply --auto-approve
  20. Terraform 상태 파일의 변경 사항 확인

    diff terraform.tfstate.backup terraform.tfstate -y
  21. EC2 인스턴스가 실제로 생성되었는지 확인

    aws ec2 describe-instances --instance-ids \
    $(terraform output --raw web_instance_id) --no-cli-pager
  22. 해당 링크를 통해서 EC2 인스턴스를 생성하는 AWS Provider 소스코드 확인

  23. 해당 링크를 통해서 EC2 인스턴스 생성에 사용되는 AWS API 확인

  24. CloudTrail을 통해서 RunInstances API가 호출되었는지 확인

    aws cloudtrail lookup-events \
    --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances \
    --query 'Events[0]' \
    --no-cli-pager
  25. AWS CLI를 통해서 Terraform을 통해서 생성된 리소스 수정

    {
      curl -sLO "https://raw.githubusercontent.com/awsdocs/aws-doc-sdk-examples/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/change_ec2_instance_type.sh"
      curl -sLO "https://raw.githubusercontent.com/awsdocs/aws-doc-sdk-examples/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/awsdocs_general.sh"
      source change_ec2_instance_type.sh
      change_ec2_instance_type -i $(terraform output --raw web_instance_id) -t t2.small -r -f -v
      rm change_ec2_instance_type.sh
      rm awsdocs_general.sh
    }
  26. 인스턴스 타입이 변경되었는지 확인

    aws ec2 describe-instances --instance-ids \
    $(terraform output --raw web_instance_id) \
    --query 'Reservations[0].Instances[0].InstanceType' \
    --output text
  27. 수동으로 수정한 인프라 변경 사항을 감지하는지 확인

    terraform plan
  28. Terraform 코드에 맞게 리소스 수정

    terraform apply --auto-approve
  29. 인스턴스 타입이 변경되었는지 확인

    aws ec2 describe-instances --instance-ids \
    $(terraform output --raw web_instance_id) \
    --query 'Reservations[0].Instances[0].InstanceType' \
    --output text
  30. 리소스 삭제

    terraform destroy --auto-approve
  31. main.tf 파일에서 아래의 코드 블록 삭제

    terraform {
      required_providers {
        aws = {
          source = "hashicorp/aws"
          version = "5.45.0"
        }
      }
    }
  32. main.tf 파일을 제외한 모든 파일 삭제

    {
      find . ! -name 'main.tf' -type f -exec rm -f {} +
      find . -type d -exec rm -rf {} +
    }
  33. Terraform 환경 생성

    terraform init
  34. 해당 문서를 통해서 Terraform 플러인 설치 동작 원리 확인

  35. 인프라 변경 사항 확인

    terraform plan
  36. 코드 삭제

    cd ~/environment && rm -rf terraform

Last updated