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”를 입력하면 배포 됨