terraform 模块依赖于 Azure

Posted

技术标签:

【中文标题】terraform 模块依赖于 Azure【英文标题】:terraform module depends_on 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 个单独的状态文件。我想要一个单一的状态文件,所有基础设施都应该提供。请出示您的代码 嗨***.com/users/10870934/vijay-verma,如果您可以编辑您的问题以显示mysql模块,我可以快速编写代码示例来回答您的需求 如何为模块实现depends_on见medium.com/mineiros/… 【参考方案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

以上是关于terraform 模块依赖于 Azure的主要内容,如果未能解决你的问题,请参考以下文章

Terraform - 模块之间的依赖关系

Terraform 依赖于 aws_iam_policy

Terraform 模块依赖项不起作用(版本 0.12)

Terraform 模块依赖关系破坏了 template_file

如何使 Terraform 提供程序依赖于正在创建的资源

Terraform:如何安装多个版本的提供程序插件? [复制]