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

Ansible按创建日期过滤AWS AMI ID及报错解决与范围查询

问题与解决方案

原Ansible代码

- name: 收集所有带有Version标签的AMI信息
  amazon.aws.ec2_ami_info:
    filters:
      "tag:Version": "*"
  register: ec2ami_result 

- debug:
    msg: "{{ ec2ami_result  }}"
- set_fact:
    AMI_newid: "{{ ec2ami_result | json_query('images[?(@.creation_date=='2020-06-30T05:17:36.000Z')].image_id') }}"

报错信息

fatal: [localhost]: FAILED! => {"msg": "template error while templating string: expected token ',', got 'integer'. String: {{ ec2ami_result | json_query('images[?(@.creation_date=='2020-06-30T05:17:36.000Z')].image_id') }}"}

问题

  1. 如何修复上述报错?
  2. 如何获取指定日期(例如2020-05-20)之前创建的所有image_id?

修复方案

1. 修复json_query的引号冲突问题

报错核心是字符串嵌套引号语法冲突:json_query参数用单引号包裹,内部日期字符串也用了单引号,导致Ansible模板解析时识别错误。以下两种方式均可解决:

方式一:转义内部单引号

- set_fact:
    AMI_newid: "{{ ec2ami_result | json_query('images[?(@.creation_date==\\'2020-06-30T05:17:36.000Z\\')].image_id') }}"

方式二:外层用单引号,内部json_query参数用双引号

- set_fact:
    AMI_newid: '{{ ec2ami_result | json_query("images[?(@.creation_date=='2020-06-30T05:17:36.000Z')].image_id") }}'

2. 更高效的过滤方式:直接在模块中过滤

相比先拉取所有AMI再用json_query二次过滤,直接利用amazon.aws.ec2_ami_info模块的filters参数过滤,能减少数据传输量,效率更高:

获取指定时间点创建的AMI

- name: 收集指定时间创建的带Version标签的AMI信息
  amazon.aws.ec2_ami_info:
    filters:
      "tag:Version": "*"
      creation-date: "2020-06-30T05:17:36.000Z"
  register: ec2ami_result

- set_fact:
    AMI_newid: "{{ ec2ami_result.images | map(attribute='image_id') | list }}"

获取指定日期之前创建的所有AMI

如果要获取2020-05-20之前创建的AMI,可使用AWS的日期范围过滤语法[*, 目标日期],表示小于等于目标日期的范围:

- name: 收集2020-05-20之前创建的带Version标签的AMI信息
  amazon.aws.ec2_ami_info:
    filters:
      "tag:Version": "*"
      creation-date: "[*, 2020-05-20]"
  register: ec2ami_result

- set_fact:
    AMI_old_ids: "{{ ec2ami_result.images | map(attribute='image_id') | list }}"

按年份批量过滤

如果需要获取某一年(比如2020年)的所有AMI,可使用通配符简化过滤规则:

- name: 收集2020年创建的带Version标签的AMI信息
  amazon.aws.ec2_ami_info:
    filters:
      "tag:Version": "*"
      creation-date: "2020-*"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:45:37