如何使用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天的,再挑最新的那个用。具体操作如下:
查询镜像全量版本
用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" }过滤出创建满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 ] }选取最新的符合条件镜像
把筛选后的镜像按创建时间倒序排列,取第一个就是最新的合规镜像: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 }替换到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
相关产品推荐
相关产品推荐

