Fairy ' s
[DevOps] Infrastructure as Code / Terraform 본문
Infrastructure as Code, 즉 코드로써의 인프라는 인프라를 이루는 서버, 미들웨어 그리고 서비스 등, 인프라 구성요소들을 코드를 통해 구축하는 것이다. IaC는 코드로써의 장점, 즉 작성용이성, 재사용성, 유지보수 등의 장점을 가진다.
Terraform by Hashicorp
테라폼은 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구로써, 문법이 쉬워 비교적 다루기 쉽고 사용자가 매우 많아 참고할 수 있는 예제가 많다. AWS, Azure, GCP 같은 퍼블릭 클라우드 뿐 아니라 다양한 서비스들을 지원한다.
구성 요소 | |
provider | 테라폼으로 생성할 인프라의 종류 |
resource | 테라폼으로 실제 생성할 인프라 자원 |
state | 테라폼을 통해 생성한 자원의 상태 |
output | 테라폼으로 만든 자원을 변수 형태로 state 파일에 저장하는 것 |
module | 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것. 재사용에 강점이 있다. |
remote | 다른 경로의 state를 참조하는 것. output 변수를 불러올 때 주로 사용 |
provider : 다양한 Arguments를 가지며, AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
resource
resource "aws_vpc" "example" {
cide_block = "10.0.0.0/16"
}
VPC를 생성하는 예시이다. 리소스를 생성할 때 이 외에도 다양한 Argument와 다른 구성요소가 존재한다.
"aws_vpc" 부분은 어떠한 리소스를 만들지에 대한 명시이고, "example" 부분은 실제 vpc에 지정할 이름이다.
state : 테라폼으로 작성된 코드를 실행하게 되면 생성되는 파일이다.
# terraform.tfstate 라는 파일명을 가진다.
{
"version": 4,
"terraform_version": "0.12.24",
"serial": 3,
"lineage": "..."
"outputs": {},
"resource": [
{...},
{...}
]
}
현재 인프라의 상태를 의미하는 것은 아니며, state는 원격 저장소인 'backend' 에도 저장될 수 있다.
output : 리소스의 인자들을 참조해서 특정 형태의 변수를 만들고, output을 이용해 state 파일로 저장한다. 리모트를 사용해 재사용할 수 있다.
resource "aws_vpc" "example" {
cide_block = "10.0.0.0/16"
}
output "vpc_id" {
value = aws_vpc.example.id
}
output "cidr_block" {
value = aws_vpc.example.cidr_block
}
module : 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용된다.
module "vpc" {
source = "../_modules/vpc"
cidr_block = "10.0.0.0/16"
}
remote : 원격 참조 개념, remote state는 key 값에 명시한 state에서 output으로 저장된 변수를 가져온다.
data "terraform_remote_state" "vpc" {
backend = "remote"
config = {
bucket = "terraform-s3-bucket"
region = "ap-northeast-2"
key = "terraform/vpc/terraform.tfstate"
}
}
기본 명령어 (Init → Plan → Apply)
terraform init
# 테라폼 명령어 사용을 위해 각종 설정 진행
terraform plan
# 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과
terraform apply
# 테라폼 코드로 실제 인프라 생성
terraform import
# 이미 만들어진 자원을 테라폼 state 파일로 옮김
terraform state
# 테라폼 state를 다루는 명령어, 하위 명령어로 mv, push가 있다.
terraform destroy
# 생성된 자원들을 state 파일 기준으로 모두 삭제
'Study > DevOps' 카테고리의 다른 글
[DevOps] DevOps란? (0) | 2023.07.16 |
---|