Choi Jiho
TerraformでAWS Secrets Managerをいい感じで扱う
2021/09/29
Table of Contents
きっかけ
色んな秘密値(DBパスワードなど)を最初のterraform applyで保存しておいて、後のterraform applyからはvarableを気にせずに使いたい!
結論
ignore_changes
と default = null
を活用したらできる!
きっかけになったユースケース
terraform planやapplyするために var.db_password
に毎回手元で値を供給してました 😇
resource "aws_secretsmanager_secret_version" "main" {
secret_id = aws_secretsmanager_secret.main.id
secret_string = jsonencode( {"db_password" = var.db_password} )
}
値供給しないと。。。
こうなりました。
色んな方法考えましたが微妙でした。
試した方法1
秘密値を export TF_VAR_valvalue=xxxxxxxxxxx
環境変数に毎回設定します。
- ターミナル変わる度に入力する必要があります
- 毎回打つから面倒くさいです
試した方法2
秘密値を tfvars
ファイルに書いておいてgitignoreします。
- 一緒に開発する場合、秘密値更新されたことを気づかず手元の古い秘密値で上書きする可能性があります
結論を詳しく説明
- Terraformで
ignore_changes
は変更を無視します、リソース生成できる性質を持ってます。
resource "aws_secretsmanager_secret_version" "main" {
secret_id = aws_secretsmanager_secret.main.id
secret_string = jsonencode( {"db_password" = var.db_password} )
lifecycle {
ignore_changes = [
secret_string
]
}
}
- Terraformでvariableの
default = null
はvariableに値を設定しなかったらnullを値として使う性質を持ってます。
variable db_password {
type = string
default = null
}
この性質を活かしてリソース生成(AWS Secrets Managerを生成)する時に var.db_password
に値を供給します。
手順は export TF_VAR_db_password=xxxxxxxxxxx
を実行、 terraform apply
実行です。
こうすると var.db_password
に秘密値が設定されたままAWS Secrets Managerが作られます。
この後は var.db_password
に対する値供給を気にせずにterraformを使えます。 🎉
Choi Jiho
Company : Fusic CO., LTD Program Language : PHP, Go, Ruby