gpt4 book ai didi

terraform - 如果 user_data 无法运行完成,如何使 aws_instance 创建失败

转载 作者:行者123 更新时间:2023-12-04 02:35:38 24 4
gpt4 key购买 nike

如果传递给 user_data 的脚本无法运行,是否有可能使 aws_instance 创建失败?例如,退出 1?

我有一个使用depends_on [aws_instance.myVM] 将JSON 发布到实例的null_resource,当user_data 脚本失败时,我需要使depends_on 失败。

谢谢!

最佳答案

user_data由运行在实例本身内部的软件处理,例如 cloud-init ,因此它的处理与 ec2:RunInstances 异步调用 Terraform 的 AWS 提供程序启动实例运行。因此无法从 user_data 反馈状态信息。处理,因为它可能会在 EC2 API 开始报告实例“正在运行”后运行一段时间,具体取决于它在启动过程中的处理位置。

另外,depends_on用于订购而不是用于处理错误,因此 depends_on子句永远不会改变有关 Terraform 错误处理的任何内容。

如果您想在您的实例上同步运行软件作为 Terraform 创建操作的一部分,那么不幸的是唯一实用的选择是使用 the remote-exec provisioners .这是以一些相当大的额外复杂性为代价的,因为 Terraform 现在必须能够打开与实例的 SSH session 并对其进行身份验证以创建双向通信 channel 。

作为这种复杂性的返回,Terraform 可以运行相关代码,因此 Terraform 可以检测它是否成功(使用其退出状态)。如果远程命令失败,Terraform 将停止进一步处理,返回错误,并将实例标记为受污染,以便下一个计划将尝试再次创建它。

话虽如此,最好找到一种不同的方式来实现您的目标,不需要将 Terraform 运行直接耦合到虚拟机中运行的软件的状态。通常不需要 Terraform 配置既需要启动虚拟机,又需要在同一操作中与在该虚拟机中运行的软件进行交互。对于某些系统分解来说,这可能是一个好点,其中您有一个 Terraform 配置声明虚拟机应该存在,然后第二个配置假设虚拟机存在并对其采取行动。然后,您可以运行在这两者之间运行所需的任何其他软件,以检查实例是否成功启动。

关于terraform - 如果 user_data 无法运行完成,如何使 aws_instance 创建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62074303/

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