如何在同一`main.tf`中多次重用模块?

时间:2019-10-21 17:12:10

标签: terraform

我为可重复使用的基础架构创建了一个模块。该模块是一个项目,因此每次我们要创建一个新项目和相关的基础架构项目时,都可以使用此模块:

module "project1" {
source = ".modules/project_module"
    project_id = "project1"
    ...
}

module "project2" {
source = ".modules/project_module"
    project_id = "project2"
    ...
}

该模块使用Google提供程序在GCP上创建资源。

不幸的是,这没有达到预期的效果。首先,每个新项目都需要调用terraform init,其次,无法删除项目,因为从main.tf文件中删除模块时,Terraform抱怨说,如果没有Google提供者,它就不会破坏资源。例如:

module.project1.google_storage_bucket_iam_member.some-bucket: 
configuration for module.project1.provider.google is not present; a provider configuration block is required for all operations

是否可以在同一main.tf中多次使用同一模块?我意识到理想上我应该编写一个提供程序,但是我现在暂时避免这样做。

2 个答案:

答案 0 :(得分:0)

  1. 如果在main.tf中创建新模块,则应调用terraform init。这是Terraform逻辑。

  2. 即使您只想应用一些资源,Terraform也会检查整个代码。我建议您使用workspace-target选项。它可以应用/销毁每个模块的独立性。

  

-target选项还可以在应用/销毁之前检查整个Terraform代码。

在您的情况下,制作2个工作区和1个模块可以得到相同的结果。

喜欢:

  • 地形工作区
terraform workspace list

=>   default
   * dev
     pro
     stg
terraform workspace select dev
  • 地形目标选项
terraform destroy -target module.project2

答案 1 :(得分:0)

事实证明,该州存在一些矛盾之处。烧完最后,从头开始重新创建项目,同时将Google提供者保留在模块之外,它可以正常工作。