[Terraform]tfenv로 테라폼 버전 관리하기(테라폼 여러 버전 활용하기)

2025. 3. 20. 21:57·DevOps
반응형

배경 상황

지금 회사에서는 사내 인프라를 테라폼으로 관리하고 있고, 계정별/리소스별로 디렉터리를 나눠서 사용하고 테라폼 버전이나 프로바이더 버전을 디렉터리별로 따로 관리하고 있다.

 

 

최근 테라폼 1.10 버전부터 DynamoDB를 별도로 가져가지 않고 S3만으로도 lockfile 관리가 가능하다는 소식이 들려서 테라폼 버전들을 디렉터리별로 순차적으로 업그레이드 하고있다. 그런데 tf 파일에 정의된 버전과 terraform cli의 버전이 다르면 에러가 떠서 어떻게 해야하나 찾아보니 tfenv라는 도구가 있었다.

 

 

tfenv 사용법

MacOS에서는 간단하게 brew로 설치할 수 있다.

brew install tfenv

 

 

tfenv로 설치할 수 있는 버전을 확인하려면 다음 명령어를 실행하면 된다.

tfenv list-remote

 

 

원하는 버전을 찾았으면 다음 명령어로 특정 테라폼 버전을 설치할 수 있다. 나는 현재 가장 최신 버전인 1.11.2를 설치했다.

tfenv install 1.11.2

 

 

설치된 테라폼 버전 목록을 확인하려면 다음 명령어를 실행하면 된다. 별표시가 붙은 버전이 현재 사용중인 버전이다. terraform version 명령어를 실행해 확인했을 때에도 버전이 1.11.2로 변경된 것을 확인할 수 있다. (+tfenv use 명령어를 실행할 때 .terraform-version 혹은 TFENV_TERRAFORM_VERSION으로 덮어쓰지 않는 한 이 버전을 사용한다라고 적혀있는데, 반대로 이 두 가지를 구성해주면 현재 사용버전을 변경하는 명령어를 실행하지 않고도 여러 버전을 활용할 수 있다)

$ tfenv list
* 1.11.2 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)
  1.8.1

$ tfenv use 1.11.2
Switching default version to v1.11.2
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.11.2

$ terraform version
Terraform v1.11.2
on darwin_arm64
+ provider registry.terraform.io/hashicorp/aws v5.91.0

 

 

이제 1.11.2 버전으로 테라폼 버전을 업그레이드 하려면 tf파일의 테라폼 블록에서 required_version을 1.11.2로 변경하고, terraform init -reconfigure로 초기화하고 원하는 리소스를 정의해서 사용하면 된다. 나는 아직까지 버전별 syntax 차이가 없는 모듈만 쓰고 있어서 괜찮은데 syntax가 변경된 모듈의 경우에는 코드를 수정해야할 수도 있으니 잘 검증하고 버전을 올리도록 하자.

terraform {
  required_version = "= 1.11.2" # Terraform Version

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 5.83"
    }
  }

  backend "s3" {
    bucket         = "xx-tfstate"
    key            = "xx.tfstate"
    region         = "ap-northeast-2"
    use_lockfile   = true
    encrypt        = true
  }
}

 

 

다른 디렉토리에서 다른 버전을 사용할 때에는 다음 명령어를 사용해서 버전 전환을 한 뒤 사용하면 된다. 참고로 설치된 버전 중 가장 최신 버전을 선택하려면 특정 버전대신 latest를 넣어주면 된다.

$ tfenv use 1.8.1
저작자표시 비영리 동일조건 (새창열림)

'DevOps' 카테고리의 다른 글

[Kubernetes]kubectl 및 유용한 유틸리티 설치(krew, ctx, neat)  (1) 2025.03.30
[RSS]SaaS 서비스 장애 상황 및 AWS 서비스 신규소식 Slack으로 받아보기  (0) 2025.03.29
[MacOS]SSH config로 간편하게 EC2에 SSH 연결하기  (0) 2025.03.20
[AWS]Bedrock Inference Profile(추론 프로필)로 비용 분리해서 집계하기  (0) 2025.03.19
[AWS]Identity Center(SSO) SCIM 토큰 갱신 방법(Google Workspace)  (0) 2025.03.18
'DevOps' 카테고리의 다른 글
  • [Kubernetes]kubectl 및 유용한 유틸리티 설치(krew, ctx, neat)
  • [RSS]SaaS 서비스 장애 상황 및 AWS 서비스 신규소식 Slack으로 받아보기
  • [MacOS]SSH config로 간편하게 EC2에 SSH 연결하기
  • [AWS]Bedrock Inference Profile(추론 프로필)로 비용 분리해서 집계하기
Canary_카나리아
Canary_카나리아
어쩌다 데브옵스 엔지니어가 된 문과생의 기록용 블로그
    반응형
  • Canary_카나리아
    release: canary
    Canary_카나리아
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • DevOps (67)
      • Programming (28)
      • Certifications (3)
      • ETC (20)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드
    NCP자격증
    kops사용법
    프로메테우스
    백엔드스쿨
    클라우드엔지니어자격증
    spring
    java개념
    argocd
    자바개념
    Prometheus
    NCPassociate자격증
    백엔드개발
    클라우드자격증
    kops란
    프로메테우스예제
    NCPprofessional자격증
    네이버클라우드서비스
    개발자
    Grafana
    데브옵스엔지니어
    그라파나
    그라파나예제
    terraform
    네이버클라우드자격증
    ncp서비스
    백엔드공부
    Java
    제로베이스
    한빛출판네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Canary_카나리아
[Terraform]tfenv로 테라폼 버전 관리하기(테라폼 여러 버전 활용하기)
상단으로

티스토리툴바