amazon-web-services - 用于更新现有启动模板的 Terraform 配置

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

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

相关文章:

amazon-web-services - 使用 AWS Lambdas 无服务器应用程序模型构建多页面无服务器应用程序

amazon-web-services - 是否安装了 EBS 卷?在哪里?

amazon-web-services - AWS Fargate 真的像 Lambda 一样无服务器吗?完成任务后会自动关闭吗?

ruby-on-rails - Capistrano 3 assets :precompile takes hours. 在 css 文件处停止

postgresql - 如何将使用 postgresql 的 sinatra 应用程序部署到 appfog

android - 通过 Google Play 商店在没有 Google Apps 的私有(private) channel 中部署应用程序?

python - ValueError:无效的终结点:https://s3..amazonaws.com

ruby-on-rails - 橡胶帽 :create_staging failed near end

python - Mongod 占用 100% CPU - 不确定如何诊断?

deployment - 部署后出现ClickOnce错误-计算出的哈希值与 list 中指定的值不同