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

如何使用Ansible删除AWS S3存储桶中创建超过90天的对象

调整方案

你现有的aws_s3模块delobj模式不支持直接按创建时间过滤对象,需要先拉取指定前缀下的对象列表做时间筛选,再批量执行删除,完整调整后的代码如下:

# 第一步:拉取指定前缀下的所有S3对象列表
- name: fetch all objects under target prefix
  aws_s3:
    encrypt: yes
    aws_access_key: "{{ access_key }}"
    aws_secret_key: "{{ secret_key }}"
    bucket: "{{ bucket }}"
    prefix: "{{ database_name }}/"
    mode: list
    s3_url: "{{ s3_url}}"
    validate_certs: no
  register: s3_objects

# 第二步:过滤出创建时间超过3个月的对象并删除
- name: delete objects older than 3 months
  aws_s3:
    encrypt: yes
    aws_access_key: "{{ access_key }}"
    aws_secret_key: "{{ secret_key }}"
    bucket: "{{ bucket }}"
    object: "{{ item.key }}"
    mode: delobj
    s3_url: "{{ s3_url}}"
    validate_certs: no
  loop: "{{ s3_objects.s3_keys | map('community.aws.s3_object_info', bucket=bucket, aws_access_key=access_key, aws_secret_key=secret_key, s3_url=s3_url, validate_certs=no) | list | selectattr('last_modified', 'lt', ('-3 months' | to_datetime)) | list }}"
  # 用相对时间'-3 months'做时间判断,自动适配不同月份的天数差异,比固定秒数计算更精准

注意事项

  • 若你使用的Ansible版本较低,不支持community.aws.s3_object_info过滤器,可以替换为单独调用community.aws.s3_object_info模块拉取对象元数据再过滤,逻辑完全一致。
  • 正式执行删除前建议添加--check参数做试运行,确认要删除的对象符合预期,避免误删。
  • 原有代码里的marker参数不需要保留,拉取对象列表时模块会自动处理分页逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:04