안녕하세요! 하씨가문의 영광입니다!
오늘은 Terraform 의 워크플로우와 아키텍처 구조에 대해서 자세하게 알아보려고 합니다!
이전에는 간단하게 살펴보았는데요! 이번시간에는 조금 더 집중적으로 다뤄볼까 합니다!
그럼 출발해볼까요!
Don't have a good day, Have a great day!
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/001.gif)
▶ 목차
Terraform 워크플로 기본 개념
Terraform의 기본적인 순서는
- 먼저 프로바이더에 대한 코드를 작성하고
- 초기화를 한 다음
- 리소스에 대한 코드를 작성해서 계획을 수립하고
- 계획된 리소스에 문제가 없다면 적용을 시도합니다.
- 만약 적용에 실패한다면 계획으로 돌아와서 문제가 발생한 곳을 캐치하여 수정한 뒤 적용을 시도합니다.
- 마지막으로 리소스 적용까지 끝을 냈다면 사용하지 않는 리소스는 파괴하는 절차를 가지고 있습니다.
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/014.gif)
< 구성 요소 >
Write
- 코드에 대한 변경 사항을 생성합니다.
Init
- 코드에 언급된 요구 사항을 다운로드하기 위해 코드를 초기화하는 것입니다.
- 플로그인 설치, 하위 모듈 설치, 백엔드 초기화
- < $ terraform init >
Plan
- 변경 사항을 검토하고 단순히 수락 할지 여부를 선택합니다.
- 상태가 최신인지 확인하기 위해 기존 원격 개체의 현재 상태를 읽습니다.
- 현재 상태를 이전 상태와 비교하여 차이점이 있는지 확인합니다.
- < $ terraform plan >
Apply
- 변경 사항을 수락하고 실제 인프라에 적용합니다.
- 생성된 계획을 실행하여 현재 상태와 원하는 상태를 비교하여 리소스가 생성되거나 소멸됩니다.
- < $ terraform apply >
Destroy
- 생성된 모든 인프라를 파괴하는 것입니다.
- < $ terraform destroy >
참조 문서 : https://k21academy.com/terraform-iac/terraform-workflow-and-its-use-case/
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif)
Terraform 아키텍처 구조
Terraform Core
- 코어가 작동하려면 두개의 입력소스가 필요합니다.
- 입력소스에는 테라폼 구성파일과 상태파일이 있습니다.
- 구성 파일은 코어에 의해 분석되고 인프라를 생성, 업데이트 또는 파괴하는 작업 지점을 결정하기 위해 인프라의 현재상태를 보유하는 상태파일과 비교됩니다. 구성파일에는 원하는 인프라 상태가 포함되어 있습니다.
Providers
- 제공자라는 플러그인을 사용하여 클라우드 제공자, Saas 제공자 및 기타 API와 상호 작용합니다.
참조 문서 : https://faun.pub/terraform-introduction-what-is-terraform-part-1-6b320bb05fa7
Terraform 구성 파일을 통해 인프라 상태가 결정되면 Core는 Terraform 플러그인을 통해 클라우드 공급자와 상호 작용하여 원하는 인프라를 생성, 업데이트 또는 파괴합니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/028.gif)
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 토큰 획득 및 저장 |
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/043.gif)
이것으로 Terraform의 워크플로우와 명령어에 대해서 심층적으로 알아보았습니다.
리소스를 만드는 것도 중요하지만 어떻게 흘러가는 지를 파악하고
생성하면 추후에 문제가 생기더라도 바로바로 해결할 수 있는 부분이 크다고 생각합니다.
오늘도 읽어주셔서 감사합니다:)
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/032.gif)
'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 |
댓글