Terraform 地形:从variables.tf到vault。如何解决拱顶地形中的_

Terraform 地形:从variables.tf到vault。如何解决拱顶地形中的_,terraform,hashicorp-vault,terraform0.12+,Terraform,Hashicorp Vault,Terraform0.12+,我有一个Terraform代码(使用Terraform v0.12.21),它在基础设施端构建一个GKE和一个CloudSQL,在部署端,在GKE内部署N个web服务器吊舱 在variables.tf文件中,我定义了一个“wordpress\u site”数组。 现在,当需要一个新的部署时,我只需在“default”中添加一个新项目,并使用terraformapply完成部署 variables.tf包含如下内容: variable "wordpress_site" {

我有一个Terraform代码(使用Terraform v0.12.21),它在基础设施端构建一个GKE和一个CloudSQL,在部署端,在GKE内部署N个web服务器吊舱

在variables.tf文件中,我定义了一个“wordpress\u site”数组。 现在,当需要一个新的部署时,我只需在“default”中添加一个新项目,并使用
terraformapply
完成部署

variables.tf包含如下内容:

variable "wordpress_site" {
  type = map(object({
    name         = string
    url          = string
    disk         = string
    mysql_passwd = string
    api_token    = string
    api_key      = string
    api_country  = string
    api_language = string
    api_wp_lang  = string
    api_colour   = string
    template     = string
  }))
  default = {
    example1 = {
      name         = "example1"
      url          = "example1.com"
      disk         = "1Gi"
      mysql_passwd = "PaSSwOrd1"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "it"
      api_language = "it"
      api_wp_lang  = "it_IT"
      api_colour   = "1"
      template     = "p1"
    }
    example2 = {
      name         = "example2"
      url          = "example2.com"
      disk         = "1Gi"
      mysql_passwd = "PaSSwOrd2"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "uk"
      api_language = "en"
      api_wp_lang  = "en_US"
      api_colour   = "1"
      template     = "p1"
    }
...
...
...
    exampleN = {
      name         = "exampleN"
      url          = "exampleN.com"
      disk         = "1Gi"
      mysql_passwd = "PaSSwOrdN"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "uk"
      api_language = "en"
      api_wp_lang  = "en_US"
      api_colour   = "1"
      template     = "p1"
    }
}

当我调用它们进行部署时,我使用for_each function和each.value.XXX来获取其变量:

resource "kubernetes_deployment" "wordpress" {
  for_each = var.wordpress_site

  metadata {
    name   = each.value.name
    labels = { 
      app = each.value.name
      app-function = "wordpress"
    }
  }
...
...
}

好的,让我们将Vault作为terraform中的提供程序,因此在main.tf中,我将添加新的提供程序,如:

provider "vault" {
  address = "http://XXX.YYY.ZZZ.TTT:8200"
  }
并在调用terraform apply之前进行
vault登录
,但是,由于我想部署3000多个WordPress网站,我想让它们都在vault存储中定义并使用vault引擎进行组织,但是,通过这些更改调用它们的最佳方式是什么


另外,如何将它们全部放在Vault中?

澄清一下:您希望从
variables.tf
文件中删除机密值,而将它们存储在Vault中?在Vault中设置
kv
秘密引擎,并将每个站点的秘密放入Vault条目中,使用与
变量中的密钥相同的名称。tf
,有什么不对?然后使用
vault\u generic\u secret
访问它们。