【问题标题】:Terraform with aws to select ami based on tag with sort使用 aws 的 Terraform 根据带有排序的标签选择 ami
【发布时间】:2021-03-02 13:13:47
【问题描述】:

我正在构建一个 Terraform 配置,但我遇到了一个棘手的 ami 选择。我的 CI 构建 AMI 并根据 CI 上应用程序的当前构建在其上添加 MyVersionTag。我想根据这个标签选择AMI,按版本排序(X.Y.Z格式)取最新的。

这是我使用aws cli 选择我要使用的AMI 的命令行:

aws ec2 describe-images --filters 'Name=tag-key,Values=MyVersionTag' --query 'reverse(sort_by(Images[].{TagValue:Tags|[0].Value,ImageId:ImageId},&TagValue))|[0].ImageId'

我正在寻找一种使用此 AMI ID 配置 EC2 实例的方法。我看到了两种可能的方法(请纠正我):

  • aws_instance 纯 AMI ID 作为文本(命令行通过变量的结果)
  • aws_ami 带过滤器

有什么想法吗?

【问题讨论】:

  • 你试过aws_ami吗?
  • 是的,有过滤器。但我无法排序并选择最后一个。
  • 您始终可以使用data "external" "my_ami" { ... } 在 terraform 中运行 sn-p 并使用其输出。
  • 这是最佳实践吗?我认为这是最后要做的事情。
  • 好的。所以我有一个解决方案。我会在下面添加它。 ???感谢您的建议。

标签: amazon-web-services amazon-ec2 terraform amazon-ami


【解决方案1】:

我终于使是使用external 关键字。这是我的解决方案:

# example.tf

resource "aws_instance" "my-instance" {
  ami = data.external.latest_ami.result.ImageId
  # Other config
}

data "external" "latest_ami" {
  program = ["sh", "latest_ami_id.sh"]
  # Or simply
  program = ["aws", "ec2", "describe-images", "--filters", "Name=tag-key,Values=MyVersionTag", "--query", "reverse(sort_by(Images[].{TagValue:Tags|[0].Value,ImageId:ImageId},&TagValue))|[0].ImageId"]
}

# latest_ami_id.sh

#!/bin/bash

# It returns a json with following keys :
#. ImageId, Description, Tags (version actually)
aws ec2 describe-images --filters "Name=tag-key,Values=SecretCore" --query 'reverse(sort_by(Images[].{TagValue:Tags|[0].Value,ImageId:ImageId},&TagValue))|[0].ImageId'

希望它会帮助别人。 ??

【讨论】:

  • 不需要脚本文件。你可以使用program = ["aws", "ec2", "describe-images", "--filters", "Name=tag-key,Values= MyVersionTag", "--query", "Images[].{Tags:Tags|[0].Value,ImageId:ImageId,Description:Description}|[0]"]
  • 我也添加了你的版本。谢谢!
  • 如果你开始添加一些变量作为命令的输入,第二个版本特别好:)
  • 100% 正确。我可以自己使用它和我想到的一些自定义版本。 ?? 例如标签名称可以是一个变量.. 易于更改。易于审查。更好。
  • @luk2302 我已经更新了命令行。上一个不正确。
猜你喜欢
  • 2021-10-23
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多