리소스의 임시(ephemeral) 값
리소스의 임시(ephemeral) 값
인프라를 관리하다 보면 Terraform이 현재 작업 밖으로 영속화하지 않길 원하는 민감한 값을 만들고 다룰 일이 자주 생겨요. Terraform은 리소스가 상태(state)나 계획(plan) 파일에 저장하고 싶지 않은 데이터를 관리할 수 있도록 ephemeral 리소스 블록과 특정 리소스의 임시 쓰기 전용(write-only) 인자, 이렇게 두 가지 도구를 제공해요.
출처: 문서
본문
임시(ephemeral) 리소스
ephemeral 블록은 본질적으로 임시적인 리소스를 정의해요. 임시 리소스는 고유한 수명 주기를 가지며, Terraform은 임시 리소스에 대한 정보를 상태나 계획 파일에 저장하지 않아요. 각 ephemeral 블록은 임시 비밀번호나 다른 시스템으로의 연결 같은 하나 이상의 임시 리소스를 설명해요.
ephemeral "random_password" "db_password" {
length = 16
override_special = "!#$%&*()-_=+[]{}<>:?"
}
resource "aws_db_instance" "example" {
instance_class = "db.t3.micro"
allocated_storage = "5"
engine = "postgres"
username = "example"
skip_final_snapshot = true
publicly_accessible = true
db_subnet_group_name = aws_db_subnet_group.example.name
password_wo = ephemeral.random_password.db_password.result
password_wo_version = 1
}
ephemeral 리소스 블록에 대해 더 알아보려면 ephemeral 블록 참조를 참고하세요.
쓰기 전용(write-only) 인자
resource 블록이 정의하는 Terraform의 관리 리소스에는 쓰기 전용 인자라고 불리는 임시 인자를 포함할 수 있어요. 쓰기 전용 인자는 현재 Terraform 작업 동안에만 사용할 수 있고, Terraform은 이를 상태나 계획 파일에 저장하지 않아요.
쓰기 전용 인자를 사용하면 Terraform 작업 중에 임시 값을 안전하게 리소스에 전달하면서, 그 값이 Terraform에 의해 영속화될 걱정을 하지 않아도 돼요. 예를 들어 aws_db_instance 리소스에는 데이터베이스 비밀번호를 받는 쓰기 전용 password_wo 인자가 있어요:
ephemeral "random_password" "db_password" {
length = 16
override_special = "!#$%&*()-_=+[]{}<>:?"
}
resource "aws_secretsmanager_secret" "db_password" {
name = "db_password"
}
resource "aws_secretsmanager_secret_version" "db_password" {
secret_id = aws_secretsmanager_secret.db_password.id
secret_string_wo = ephemeral.random_password.db_password.result
secret_string_wo_version = 1
}
ephemeral "aws_secretsmanager_secret_version" "db_password" {
secret_id = aws_secretsmanager_secret_version.db_password.secret_id
}
resource "aws_db_instance" "example" {
instance_class = "db.t3.micro"
allocated_storage = "5"
engine = "postgres"
username = "example"
skip_final_snapshot = true
password_wo = ephemeral.aws_secretsmanager_secret_version.db_password.secret_string
password_wo_version = aws_secretsmanager_secret_version.db_password.secret_string_wo_version
}
Terraform이 aws_db_instance 리소스를 만들 때 password_wo 값을 aws 프로바이더로 보내요. 그러면 aws 프로바이더가 password_wo 값을 사용해 데이터베이스 인스턴스를 만들고, Terraform은 그 비밀번호 값을 저장하지 않고 버려요.
이 예시와 쓰기 전용 인자 사용에 대해 더 알아보려면 쓰기 전용 인자 사용하기를 참고하세요.