Backend Type: s3 | Terraform | HashiCorp Developer
아래 코드를 이용하여 s3 버킷을 생성하고 암호화까지 해준다.
resource "aws_s3_bucket" "example" {
bucket = "terraform-backend"
# S3 object lock 걸어서 삭제 방지
object_lock_enabled = var.object_lock_enabled
}
resource "aws_s3_bucket_object_lock_configuration" "example" {
bucket = aws_s3_bucket.example.bucket
rule {
default_retention {
mode = "COMPLIANCE"
days = 5
}
}
}
# S3 버킷에 파일이 업로드 될때마다 새 버전을 만들도록 설정, 이를 통해 언제든지 이전버전으로 되돌릴수 있다.
resource "aws_s3_bucket_versioning" "example" {
bucket = aws_s3_bucket.example.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_kms_key" "example" {
description = "This key is used to encrypt bucket objects"
deletion_window_in_days = var.kms_key_delete_window_in_days
}
# S3 버킷에 기록된 모든 데이터를 서버측에서 암호화
resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
bucket = aws_s3_bucket.example.id
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.example.arn
sse_algorithm = "aws:kms"
}
}
}
DynamoDB는 terraform state들을 locking해주며 roll back하기 위함이다.
module "dynamodb_table" {
source = "terraform-aws-modules/dynamodb-table/aws"
version = "3.1.2"
name = var.dynamodb_table
hash_key = "id"
attributes = [
{
name = "id"
type = "N"
}
]
tags = {
Terraform = "true"
Environment = "staging"
}
}
terraform.tfstate 파일이 있는 versions.tf 파일 내에 아래와 같이 써준 후
terraform {
required_version = "1.3.7"
backend "s3" {
bucket = "aimmo-mlops-terraform-backend"
key = "global/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-backend-lock"
encrypt = true
}
}
명령어 실행하면 자동으로 s3에 terraform.tfstate 파일이 업로드된다.
terraform init