[Terraform] 테라폼 사용전 알아두면 좋은 Best Practice 8가지
IT/Terraform

[Terraform] 테라폼 사용전 알아두면 좋은 Best Practice 8가지

반응형

Intro

오늘은 꽤 오래전 기술블로그에 올라온 terraform best practice를 쉽게 번역하여 정리를 해보겠습니다. 흔히 알고 있는 것도 있고 그렇지 않은것도 있어서 정리 해볼만한 것 같습니다.

(원문 : https://dev.to/cryptic022/terraform-best-practices-2a1n)

1. 항상 최신 테라폼 버전을 사용해라

  • 현재 버전은 1.1.8

2. terraform plan 시에 var-file을 사용해라

다양한 환경(dev, prod, stage)에서 테라폼을 사용할때 var-file을 활용 할 수 있습니다.

terraform plan -var-file=values.tfvars -out=mytfplan

  • values.tfvars
bucket_name = "terraform-example-test"
environment = "dev"
dynamo_db_name = "tf-lock"

3. tfstate file을 s3 backend 로 관리해라

여러 사람들과 테라폼소스 코딩을 해야할때 s3 backend를 사용하여 tfstate파일을 원격으로 관리하면 파일의 정합성 이슈를 제어할 수 있습니다.

terraform {
  backend "s3" {
    # This bucket should already exists then terraform will be able to store tfstate at this bucket
    # Change bucket name to your bucket where you want to store tfstate file
    bucket = "terraform-example-test"
    key    = "StateLockID"
    region = "ap-northeast-2"

    # This table should already exists. Change the dynamo db name to your table name
    dynamodb_table = "tf-lock"
    encrypt        = true
  }
}

4. tfstate lock을 위해 dynamodb를 사용해라

여러 사람들과 테라폼소스 코딩을 할때 같은 리소스를 동시에 생성하는 이슈를 제어할 수 있습니다.

3번 소스코드와 동일

5. Backend 로 사용한 S3 Bucket에 버전 컨트롤 기능을 활성화 해라

S3 Bucekt에는 파일의 버전을 컨트롤 할 수 있는 버저닝 기능이 있습니다. 이를 활성화하면 쉽게 tfstate 파일을 이전버전으로 복구할 수 있습니다.

resource "aws_s3_bucket" "variable_bucket" {
  bucket = var.bucket_name
  acl    = "private"
  versioning {
    enabled = true
  }
}

6. 기존의 리소스를 가져올때는 terraform import 를 사용해라

terraform import aws_s3_bucket.variable_bucket your_bucket_name

7. 공유 모듈을 활용 해라

  • 테라폼 커뮤니티는 공유 모듈을 제공하고 있습니다. 커뮤니티에서 제공되는 공유모듈을 활용 할 수 있습니다.
  • 모듈 레지스트리 URL https://registry.terraform.io/
module "private_s3_bucket" {
  source = "yukihira1992/s3-private-bucket/aws"

  bucket             = "my-example-bucket"
  region             = "ap-northeast-1"
  versioning_enabled = true
  sse_algorithm      = "AES256"
  tags = {
    Environment = "dev"
  }
}

8. 다양한 환경(dev/prod/stage) 관리를 위해 모듈을 사용해라

모듈은 다양한 환경에서 함께 사용되는 여러 리소스의 컨테이너라고 말할 수 있습니다. 서로 다른 환경 사이에서 코드를 관리하려면 terraform 모듈을 사용해야 합니다.

예시 : https://github.com/cryptic022/terraform-example/tree/master/variable-example

반응형