본문 바로가기
INFRA/Operation

테라폼 아키텍쳐 구성 및 워크플로우

by BTC_Dana 2022. 7. 11.

안녕하세요! 하씨가문의 영광입니다!
오늘은 Terraform 의 워크플로우와 아키텍처 구조에 대해서 자세하게 알아보려고 합니다!
이전에는 간단하게 살펴보았는데요! 이번시간에는 조금 더 집중적으로 다뤄볼까 합니다!
그럼 출발해볼까요!
Don't have a good day, Have a great day! 

목차

  1. Terraform 워크플로 기본 개념
  2. Terraform 아키텍처 구조
  3. Terraform 명령어 시트

Terraform 워크플로 기본 개념

Terraform의 기본적인 순서

  1. 먼저 프로바이더에 대한 코드를 작성하고
  2. 초기화를 한 다음
  3. 리소스에 대한 코드를 작성해서 계획을 수립하고
  4. 계획된 리소스에 문제가 없다면 적용을 시도합니다.
    • 만약 적용에 실패한다면 계획으로 돌아와서 문제가 발생한 곳을 캐치하여 수정한 뒤 적용을 시도합니다.
  5. 마지막으로 리소스 적용까지 끝을 냈다면 사용하지 않는 리소스파괴하는 절차를 가지고 있습니다.

< 구성 요소 >

Write

  • 코드에 대한 변경 사항을 생성합니다.

Init

  • 코드에 언급된 요구 사항을 다운로드하기 위해 코드를 초기화하는 것입니다.
  • 플로그인 설치, 하위 모듈 설치, 백엔드 초기화
  • < $ terraform init >

Plan

  • 변경 사항을 검토하고 단순히 수락 할지 여부선택합니다.
  • 상태가 최신인지 확인하기 위해 기존 원격 개체의 현재 상태를 읽습니다.
  • 현재 상태를 이전 상태비교하여 차이점이 있는지 확인합니다.
  • < $ terraform plan >

Apply

  • 변경 사항을 수락하고 실제 인프라에 적용합니다.
  • 생성된 계획을 실행하여 현재 상태와 원하는 상태를 비교하여 리소스가 생성되거나 소멸됩니다.
  • < $ terraform apply >

Destroy

  • 생성된 모든 인프라를 파괴하는 것입니다.
  • < $ terraform destroy >
참조 문서 : https://k21academy.com/terraform-iac/terraform-workflow-and-its-use-case/

 

Terraform 아키텍처 구조

 

Terraform Core

  • 코어가 작동하려면 두개의 입력소스가 필요합니다.
  • 입력소스에는 테라폼 구성파일상태파일이 있습니다.
  • 구성 파일코어에 의해 분석되고 인프라를 생성, 업데이트 또는 파괴하는 작업 지점을 결정하기 위해 인프라의 현재상태를 보유하는 상태파일과 비교됩니다. 구성파일에는 원하는 인프라 상태가 포함되어 있습니다.

Providers

  • 제공자라는 플러그인을 사용하여 클라우드 제공자, Saas 제공자기타 API와 상호 작용합니다.

 

참조 문서 : https://faun.pub/terraform-introduction-what-is-terraform-part-1-6b320bb05fa7

 

Terraform 구성 파일을 통해 인프라 상태가 결정되면 Core는 Terraform 플러그인을 통해 클라우드 공급자와 상호 작용하여 원하는 인프라를 생성, 업데이트 또는 파괴합니다.

 

 

Terraform 명령어 정리
Command Descriptions
terraform -install-autocomplete 설정 탭 자동 완성, 다시 로그인 필요
terraform fmt HCL 표준에 따른 형식 코드
terraform validate 구문에 대한 코드 유효성 검사
terraform validate -backend=false validate 코드 건너뛰기 백엔드 유효성 검사
terraform init 디렉토리 초기화, 공급자 풀다운
terraform init -get-plugins=false 디렉토리 초기화, 플러그인 다운로드 안 함
terraform init -verify-plugins=false initialize 디렉토리, Hashicorp 서명용 플러그인을 확인하지 않음
Command Descriptions
terraform apply --auto-approve "예"를 입력하라는 메시지 없이 변경 사항 적용
terraform destroy --auto-approve "예"를 묻는 메시지 없이 #destroy/cleanup 배포
terraform plan -out plan.out 전개 계획을 plan.out에 출력
terraform apply plan.out plan.out 계획 파일을 사용하여 인프라 배포
terraform plan -destroy 파괴 계획을 출력
terraform apply -target=aws_instance.my_ec2 대상 리소스에 변경 사항만 적용/배포
terraform state pull > terraform.tfstate 테라폼 상태를 파일로 다운로드 및 출력
terraform state mv aws_iam_role.my_ssm_role module.custom_module 상태를 통해 추적된 리소스를 다른 모듈로 이동
terraform state replace-provider hashicorp/aws registry.custom.com/aws 기존 공급자를 다른 공급자로 교체
Command Descriptions
terraform output 코드에 명시된 대로 모든 출력을 나열합니다.
terraform output -json JSON 형식의 모든 출력 나열
terraform output instance_public_ip 선언된 특정 출력을 나열합니다.
terraform version display Terraform 바이너리 버전
echo '1 + 5' | terraform console Terraform 콘솔에는 대화형 CLI
terraform graph | dot -Tpng > graph.png 구성/코드에서 Terraform 리소스 간의 관계 및 종속성을 보여주는 PNG 다이어그램을 생성
terraform taint aws_instance.my_ec taints 다음 적용 시 다시 생성할 리소스
terraform force-unlock LOCK_ID 잠긴 상태 파일을 강제로 잠금 해제, 상태 파일을 미리 잠글 때 제공되는 LOCK_ID
terraform login Terraform 클라우드용 API 토큰 획득 및 저장

 

이것으로 Terraform의 워크플로우와 명령어에 대해서 심층적으로 알아보았습니다.
리소스를 만드는 것도 중요하지만 어떻게 흘러가는 지를 파악하고

생성하면 추후에 문제가 생기더라도 바로바로 해결할 수 있는 부분이 크다고 생각합니다.
오늘도 읽어주셔서 감사합니다:)

 

'INFRA > Operation' 카테고리의 다른 글

앤서블 아키텍처 구성 및 프로세스  (0) 2022.07.21
쿠버네티스 STEP2 Pod & Deployment  (0) 2022.07.20
IaC 도구 성장 가능성 및 전망  (0) 2022.07.06
What is HashiCorp?  (0) 2022.06.28
Airflow  (0) 2022.06.24

댓글