_μ΄ λ¬Έμ λ μλ @mtheusμ μν΄ hashicor /terraform#18718λ‘ μ΄λ Έμ΅λλ€. 곡κΈμ λΆν μ κ²°κ³Όλ‘ μ¬κΈ°λ‘ λ§μ΄κ·Έλ μ΄μ λμμ΅λλ€. λ¬Έμ μ λ³Έλ¬Έμ μλμ μμ΅λλ€._
Terraform v0.11.8
resource "local_file" "kubeconfig" {
sensitive = true
content = "${data.terraform_remote_state.kubernetes.kubeconfig}"
filename = ".kube/config"
}
λ―Όκ°ν μ 보λ μΆλ ₯μ μλ κ² κ°μ΅λλ€
data.terraform_remote_state.kubernetes: Refreshing state...
local_file.kubeconfig: Creating...
content: "" => "\n\napiVersion: v1\nclusters:\n- cluster:\n server: https://**<SENSIVE>**.sk1.us-east-1.eks.amazonaws.com\n certificate-authority-data: LS0tLS1C**<SENSIVE>**\n name: kubernetes\ncontexts:\n- context:\n cluster: kubernetes\n user: aws\n name: aws\ncurrent-context: aws\nkind: Config\npreferences: {}\nusers:\n- name: aws\n user:\n exec:\n apiVersion: client.authentication.k8s.io/v1alpha1\n command: aws-iam-authenticator\n args:\n - \"token\"\n - \"-i\"\n - \"latam\"\n"
filename: "" => ".kube/config"
local_file.kubeconfig: Creation complete after 0s (ID: 73a74cc24de6ebfe8304a9b889415884fd819390)
terraform init
terraform apply
μΆλ ₯μ μΈμνλ λͺ¨λ κ΅¬μ± μμμ μ μ©ν΄μΌ ν©λλ€.
λ§μ€ν°μ μ½λ λ μ루μ
μ ꡬνν©λλ€: sensitve_content
. λλ¨Έμ§ Terraform 리μμ€μ μΌμΉνμ§ μμ§λ§ μ μ΄λ μ루μ
μ
λλ€.
κ·Έλ¬λ Terraform v0.11.10 λ° provider.local v1.1.0μμλ μμ§ μ¬μ©ν μ μλ κ² κ°μ΅λλ€.
μ΄κ²μ 2018λ 3μ #9μμ ꡬνλμμ§λ§ μμ§ λ¦΄λ¦¬μ€λμ§ μμμ΅λλ€.
@alewando μ¬κΈ° λλ¦° μλ΅μ λν΄ μ£μ‘ν©λλ€! ν΅μ¬ νμ terraform 0.12 릴리μ€μ λν΄ μ λ©΄μ μΌλ‘ μμ νμΌλ©° λΆννλ μ΄ κ³΅κΈμμ κ°μ μΌλΆ νλͺ©μ κ²°κ³Όμ μΌλ‘ 무μλμμ΅λλ€.
보λ₯ μ€μΈ PRμ κ²ν νκ³ λ¦΄λ¦¬μ€λ₯Ό κ²μνλλ‘ μκΈ°μν€κΈ° μν΄ μ΄ μ± μ λΆλ§ν¬μ μΆκ°νκ² μ΅λλ€. μ΄ νΉμ λ¬Έμ λ₯Ό ν΄κ²°ν΄ μ£Όμ μ κ°μ¬ν©λλ€. κΈ°λ€λ € μ£Όμ μ κ°μ¬ν©λλ€!
@mildwonkey λ¦΄λ¦¬μ¦ μ»·μ΄ λμ¬ κ°λ₯μ±μ΄ μλμ? μ 릴리μ€λ₯Ό λΆκΈ°νκ³ μνν μ μμ§λ§ μ¬μ©μ μ μ νλ¬κ·ΈμΈμ κ°μ Έμ€λ €λ©΄ Terraform μ€μΌμ€νΈλ μ΄μ μ 보μΌλ¬ νλ μ΄νΈ λ‘λκ° νμν©λλ€.
@mildwonkey λ€μ ν λ² λ¦΄λ¦¬μ€λ₯Ό μμ²ν©λλ€. κ·Έκ²μ μ¬μ΄ μΉλ¦¬μ΄λ©° μ°λ¦¬μκ² λ§μ λμμ΄ λ μ μμ΅λλ€.
@mildwonkey μ λ μ΄κ²μ΄ νμμ μΈ κΈ°λ₯μ΄ λ κ²μ΄λΌκ³ μκ°νκ³ μΆμλ₯Ό κ³ λνκ³ μμ΅λλ€. π
μμ λμμ μ°Ύλ μ¬λλ€μ μν΄ μ¬λ¬ RDS λ°μ΄ν°λ² μ΄μ€μ λν μ격 μ¦λͺ μ λ΄λ³΄λ΄λ μμ μ μννμ΅λλ€(λ°μ΄ν°λ² μ΄μ€/λΉλ°λ²νΈ λ° λ§μ€ν° λΉλ°λ²νΈ λ§΅μ΄ μμ).
locals {
databases = "${keys(var.shared_db_databases_passwords)}"
manual_output = {
endpoint = "${module.shared_database.database_endpoint}"
username = "myusername"
password = "${var.shared_db_master_password}"
port = 5432
databases = "${local.databases}"
passwords = "${values(var.shared_db_databases_passwords)}"
}
}
resource "null_resource" "manual_output" {
triggers {
databases = "${join(",", local.databases)}"
}
provisioner "local-exec" {
command = "echo $DATA > manual_output.json"
environment {
DATA = "${jsonencode(local.manual_output)}" # Necessary to hide outputs
}
}
}
https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0 μ μ΄μ sensitive_content
μ λν μ§μμ μΆκ°νμ¬ μ΄ λ¬Έμ λ₯Ό μ’
λ£ν μ μλ€κ³ μκ°ν©λλ€.
@invidian κ°μ¬ν©λλ€!
local_file
λ°μ΄ν° μμ€λ sensitive_content
λ μ§μν΄μΌ ν©λλ€.
@ShahNewazKhan local_file
λ°μ΄ν° μμ€μ sensitive_content
μμ±μ΄ μμ΄μΌ νλ€λ λ§μμ΄μ κ°μ? κ·Έλ λ€λ©΄ μ΄κ²μ μ¬μ©νλ κ²½μ°λ 무μμ
λκΉ?
@unacceptable μ€μ λ‘ local_file 리μμ€λ₯Ό μμ±νλ κ²κ³Όλ λ€λ₯Έ λ°©μμΌλ‘ local_file 리μμ€μ λ΄μ©μ μ€μ νλ€κ³ μμν΄ λ³΄μμμ€(λλ κΈ°μ‘΄ νμΌμ μ½μΌλ €λ κ²½μ°). ν΄λΉ μ½ν μΈ κ° μ²μμ λ―Όκ°ν κ²½μ° μΆλ ₯μ΄λ tfstateμ μ§μ νμνμ§ μκ³ μ‘μΈμ€ν΄μΌ ν©λλ€.
μ΄ κΈ°λ₯μ κ°λ κ²μ΄ μλ―Έκ° μλ€κ³ μκ°ν©λλ€. local_file
λ°μ΄ν° μμ€μλ sensitive_filename
맀κ°λ³μκ° μμ μ μμΌλ©°, μ΄λ μ½ν
μΈ κ° content
(λ° content_base64
) λμ sensitive_content
μμ±μ μμ΄μΌ ν¨μ λνλ
λλ€. content_base64
). κ·Έλ¬λ κ·Έκ²μ μλ‘μ΄ κΈ°λ₯ μ μμ²λΌ 보μ
λλ€. μλ§λ κ·Έκ²μ ν΄κ²°νκΈ° μν΄ λ λ€λ₯Έ λ¬Έμ λ₯Ό λ§λ€μ΄μΌ νμ§ μμκΉμ?
λ°©κΈ μ¬κΈ°μμ λ§λ€μμ΅λλ€.
https://github.com/terraform-providers/terraform-provider-local/issues/36
λ°μ΄ν° ꡬ쑰μ μ΅μ μ΄ μμ΄μΌ νλ€κ³ μκ°νλ―λ‘ local_file 리μμ€λ₯Ό ν΅ν΄ μ μλ νμΌμμ sensitive_contentλ₯Ό κ°μ Έμ¬ λΏλ§ μλλΌ κΈ°μ‘΄ νμΌμμλ κ°μ Έμ¬ μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0 μ μ΄μ
sensitive_content
μ λν μ§μμ μΆκ°νμ¬ μ΄ λ¬Έμ λ₯Ό μ’ λ£ν μ μλ€κ³ μκ°ν©λλ€.