[기본 명령어] Terraform 명령어

2024. 11. 26. 19:18Terraform/[인프런] 아키텍처와 함께하는 Terraform

1. terraform init

- Terraform 작업 디렉토리를 초기화하고 필요한 플러그인과 모듈을 다운로드한다.
- 프로젝트를 처음 설정하거나 Backend 설정을 변경할 때 사용한다.
* 사용 예시
terraform init

* 출력 결과
Initializing the backend...
# AWS Provider와 같은 필요한 플러그인을 다운로드한다.
Initializing provider plugins...
Terraform has been successfully initialized!

 

 

2. terraform validate

- Terraform 구성 파일의 문법형식이 올바른지 검증한다.
* 사용 예시
terraform validate

* 출력 결과 (성공)
Success! The configuration is valid.

* 출력 결과 (실패)
Error: Missing required argument
The argument "region" is required, but no definition was found.

 

 

3. terraform fmt

- Terraform 구성 파일의 포맷을 자동으로 정리한다.
- -recursive 옵션을 사용하면 서브 디렉토리까지 포함하여 모든 파일 포맷팅한다.
* 사용 예시
# 잘못된 들여쓰기나 공백을 정리하여 가독성을 개선한다.
terraform fmt

 

 

4. terraform plan

- Terraform 구성 파일현재 상태(state)비교하여 실행 계획을 미리 보여준다.
- -out=<파일명> 옵션을 사용하면 계획을 파일로 저장한다.
- add : 생성될 리소스 수
  change : 수정될 리소스 수
  destroy : 삭제될 리소스 수
* 사용 예시
# 현재 인프라 상태와 구성 파일의 차이를 확인한다.
terraform plan

* 출력 결과
Plan: 1 to add, 0 to change, 0 to destroy.

 

 

5. terraform apply

- 실행 계획대로 인프라를 실제로 적용한다.
- tfplan 옵션을 사용하면 저장된 계획을 실행한다.
* 사용 예시
# 계획을 적용하여 리소스를 생성, 수정, 삭제한다.
terraform apply
# 저장된 계획을 실행한다.
terraform apply tfplan

* 출력 결과
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

 

 

6. terraform destory

- 구성 파일에 정의된 모든 리소스를 삭제한다.
* 사용 예시
# 프로젝트에 정의된 모든 리소스를 삭제한다.
terraform destory

* 출력 결과
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources? Type 'yes' to continue.

 

 

7. terraform show

- 현재 상태(state) 파일이나 실행 계획의 내용을 표시한다.
* 사용 예시
# 현재 인프라 상태를 출력한다.
terraform show

* 출력 결과
aws_instance.example:
  id = i-0abc123456def7890
  ami = ami-12345678
  instance_type = t2.micro

 

 

8. terraform state

- Terraform state 파일을 직접 관리하거나 검사한다.
* 리소스 목록 확인
terraform state list

* 특정 리소스 세부 정보 확인
terraform state show aws_instance.example

 

 

9. terraform output

- Terraform 실행 후 출력 값을 표시한다.
* 사용 예시
# 모든 출력 값을 표시한다.
terraform output
# 특정 출력 값(instance_id)을 표시한다.
terraform output instance_id

 

 

10. terraform workspace

- Terraform 워크스페이스를 관리한다.
* 사용 예시
# 워크스페이스 목록 확인
terraform workspace list
# 워크스페이스 생성
terraform worksapce new dev
# 워크스페이스 전환
terraform workspace select dev

 

 

11. terraform import

- 기존 인프라를 Terraform state 파일에 가져온다.
* 사용 예시
# 기존 EC2 인스턴스(i-0abc123456def7890)를 Terraform에서 관리하도록 가져온다.
terraform import aws_instance.example i-0abc123456def7890

 

 

12. terraform graph

- Terraform 리소스 간의 의존성을 그래프로 시각화한다.
* 사용 예시
# 그래프를 .png 이미지 파일로 저장한다.
terraform graph | dot -Tpng > graph.png

 

 

13. terraform refresh

- 실제 인프라 상태와 Terraform의 state 파일을 동기화한다.
- 실제 환경을 읽어와 state 파일최신 상태로 업데이트한다.
* 사용 예시
terraform refresh

* 출력 결과
# EC2 인스턴스 태그를 AWS 콘솔에서 수동 변경한 경우
# refresh를 실행하면 태그 변경 사항이 state 파일에 적용된다.
Refreshing Terraform state in-memory prior to plan...
aws_instance.example: Refreshing state... [id=i-0abc123456def7890]

 

 

14. terraform taint

- 특정 리소스를 강제로 재생성하도록 표시한다.
- 태깅된 리소스는 다음에 terraform apply를 실행할 때 삭제 후 재생성된다.
- 리소스의 변경 없이도 상태를 초기화하거나 리소스를 새로 배포해야 할 때 유용하다.
* 사용 예시
# aws_instance.example 리소스를 삭제하고 새로 생성하도록 표시한다.
terraform taint aws_instance.example

* 적용 후 명령 실행
# 지정된 리소스를 삭제 후 다시 생성한다.
terraform apply

* 출력 결과
Resource instance aws_instance.example marked for tainting.

 

 

15. terraform untaint

- terraform taint로 표시된 리소스를 원래 상태로 되돌린다.
* 사용 예시
# aws_instance.example 리소스의 taint 상태를 제거한다.
terraform untaint aws_instance.example

* 적용 후
# terraform apply 실행 시 해당 리소스는 재생성되지 않는다.

* 출력 결과
Resource instance aws_instance.example unmarked as tainted.