【问题标题】:How Do I Refactor Terraform Code To Modules?如何将 Terraform 代码重构为模块?
【发布时间】:2019-07-19 11:30:56
【问题描述】:

我从 3 个单独的 terraform 目录开始,用于网络、虚拟机和数据库(在 Azure 中),我会在每个目录中使用 terraform apply

terraform 文件中存在一些重复,例如每个文件中的 Azure 资源组。

# Create a resource group
resource "azurerm_resource_group" "resource-group" {
  name     = "terraform-rg"
  location = "eastus"
}

因此,我现在想重组代码,以便从根处的单个 main.tf 调用所有 3 个代码,而我只调用一次 terraform apply

但是,我是新手,如果资源组位于根目录且不再位于同一文件中,我不确定如何引用它。

例如用于 VM 的 vnet 如下所示:

# Create a virtual network for the VM
resource "azurerm_virtual_network" "vm-vnet" {
  name                = "terraform-client1-vnet"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.resource-group.location
  resource_group_name = azurerm_resource_group.resource-group.name   
}

locationresource_group_name 不再解析,因为 azurerm_resource_group.resource-group 不再位于同一文件中,而是位于根目录下的 main.tf 中。

正确重构此问题以解决所有问题的过程是什么?

import 声明吗?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    这些模块的工作方式如下。

    假设您有以下文件夹

    modules
      - resource-group
      - networking
      - vms
      - databases
    

    确保在模块resource-group 中设置正确的输出,如下所示

    注意,在 terraform v0.12+ 版本中,可能你不需要再设置输出变量了,应该可以直接使用,但是我没有机会测试

    modules/resource-group文件夹下,你可以准备这个文件main.tf

    # Create a resource group
    resource "azurerm_resource_group" "resource-group" {
      name     = "terraform-rg"
      location = "eastus"
    }
    
    output "resource-group-location" {
      value = azurerm_resource_group.resource-group.location
    }
    
    output "resource-group-name" {
      value = azurerm_resource_group.resource-group.name
    }
    

    现在您可以轻松引用其他模块中的资源

    module "resource-group"{
      source = "../resource-group"
      ...
    }
    
    # Create a virtual network for the VM
    resource "azurerm_virtual_network" "vm-vnet" {
      name                = "terraform-client1-vnet"
      address_space       = ["10.0.0.0/16"]
      location            = module.resource-group.resource-group-location
      resource_group_name = module.resource-group.resource-group-name   
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 2015-01-06
      • 2021-01-10
      • 2021-12-30
      • 2010-10-20
      • 1970-01-01
      • 2012-05-19
      • 2018-10-07
      相关资源
      最近更新 更多