首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种检查数千个EC2实例是否有快照的有效方法?

一种检查数千个EC2实例是否有快照的有效方法?
EN

Stack Overflow用户
提问于 2020-03-12 09:16:15
回答 1查看 199关注 0票数 0

我的任务是开发一种方法,以确保所有正在运行的实例都有当前快照(通常每天完成)。目前我所做的工作如下:

  1. 分页遍历每个实例,
  2. 交叉引用它的卷ID与任何带有卷ID的快照,
  3. 筛选器只创建‘今天’的快照。

我的代码起作用了,非常慢.这将不适合有数万个实例的组织。,我有什么方法可以在不达到API调用的速率限制的情况下加快速度?

代码:

代码语言:javascript
复制
'''
Checks for a current snapshot for every instance, if it has one it is compliant, otherwise non-compliant.
'''

from datetime import datetime, date, timedelta
import boto3
ec2client = boto3.client('ec2', region_name='us-east-1')

# Create a  Paginator
paginator = ec2client.get_paginator('describe_instances')
instances = paginator.paginate().build_full_result()

for reservation in instances["Reservations"]:
    for instance in reservation["Instances"]:

        # Set base value
        compliant = "Non-compliant"

        # Lists all storage devices attached to instance.
        block_device_mappings = instance["BlockDeviceMappings"]

        for block in block_device_mappings:
            ebs = block.get("Ebs", False)

            # Volume ID of instances storage, use to find Snapshots.
            volume_id = ebs.get("VolumeId", False)

            # Wild card for filtering snapshots that occured today
            compliant_time_frame = date.isoformat(date.today()) + '*'

            snapshots = ec2client.describe_snapshots(
                    Filters=[
                    {'Name': 'volume-id','Values': [volume_id]},
                    {'Name': 'start-time', 'Values': [compliant_time_frame]}
                ]
            )
            snapshots = snapshots.get("Snapshots", [])

            # If snapshots exist, instance is compliant
            # We have already drilled down for current snapshots in .describe_snapshots() filter
            if len(snapshots) > 0:
                compliant = "Compliant"

        print(instance.get("InstanceId"), compliant)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-13 07:39:44

代码似乎正在为每个实例调用describe_snapshots()

首先检索在所需时间范围内创建的所有快照的列表可能会更快。将它们存储在列表或字典中。

然后,在遍历每个实例时,只需查阅列表或字典来确认快照是否存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60650856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档