참고
기본개념
SSH
Terraform 기본구성 요소
NOTE
provioder
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
Bash
복사
•
Terraform으로 생성할 Infra의 종류
•
AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.
resource
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16" # cidr_block 외에도 수많은 인자가 존재한다
}
Bash
복사
AWS VPC를 생성하는 코드
•
Terraform으로 실제로 생성할 인프라 자원
•
원하는 형태로 파일 이름을 사용한다.
state
{
"version": 4,
"terraform_version": "0.12.24",
"serial": 3,
"lineage": "3c77xxxx-2de4-7736-1447-038974a3c187",
"outputs": {},
"resources": [
{...},
{...}
]
}
Bash
복사
•
Terraform을 통해 생성한 자원의 상태(terraform.tfstate 파일명)
•
현재 인프라의 상태를 나타내는건 아니다!
◦
Terraform 명령어를 사용해서 생성한 resource들의 결과물, 실제 인프라 상태가 아님!
◦
state파일과 현재 인프라의 상태를 동일하게 유지하는것이 중요하다!
•
state는 원격 저장소의 backend에 저장될 수 있다.
output
resource "aws_vpc" "default" {
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
}
Bash
복사
vpc id 나 cidr값을 참조해서 vpc_id 라는 변수를 state 파일로 저장하는 것
•
Terraform으로 만든 자원을 변수 형태로 state파일에 저장하는 것
backend
•
terraform 상태를 저장할 공간을 지정하는 부분
◦
생성된 output, 즉 variable로 생성된 state file을 저장하는 공간
•
backend를 사용하면 현재 배포된 최신 상태를 외부에 저장하기 때문에 협업이 가능해진다.
module
module "vpc" {
source = ":./_modulesvpc"
cidr_block = "1.0.0.0/16"
}
Bash
복사
•
공통적으로 활용할 수 있는 code를 말 그대로 module 형태로 정의하는 것
◦
재사용하는데 강점이 있음!
•
일종의 함수라고 생각
◦
여러 terraform code를 변수만 바꾸어서 하나의 module로 생성하는 것을 의미한다.