我正在尝试使用 Terraform 更新 AWS 上现有的启动模板。 以下是 Terraform 的配置。
resource "aws_launch_template" "update" {
name = data.aws_launch_template.config.name
image_id = data.aws_ami.ubuntu.id
instance_type = "c5.large"
// arn = data.aws_launch_template.config.arn
}
传递名称时会抛出错误 400 并显示以下错误。
Error: InvalidLaunchTemplateName.AlreadyExistsException: Launch template name already in use.
我想要相同的启动模板,但只需更新版本。在terraform官方网站上找不到任何修改模板的文档。或者我错过了什么?
操作系统 - macOS Catalina
Terraform 版本 - v0.12.21
最佳答案
关于 terraform 一般来说,需要注意的一件事是它希望拥有其管理的任何资源的整个生命周期。
在您的示例中,具有该名称的 aws_launch_template.update
已经存在,因此 terraform 本质上说,“我不拥有此资源,所以我不应该更改它。”
这实际上是一个非常好的好处,因为这意味着 terraform 不会(或至少不应该)覆盖或删除它不知道的资源。
现在,由于您正在引用现有的启动模板,我建议将其置于 terraform 的所有权之下(假设您被允许这样做)。为此,我建议
在资源本身中对启动模板的名称进行硬编码,而不是通过
数据
引用它,并且Importing the resource 通过运行这样的命令
terraform import aws_launch_template.update lt-12345678
您可以将 lt-12345678
替换为您的实际启动模板 ID。这将使资源处于 terraform 的所有权之下,并实际上允许通过 terraform 代码进行更新。
如果您处于由其他人创建的环境中,请小心不要侵犯其他人的资源。
关于amazon-web-services - 用于更新现有启动模板的 Terraform 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60433046/