Infrastructure as Code(IaC), 코드로써의 인프라
- 인프라를 이루는 서버, 미들웨어, 서비스 등을 인프라 구성요소들을 코드를 통해 구축하는 것
테라폼으로 생성할 인프라의 종류를 의미
# provider.tf
# AWS Provider
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
Provider 안에 다양한 Arguments를 가지며, AWS resource를 (e.g. SDK 등)을 다운로드하는 역할
테라폼으로 실제로 생성할 인프라 자원을 의미
# main.tf, vpc.tf 등
# Create a VPC
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
...
테라폼으로 VPC를 생성하는 코드이며, VPC에도 다양한 Argument와 다른 구성요소가 존재한다.
테라폼을 통해 생성한 자원의 상태를 의미
- 테라폼을 실행하면 생성되는 파일
# terraform.tfstate의 파일명
{
"version": 4,
"terraform_version": "0.12.24"
"serial": 3,
"lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
"outputs": {},
"resources": [
{...},
{...}
]
}
테라폼의 결과값 즉, state이며, 현재 인프라의 상태를 의미하진 않는다.
state는 원격 저장소인 backend에도 저장될 수 있다.
테라폼으로 만든 자월을 변수 형태로
state에 저장하는 것을 의미
resource "aws_vpc" "default" {
cidr_block = "10.0.0.0/16"
...
}
output "vpc_id" {
value = aws_vpc.default.id
}
output "cidr_block" {
value = aws_vpc.default.cidr_block
}
테라폼의 output이며, VPC 역시 다양한 Arguments로 구성
remote를 사용하여 재사용공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미
module "vpc" {
source = "../_modules/vpc"
cidr_block = "10.0.0.0/16"
}
module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용
다른 경로의
state를 참조하는 것을 말한다.output변수를 불러올 때 주로 사용한다.
# remote는 원격 참조 개념
data "terraform_remote_state" "vpc" {
backend = "remote"
config = {
bucket = "terraform-s3-bucket"
region = "ap-northeast-2"
key = "terraform/vpc/terraform.tfstate"
}
}
remote state는 key값에 명시한 state애소 변수를 가져온다
init
- 테라폼 명령어 사용을 위해 각종 설정을 진행
- 최초의 테라폼 명령어를 실행할 때 쓰는 명령어
plan
- 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다.
- 실제로 가장 많이 쓰이는 명령어
apply
- 테라폼 코드로 실제 인프라를 생성하는 명령어
import
- 이미 만들어진 자원을 테라폼
state파일로 옮겨주는 명령어- 이미 만들어진 자원을 코드로 만들고 싶을 때 사용
state
- 테라폼
state를 다루는 명령어- 하위 명령어로
mv,push와 같은 명령어가 있다.- 자주 쓰이지는 않지만, 알아둬야하는 명령어
destroy
- 생성된 자원들
state파일 모두 삭제하는 명령어
init->plan->apply의 순서로 프로세스가 진행된다.
init
init 명령어를 입력provider와 state, module 설정 등이 있다.
plan
apply