我的任务是开发一种方法,以确保所有正在运行的实例都有当前快照(通常每天完成)。目前我所做的工作如下:
我的代码起作用了,非常慢.这将不适合有数万个实例的组织。,我有什么方法可以在不达到API调用的速率限制的情况下加快速度?
代码:
'''
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)发布于 2020-03-13 07:39:44
代码似乎正在为每个实例调用describe_snapshots()。
首先检索在所需时间范围内创建的所有快照的列表可能会更快。将它们存储在列表或字典中。
然后,在遍历每个实例时,只需查阅列表或字典来确认快照是否存在。
https://stackoverflow.com/questions/60650856
复制相似问题