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

如何使用Python boto3查询AWS账号下最近1小时创建的AMI列表

解决方案:查询AWS账号下最近1小时创建的AMI列表

现有代码核心问题

  • 时间计算逻辑错位:原ami_days_old函数接收了AMI创建时间参数但未做任何解析计算,直接返回1小时前的时间点,完全无法实现时间差对比
  • 缺少时区适配:AWS返回的CreationDate为UTC时区的ISO格式字符串,直接和本地时间对比会出现时区偏移误差
  • 无AMI创建状态校验:部署前需要确认所有AMI创建完成,因此需要额外判断State字段是否为available

修正后可直接运行代码

#!/usr/bin/env python3
import boto3
import datetime
from datetime import timezone

# 配置项:查询最近N小时内的AMI
SEARCH_HOURS = 1
aws_profile_name = 'default'

# 初始化boto3客户端
boto3.setup_default_session(profile_name=aws_profile_name)
ec2 = boto3.client('ec2')

# 替换为你实际的AMI过滤规则
custom_filter = [{
    'Name':'<redacted>', 
    'Values': ['<redacted>']
}]

def get_recent_available_amis():
    # 计算UTC时区下的时间截止点,和AWS返回的时间时区对齐
    cutoff_time = datetime.datetime.now(timezone.utc) - datetime.timedelta(hours=SEARCH_HOURS)
    matched_amis = []
    
    amis = ec2.describe_images(Owners=['self'], Filters=custom_filter)
    for ami in amis['Images']:
        # 转换AWS返回的ISO时间格式为可计算的datetime对象
        create_date_str = ami['CreationDate'].replace('Z', '+00:00')
        create_date = datetime.datetime.fromisoformat(create_date_str)
        
        # 筛选符合时间范围的AMI,同时保留创建状态便于后续校验
        if create_date >= cutoff_time:
            matched_amis.append({
                'ami_id': ami['ImageId'],
                'name': ami['Name'],
                'create_time': ami['CreationDate'],
                'status': ami['State']
            })
    return matched_amis

def main():
    recent_amis = get_recent_available_amis()
    print(f"最近{SEARCH_HOURS}小时内创建的AMI共{len(recent_amis)}个:")
    for ami in recent_amis:
        print(f"ID: {ami['ami_id']}, 状态: {ami['status']}, 创建时间: {ami['create_time']}")
    
    # 部署前置判断逻辑:所有符合时间范围的AMI都创建完成才返回可部署标识
    all_available = all(ami['status'] == 'available' for ami in recent_amis)
    if all_available:
        print("所有AMI均已创建完成,可启动部署流程")
    else:
        print("存在仍在创建中的AMI,请稍后再试")

if __name__ == "__main__":
    main()

关键调整说明

  • 所有时间计算统一使用UTC时区,完全避免时区偏差导致的筛选错误
  • 修正了时间对比逻辑,先计算1小时前的时间截止点,再逐个比对AMI创建时间
  • 新增了AMI状态校验字段,可直接通过返回的all_available变量判断是否满足部署前置条件
  • 返回结构化的AMI列表,方便后续业务逻辑直接调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:24:03