Xti*_*yro 9 amazon-web-services terraform
我们如何确保第一个模块“ frontend_1”在其余模块之前执行?
module "frontend_1" {
source = "/modules/frontend-app"
}
module "frontend_2" {
source = "/modules/frontend-app"
}
module "frontend_3" {
source = "/modules/frontend-app"
}
Run Code Online (Sandbox Code Playgroud)
另外-有记录在外的Gitissues可以解决此问题,但是其中没有一个好的解决方法。首先-您可以选中此复选框,以便熟悉我的问题的实质-https: //github.com/hashicorp/terraform/issues/10462
以及如何在执行模块之前构建模块资源的外部对象-以便如果“计数”取决于从此类外部资源计算出的值,则可以计算该“计数”?例如-如果您需要在模块中的“计数”中使用新创建的VPC的ID,该模块将在该VPC中创建多个AWS安全组?
kis*_*HoR 10
如问题中所述,我能够使用depends on可变参数为您提供解决方法。
请参阅此处:https : //www.terraform.io/intro/getting-started/dependencies.html
假设我们有2个模块,一个模块定义vpc和子网,第二个模块定义要在基础结构中使用的各种安全组范围。
由于我们具有依赖关系,因此只有在VPC模块中成功创建vpc之后才能创建所有安全组,因此可以通过以下策略来满足它。
variable "vpc_arn" {
description = "The ARN of the VPC which is created in the VPC module"
}
resource "null_resource" "vpc_found" {
triggers = {
vpc_name = "${var.vpc_arn}"
}
}
resource "aws_security_group" "allow_all" {
depends_on = ["null_resource.vpc_found"]
name = "allow_all"
description = "Allow all inbound traffic"
vpc_id = "${var.vpc_arn}"
......
}
Run Code Online (Sandbox Code Playgroud)
空资源:https : //www.terraform.io/docs/provisioners/null_resource.html
模块不是将全部资源创建或全部破坏为一个单元的捆绑资源,因此,没有哪个模块在另一个模块之前或之后运行。如果查看terraform graph的输出,您会看到模块内的各个资源在计划图中显示为执行引擎同时遍历的节点。这意味着在两个模块之间完全可能存在双向依赖性(模块A从模块B的输出中获取输入,还提供用于模块B的输入),只要平面图不包含循环。
使用Terraform观察的一件事是,通过查看哪些资源属性,变量,输入输出等通过插值依赖于其他资源,以及使用depends_on的任何显式声明的依赖关系,来构建计划图(模块不可用) )。对于上面的示例,这样做的结果是,如果没有插值引用将值从一个模块的输出链接到另一个模块的输入,则在平面图中将不会构造任何路径来指示资源之间的任何依存关系。
| 归档时间: |
|
| 查看次数: |
11737 次 |
| 最近记录: |