【问题标题】:terraform module depends_on Azureterraform 模块依赖于 Azure
【发布时间】:2020-03-17 23:11:24
【问题描述】:

我正在使用 terraform 在 Azure 云中构建生产基础架构。我的要求如下。

应首先配置 Azure 密钥保管库,因为我将利用那里的秘密。但是由于 terraform 模块不支持depend_on。任何解决方法都非常适用。

     source    = "./../modules/azurekeyvault/"
     username =  "${var.username}"
     tags_environment    = "${var.tags_environment}"
   }

   module "mysql" {
     source                             = "./../modules/mysql/"
   }

Azure 密钥保管库模块。

  name                        = "${var.lsrkeyvault}"
  location                    = "${data.azurerm_resource_group.lsr.location}"
  resource_group_name         = "${data.azurerm_resource_group.lsr.name}"
  enabled_for_disk_encryption = true
  tenant_id           = "${data.azurerm_client_config.current.tenant_id}" 

  sku_name = "standard
resource "azurerm_key_vault_secret" "userlist" {
  count = length(var.username)
  name  = "${var.username[count.index]}"
  value =  "${bcrypt(random_string.password.result)}" 
  key_vault_id = "${azurerm_key_vault.kvlsr.id}"
  tags = {
    environment = "${var.tags_environment}"
  }
}

Mysql 模块代码:

    name                            =  "kyv-lsr-dev"
    resource_group_name = "rgroup"
   }

data "azurerm_key_vault_secret" "userlist" {
      name         = "mylab"
      key_vault_id = "${data.azurerm_key_vault.keyvault.id}"

【问题讨论】:

  • 我会单独配置密钥保管库等,并使用它们自己的状态,然后只需使用保管库传递秘密等。我就是这么做的,如果你想让我告诉你怎么做,请告诉我
  • @Naim 感谢您的回答,但在这种情况下,我必须维护 2 个单独的状态文件。我想要一个单一的状态文件,所有基础设施都应该提供。请出示您的代码
  • stackoverflow.com/users/10870934/vijay-verma,如果您可以编辑您的问题以显示mysql模块,我可以快速编写代码示例来回答您的需求
  • 如何为模块实现depends_on见medium.com/mineiros/…

标签: azure terraform devops


【解决方案1】:

我不知道这是否可行,但我建议尝试帮助 TF 构建正确的依赖关系图。我会让 keyvault id 在你的模块中成为一个变量。这样,当您使用模块时,您将显式调用 keyvault,这应该会在模块执行之前触发它被创建。

 module "mysql" {
     source      = "./../modules/mysql/"
     keyvault_id = "${module.keyvault.id}"                    
 }

这将要求您的 mysql 模块将 keyvault_id 作为变量并使用它而不是数据资源。它还需要您的 keyvault 模块输出 keyvault id。同样,这可能行不通,但我认为它会。

【讨论】:

  • 感谢您的回答,我将 azurerm_key_vault_secret 也称为 MySQL 块中的数据源。在这种情况下,如何填充秘密值。数据“azurerm_key_vault_secret”“用户列表”{名称=“mysqladminun”key_vault_id=“${data.azurerm_key_vault.keyvault.id}”}}administrator_login=“mysqladminun”administrator_login_password=“${azurerm_key_vault_secret.userlist.value}”版本=“5.7 "`
  • 您应该可以在那里调用秘密,因为您将通过 id 传递它。如果密钥库存在,那么密钥应该正确吗?
  • 谢谢我正在粘贴演示代码,你可以检查下面的代码:codeshare.io/5zWB4O
猜你喜欢
  • 2020-02-05
  • 2019-11-04
  • 2021-01-23
  • 2021-04-17
  • 2020-09-16
  • 1970-01-01
  • 2022-01-12
  • 2021-04-28
  • 2018-02-21
相关资源
最近更新 更多