Terraform 구성요소
- provider
테라폼으로 생성할 인프라의 종류를 의미한다. - resource
테라폼으로 실제로 생성할 인프라 자원을 의미한다. - state
테라폼을 통해 생성한 자원의 상태를 의미한다. - output
테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미한다. - module
공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미한다. - remote
다른 경로의 state를 참조하는 것을 말한다. output 변수를 불러올 때 주로 사용한다.
Terraform provider
# 보통 provider.tf 로 파일을 생성한다.
# AWS Provider
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
Provider 안에서 다양한 Arguments를 가진다.
AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.
Terraform resource
# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용한다.
# Create a VPC
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
# cidr_block 이외에도 수많은 인자가 존재한다.
}
테라폼으로 VPC를 생성하는 코드다.
VPC 역시 다양한 Argument와 다른 구성 요소가 존재한다.
Terrafrom state
# terraform.tfstate 라는 파일명을 가집니다.
{
"version": 4,
"terraform_version": "0.12.24",
"serial": 3,
"lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
"outputs": {},
"resources": [
{...},
{...},
]
}
테라폼 state 입니다.
현재 인프라의 상태를 의미하는 것은 아닙니다.
state 는 원격 저장소인 “backend”에도 저장될 수 있습니다.
→ state 파일과 현재 인프라의 상태를 똑같이 유지하는게 키 포인트
Terraform output
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
# cidr_block 이외에도 수많은 인자가 존재한다.
}
output "vpc_id" {
value = aws_vpc.default.id
}
output "cidr_block" {
value = aws_vpc.default.cidr_block
}
테라폼 output 입니다.
remote를 사용해서 재사용을 할 수 있다.
Terraform module
module "vpc" {
source = "../_modules/vpc"
cidr_block = "10.0.0.0/16"
}
테라폼 module 입니다.
module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용한다.
Terraform remote
# remote 는 원격 참조 개념으로 이해하면 좋다.
data "terraform_remote_state" "vpc" {
backend = "remote"
config = {
bucket = "terraform-s3-bucket"
region = "ap-northeast-2"
key = "terraform/vpc/terraform.tfstate"
}
}
테라폼 remote 입니다.
remote state 는 key 값에 명시한 state 에서 변수를 가져온다.
Terraform 기본 명령어
- init
테라폼 명령어 사용을 위해 각종 설정을 진행한다. - plan
테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다. - apply
테라폼 코드로 실제 인프라를 생성하는 명령어 - import
이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어 - state
테라폼 state를 다루는 명령어. 하위 명령어로 mv, push와 같은 명령어가 있다. - destroy
생성된 자원들을 state 파일 기준으로 모두 삭제하는 명령어
Process
- Init
- 작성한 코드에서 init 명령어를 입력한다.
- 테라폼의 다른 명령어들을 위한 설정을 진행한다.
- 내부적으로는 provider와 state, module 설정 등이 있다.
- Plan
- 실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어
- 가장 많이 쓰이는 명령어
- 기본적으로 plan에 문제가 없어야 apply에 문제가 없을 확률이 높다.
- Apply
- 실제로 작성한 코드로 명령어를 생성하는 명령어
- 실제 인프라에 영향을 끼치는 명령어이므로 주의 깊게 실행을 해야한다.
'Terraform > AWS and 테라폼: Infrastructure as' 카테고리의 다른 글
[AWS and 테라폼: Infrastructure as Code] Zsh 및 Oh-my-zsh 설치 (0) | 2024.01.19 |
---|---|
[AWS and 테라폼: Infrastructure as Code] AWS EC2 (0) | 2024.01.19 |
[AWS and 테라폼: Infrastructure as Code] DevOps 엔지니어의 역할 (0) | 2024.01.19 |
[AWS and 테라폼: Infrastructure as Code] DevOps의 기본적 이해 (0) | 2024.01.19 |