gpt4 book ai didi

dependencies - Terraform:在其他模块之前调用 null_resource (local-exec)

转载 作者:行者123 更新时间:2023-12-04 08:57:17 25 4
gpt4 key购买 nike

我有一个 python 脚本,它为我使用 terraform 创建的每个 AWS EC2 实例生成自定义 cloud-init 脚本。但现在我无法对 terraform apply 进行一次调用,因为 cloud-init 的文件当时不存在,而且我收到错误消息。所以现在我正在执行 terraform apply -target=null_resource.pynit_lite 来生成文件,然后 terraform apply 来创建基础设施。

我想要的是先执行 null_resource,然后执行其余的,以便在创建 ec2 资源时存在 cloud-init 文件,这样我就可以对 terraform apply 进行一次调用

我想我需要实现某种“depends_on”,以便 EC2 模块等待 null_resource 完成,但这不是 terraform 中的功能。

我的代码是这样的:

provider "aws" {
region = var.region
profile = var.profile
}

resource "null_resource" "pynit_lite" {
provisioner "local-exec" {
command = "python3 pynit_lite.py"
}
}

data "aws_vpc" "devvpc" {
id = var.vpc_id
}

data "aws_subnet_ids" "devsubs" {
vpc_id = var.vpc_id
}

module "EC2" {
source = "../../../Modules/EC2"

name = var.instanceNames
DSKsize = var.DSKsize
root_volume_size = var.root_volume_size
ami = var.ami
instance_count = length(var.instanceNames)
instance_type = var.instance_type
key_name = var.key_name
ec2_security_group_ids = var.ec2_security_group_ids
script = var.scripts

subnet = var.subnet
vpc = var.vpc_id
}

output "EIP-public" {
value = module.EC2.EIPAddress
}
output "EIP-internal" {
value = module.EC2.InternalIps
}

我看过这个问题,但没有为此提供解决方案:Unable to make Terraform module dependent on resource

这是非阻塞的,但肯定很烦人,因此非常感谢任何帮助。

谢谢。

最佳答案

自最近(terraform 13)以来,模块还支持资源已经可以使用的 depends_on 特性。 medium 上有一篇非常棒的文章,它解释了如何完成这样的结构。在您的情况下,这将是:

resource "null_resource" "pynit_lite" {
provisioner "local-exec" {
command = "python3 pynit_lite.py"
}
}

module "EC2" {
# ...
depends_on = [null_resource.pynit_lite]
}

另一种不太可行的方法是使用带有 terragrunt 的 before-hook,它是 terraform 的薄包装。在这个之前的钩子(Hook)中,您还可以运行您的命令。您可以阅读更多相关信息 here .示例:

terraform {
before_hook "before_hook" {
commands = ["apply", "plan"]
execute = ["python3", "pynit_lite.py"]
}
}

关于dependencies - Terraform:在其他模块之前调用 null_resource (local-exec),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63747774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com