반응형
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
반응형
'IT > Terraform' 카테고리의 다른 글
[Terraform] AWS S3 Bucket Policy 규칙 추가 방법 (0) | 2022.05.01 |
---|---|
[Terraform] AWS NLB internal private IP 할당 방법 (0) | 2022.04.30 |
[Terraform] MAC M1 Incompatible provider version Error 해결(darwin_arm64) (1) | 2022.04.18 |
[Terraform] terraformer로 기존 AWS 리소스 가져오기(import) (1) | 2022.04.12 |
[Terraform] 테라폼으로 AWS Elasticache(redis) Cluster 모드로 생성하기 (0) | 2022.04.12 |