我为可重复使用的基础架构创建了一个模块。该模块是一个项目,因此每次我们要创建一个新项目和相关的基础架构项目时,都可以使用此模块:
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
中多次使用同一模块?我意识到理想上我应该编写一个提供程序,但是我现在暂时避免这样做。
答案 0 :(得分:0)
如果在main.tf
中创建新模块,则应调用terraform init
。这是Terraform逻辑。
即使您只想应用一些资源,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提供者保留在模块之外,它可以正常工作。