Terraform 여러 계정을 관리하는 방법

신동수·2024년 2월 24일
0

Terraform

목록 보기
2/10

개요

  • 회사에서는 주로 AWS 의 여러 계정의 자원을 Terraform 을 통한 인프라 프로비저닝을 위해 본 포스팅을 작성하였다.

AWS 프로파일 설정

% aws configure --profile account1
% aws configure --profile account2
...

Terraform Configuration

provider "aws" {
  region  = "ap-northeast-2"
  profile = "account1"
}

provider "aws" {
  region  = "ap-northeast-2"
  profile = "account2"
}

Terraform 코드에서 AWS provider 블록을 사용하여 프로파일을 설정한다. profile 속성을 사용하여 원하는 프로파일을 지정할 수 있다.
필요한 경우, 위와 같은 블록을 각각의 AWS 리소스에 적용하여 각각의 계정에 대한 프로파일을 설정할 수 있다.

Remote State 저장

terraform {
  backend "s3" {
    bucket         = "remote-state-bucket" # S3 버킷 이름
    key            = "path/to/statefile" # tfstate 저장 경로
    region         = "ap-northeast-2" # S3 버킷 위치
    encrypt        = true # 암호화 여부
    dynamodb_table = "dynamodb-lock-table" # DynamoDB 테이블 이름
  }
}

여러 계정 간에 Terraform 상태를 공유하려면, AWS S3와 같은 원격 상태 저장소를 사용하는 것이 좋다. 각 계정에 대한 별도의 S3 버킷 및 DynamoDB 테이블을 설정하여 상태를 저장하고 잠금을 관리할 수 있다.

Terraform Backend

Terraform Backend 는 Terraform 의 state file 을 어디에 저장하고, 가져올지에 대한 설정이다.
기본적으로 로컬 스토리지에 저장을 하지만, 설정에 따라 S3, consul 등 다양한 Type을 사용할 수 있다.

Terraform Backend 를 사용하는 이유?


만약 한 쪽에서 작업을 하고 있고, 다른 한 쪽에서도 작업을 하고자 한다면 위와 같은 에러가 발생한다.

  • Locking: 보통 Terraform 코드를 혼자 작성하지 않는다. 인프라를 변경한다는 것은 굉장히 민감한 작업이 될 수 있다. 원격 저장소를 사용함으로써 동시에 같은 state를 접근하는 것을 막아 의도치 않은 변경을 방지할 수 있다.
  • Backup: 로컬 스토리지에 저장한다는건 유실할 수 있다는 가능성을 내포한다. S3와 같은 원격저장소를 사용함으로써 state 파일의 유실을 방지할 수 있다.

참고
https://kim-dragon.tistory.com/210
https://terraform101.inflearn.devopsart.dev/advanced/backend/

profile
조금씩 성장하는 DevOps 엔지니어가 되겠습니다. 😄

0개의 댓글

관련 채용 정보