Terraform 模块内的执行顺序

问题描述 投票:0回答:1

我遇到了 terraform 脚本中模块的执行顺序问题。我已经提出了源代码库的问题。 https://github.com/hashicorp/terraform/issues/18143

有人可以在这里或 GitHub 上帮助我解决这个问题吗?

terraform consul
1个回答
7
投票

执行不会等待“vpc”模块完成,而只等待“module.vpc.vpc_id”值可用。为此,执行 aws_vpc 资源就足够了。因此,您实际上并没有告诉 TerraForm 也等待 consul_keys 资源。

要解决此问题,您必须将 consul_keys 资源的依赖项添加到其他模块。这可以通过以下方式实现:

  1. 在其他模块(数据中心或 var.name>)中使用 consul_keys 导出的值
  2. 将依赖consul_keys的资源转储到同一个文件中。

遗憾的是,目前还没有很好的解决方案,但模块依赖关系正在处理中。

编辑: 作为将所有资源转储到同一文件中的示例:

这不起作用,因为没有模块依赖关系:

module "vpc" {
    ...
}

module "other" {
 depends_on=["module.vpc"]
}

vpc模块文件:

resource "aws_instance" "vpc_res1" {
    ...
}

resource "consul_keys" "my_keys" {
    ...
}

其他模块文件:

resource "aws_instance" "other_res1" {
    ...
}

resource "aws_instance" "other_res2" {
    ...
}

将所有内容放在同一个文件中是可行的。您还可以将“vpc_res1”资源保留在单独的模块中:

resource "consul_keys" "my_keys" {
    ...
}

resource "aws_instance" "other_res1" {
    depends_on = ["consul_keys.my_keys"]
}

resource "aws_instance" "other_res2" {
    depends_on = ["consul_keys.my_keys"]
}
© www.soinside.com 2019 - 2024. All rights reserved.