【问题标题】:Terraform config for updating already existing launch template用于更新现有启动模板的 Terraform 配置
【发布时间】:2020-06-11 10:55:42
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 deployment continuous-integration terraform


    【解决方案1】:

    关于 terraform 通常需要注意的一点是,它希望拥有它所管理的任何资源的整个生命周期。

    在您的示例中,具有该名称的 aws_launch_template.update 已经存在,因此 terraform 本质上说,“我不拥有此资源,因此我不应该更改它。”

    这实际上是一个非常好的好处,因为它意味着 terraform 不会(或至少不应该)覆盖或删除它不知道的资源。

    现在,由于您引用的是现有的启动模板,我建议您将其置于 terraform 的所有权下(假设您被允许这样做)。为此,我建议

    • 在资源本身中硬编码启动模板的名称,而不是通过data 引用它,并且

    • Importing the resource 通过运行类似这样的命令

     terraform import aws_launch_template.update lt-12345678
    

    您将在其中将 lt-12345678 替换为您的实际启动模板 ID。这将使资源归 terraform 的所有,实际上允许通过 terraform 代码进行更新。

    如果您所处的环境是由其他人创建的,请注意不要踩到其他人的资源。

    【讨论】:

    • 这就像一个魅力。但我想如果我们按照 Terraform 的默认行为进行操作,这对我们来说是一个很好的做法。感谢您的回复。
    • 谢谢,我现在正在尝试这个并得到“资源实例密钥必须在方括号中给出。”与terraform import module.cms-test.aws_launch_template.launch-template.update lt-12345678。将发回最终工作的内容。
    • 这是因为我的资源被命名为“launch-template”而不是“update”,复制/粘贴/读取错误,有效!
    猜你喜欢
    • 2018-01-29
    • 2023-03-16
    • 2021-07-30
    • 2021-07-16
    • 2021-09-13
    • 2021-09-13
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多