Terraform과 DevOps 개념 및 기초

hs·2023년 2월 1일
0

Terraform 해보기

목록 보기
1/2
post-thumbnail

DevOps의 기본적 이해

5가지 철학

문화(Culture)

  • 올바른 기업문화를 가져나가는 것

자동화(Automation)

  • 업무를 자동화
  • 변경에 유연하고 탄력적인 서비스를 구축

측정(Measurement)

  • 변경 사항을 항상 측정, 예측

공유(Sharing)

  • 언제든 접근 가능한 투명한 데이터
  • 문제를 함께 해결 (open 되어있어야함)

축적(File up & Pile up)

데브옵스는 어떤 요구사항을 효율적으로 만족시키기 위하여, 일을 자동화하며 변경사항 지표들을 측정하고, 공유하고, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철학, 방법론, 기술

DevOps 엔지니어

올바른 DevOps 문화를 위해 서비스 혹은 S/W LifeCycle에서 반복적인 일들을 자동화하고, 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람

  • DevOps 엔지니어의 역량에 따라 차이가 큰 편임
  • 파이프라인 구성, 빌드 자동화

Infrastructure as Code (코드로써의 인프라)

Infrastructure as Code, 즉 코드로써의 인프라는 인프라를 이루는 서버, 미들웨어 그리고 서비스 등 인프라 구성요소들을 코드를 통해 구축하는 것.

IaC는 코드로써의 장점, 즉 작성용이성, 재사용성, 유지보수 등의 장점을 가진다.

Terraform

.tf 의 파일 형식을 가짐 (확장자)

Terraform구성요소

  • provider - 테라폼으로 생성할 인프라의 종류를 의미
  • resource - 테라폼으로 실제로 생성할 인프라 자원을 의미
  • state - 테라폼을 통해 생성한 자원의 상태를 의미
  • output - 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미
  • module - 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미
  • remote - 다른 경로의 state를 참조하는 것을 말한다. output변수를 불러올 때 주로 사용

Terraform provider

provider "aws" {
  region = "ap-northeast-2"
  version = "~> 3.0"

}

provider 안에서 다양한 Arguments를 가진다.

AWS resource를 다루기 위한 파일들을 다운로드 하는 역활을 합니다. (aws-sdk)

Terraform resource

# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용
# Create a VPC
resource "aws_vpc(리소스 명)" "실제 이름" {
  cidr_block = "10.0.0.0/16"
  ...
}

테라폼으로 VPC를 생성하는 코드 일부

Terraform state

# terrafrom.tfstate 라는 파일명을 가진다.
{
  "version": 4,
  "terrafrom_version": "0.12.24",
  "serial": 3,
  "lineage": "3c77XXXX-2de4-7736-0447-038974a2c127",
  "outputs": {},
  "resources": [
    {...},
    {...},
  ]
}

테라폼으로 작성된 코드를 실행하게 되면 생성되는 파일(package.json 같은?)

현재 인프라의 실제 상태를 의미하는 것이 아님

그러므로 가장 중요한 것은 현재 인프라 상태와 state를 똑같이 유지하는 것이다.

현업에서는 원격 저장소인 ‘backend’에 저장하여 사용

Terraform output

resource "aws_vpc(리소스 명)" "실제 이름" {
  cidr_block = "10.0.0.0/16"
  ...
}

output "vpc_id" {
  value = aws_vpc.default.id
}

output "cidr_block" {
  value = aws_vpc.default.cidr_block
}

resource를 통해 무언가를 생성하였을 때 나오는 id, cidr 값 등을 참조해서 변수(ex. vpc_id, cidr_block)를 통해 state 파일에 저장을 하는 것

리모트를 통해 사용가능

Terraform module

module "vpc" {
  source = "../_module/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.tfstaqte"
  }
}

state 파일에서 output으로 저장된 변수를 가져오는 것

Terraform 기본 명령어

Process

Init - 작성한 코드에서 init 명령어를 입력 - 테라폼의 다른 명령어들을 위한 설정 진행

Plan - 실제로 작성한 테라폼 코드가 어떻게 만들어질지 예측 - 가장 많이 쓰이는 명령어로 plan에서 문제가 없어야 apply도 문제가 없을 확률이 높다. ⇒ 습관화

Apply - 실제로 작성한 코드로 명령어를 생성하는 명령어 - 실제 인프라에 영향을 끼치는 명령어로 주의가 필요

profile
무엇이든 끝까지 보람차게

0개의 댓글