如何通过Ansible获取S3存储桶中超90天对象及配置Playbook条件
解决方案
Ansible 官方的aws_s3模块的list模式没有内置按存储时长筛选的参数,你需要先拉取指定前缀下的全量对象列表,再通过Jinja2过滤器做二次筛选,具体修改方式如下:
1. 修改现有列表查询任务
给你现有的aws_s3任务添加register字段存储查询结果,空的when条件可以直接删除:
- name: List all objects in specific bucket aws_s3: encrypt: yes aws_access_key: "{{ access_key }}" aws_secret_key: "{{ secret_key }}" mode: list bucket: "{{ bucket }}" prefix: "{{ database_name }}/" marker: "{{ database_name }}/" s3_url: "{{ s3_url }}" validate_certs: no register: s3_objects
2. 新增时长筛选步骤
新增任务筛选存储时长超过90天的对象,90天对应的秒数为7776000,直接通过时间戳对比即可:
- name: Filter objects older than 90 days set_fact: old_objects: >- {{ s3_objects.s3_keys | selectattr('last_modified', 'lt', '%Y-%m-%dT%H:%M:%S.%fZ' | strftime(ansible_date_time.epoch | int - 7776000)) | list }}
结果说明
筛选完成后你可以直接使用old_objects变量,里面就是所有符合条件的对象信息,包含对象名、大小、最后修改时间等属性。如果只需要对象名,可以再加map(attribute='key') | list过滤得到纯文件名列表。
内容的提问来源于stack exchange,提问作者Ravi Shankar
相关产品推荐
相关产品推荐

