You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform获取创建时间超过7天的AWS镜像?

问题描述

我用以下Terraform代码片段获取镜像,但需求是镜像需创建满7天,如果最新镜像未满足该条件,则获取上一个镜像。请问该如何实现?

原代码片段:

recipe = {
  description       = "description"
  parent_image_arn  = "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2-x86/x.x.x"
  working_directory = "/tmp"
}
实现方案

要达成这个需求,得用Terraform的数据源查询该镜像系列的所有版本,筛选出创建满7天的,再挑最新的那个用。具体操作如下:

  1. 查询镜像全量版本
    用aws_imagebuilder_image数据源,指定不带版本号的镜像系列ARN,拉取所有可用的镜像版本:

    data "aws_imagebuilder_image" "amazon_linux_2" {
      image_arn = "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2-x86"
      type      = "AMAZON_MANAGED"
    }
    
  2. 过滤出创建满7天的镜像
    用Terraform内置函数过滤列表,只保留创建时间早于7天前的镜像:

    locals {
      eligible_images = [
        for img in data.aws_imagebuilder_image.amazon_linux_2.images : img
        if timeadd(timestamp(), "-7d") > img.date_created
      ]
    }
    
  3. 选取最新的符合条件镜像
    把筛选后的镜像按创建时间倒序排列,取第一个就是最新的合规镜像:

    locals {
      sorted_eligible_images = sort(local.eligible_images, (a, b) => b.date_created > a.date_created)
      target_image_arn       = local.sorted_eligible_images[0].image_arn
    }
    
  4. 替换到recipe配置里
    把原来固定的parent_image_arn换成上面得到的local.target_image_arn:

    recipe = {
      description       = "description"
      parent_image_arn  = local.target_image_arn
      working_directory = "/tmp"
    }
    
注意事项
  • 确保Terraform版本在0.14以上,不然不支持timeadd和lambda排序逻辑。
  • 如果筛选后没有符合条件的镜像,Terraform会直接报错,你可以按需添加兜底逻辑,比如用coalescelist指定一个默认镜像ARN。

内容的提问来源于stack exchange,提问作者srinin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:43:20