본문 바로가기
카테고리 없음

Terraform - AWS EC2 Instance 생성

by 홍띠 2023. 12. 10.

Work 디렉토리에 main.tf 생성

learn-terraform-aws-instance
        └── main.tf

코드 작성

terraform {
    required_version = ">= 1.3.7"
    required_providers {
      aws = {
        source = "hashicorp/aws"
        version = "~> 4.51.0" 
      }
    }
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "test-server" {
  ami = "ami-0dbc3d7bc646e8516"
  instance_type = "t2.micro"

  tags = {
    Name = "terraform-test-server"
    Owner = "jy"
  }
}
  • Terraform 구문
    • Terraform 세팅을 설정
    • required_providers에서 gcp, aws, azure등 원하는 provider를 설정
    • (테라폼에서는 기본으로 Terraform Registry의 provider를 제공한다.)
    • required_providers에서 source와 version 설정 가능
    • required_version으로 테라폼 버전 설정 가능
  • Providers 구문
    • terraform block에서 설정한 provider에 대한 설정
    • 클라우드의 경우 region등 설정이 가능
    • 여러개의 provider 설정 블록을 둘 수 있고, 각기 다른 provider를 설정 가능
    • 하나의 provider에 여러개의 설정 가능
# "aws_" 리소스에서 기본으로 사용하는 설정. it can be referenced as `aws`.
provider "aws" {
  region = "us-east-1"
}

# 다른 region 설정. reference this as `aws.west`.
# 추가 provider에는 반드시 alias 설정해야함
provider "aws" {
  alias  = "west"
  region = "us-west-2"
}
  • Resources 구문
    • terraform을 이용해서 정의할 Infrastructure 구성
    • resource type과resource name을 구문 시작 전에 정의
    • resource "aws_instance" "test-server" {}
    • resource type은 각 provider에서 제공
    • 구문 안에서는 리소스타입에 따른 상세 정보 설정

배포

1. 테라폼 init

terraform init
  • 설정파일이 있는 디렉토리에서 명령어 실행
  • hidden 디렉토리에 provider를 다운받고 설치 (.terraform/)
  • .terraform.lock.hcl Lock 파일 생성하여 provider version을 관리

2. 테라폼 포맷 적용

terraform fmt
  • 가독성과 일관성을 위해 테라폼 포맷에 맞지 않는 부분을 자동으로 변경
  • 명령어 실행 후 출력되는 파일이 변경된 파일
  • 아무것도 출력되지 않는다면, 이미 포맷이 잘 맞춰져 있어 변경파일이 없는 것

3. 테라폼 유효성 검사

terraform validate
  • 문법과 구성이 올바르게 되어 있는지 확인
  • terraform plan 과는 달리, provider API의 실행 성공여부를 고려하지는 않음

4. Infrastructure 생성

terraform apply
  • terraform plan 이 내부적으로 자동 실행 됨
  • plan 결과를 통해, 실제 Provider를 통해 배포될 내용을 확인
  • plan결과를 확인하고, “yes”를 입력하면 배포 됨