Лямбда запускается и истекает через 3 секунды, в результате чего мой сценарий делает 3 снимка вместо одного. Тогда это не продолжается с остальной частью сценария. Когда я запускаю скрипт на экземпляре ec2, скрипт работает нормально. Мне также было интересно, будет ли лучше разделить этот сценарий на два сценария.
import boto3
from datetime import date
SOURCE_REGION = 'us-east-1'
DEST_REGION = 'us-west-2'
ec2_source = boto3.client('ec2', region_name = SOURCE_REGION, config=Config(connect_timeout=5, read_timeout=60, retries={'max_attempts': 2}))
ec2_destination = boto3.client('ec2', region_name = DEST_REGION, config=Config(connect_timeout=5, read_timeout=60, retries={'max_attempts': 2}))
def lambda_handler(event, context):
volumes = ec2_source.describe_volumes(Filters=[{'Name':'tag:Backup','Values':['Yes']}])['Volumes']
for volume in volumes:
print('Getting:', volume['VolumeId'])
response = ec2_source.create_snapshot(
Description = 'Prod_' + volume['VolumeId'],
VolumeId = volume['VolumeId'],
)
SourceVolumeID = response['SnapshotId']
ec2_source.create_tags(Resources=[SourceVolumeID],
Tags=volume['Tags']
)
SourceTagID = response['SnapshotId']
ec2_source.delete_tags(Resources=[SourceTagID],
Tags=[ {'Key': 'Backup', 'Value': 'Yes' },]
)
SourceTagID = response['SnapshotId']
ec2_source.create_tags(Resources=[SourceTagID],
Tags=[ {'Key': 'Backup', 'Value': 'Complete' },]
)
SourceTagID = response['SnapshotId']
ec2_source.create_tags(Resources=[SourceTagID],
Tags=[ {'Key': 'Done', 'Value': 'Copied' },]
)
try:
waiter = ec2_source.get_waiter('snapshot_completed')
waiter.wait(
SnapshotIds=[SourceTagID],
DryRun=False,
WaiterConfig={'Delay': 10,'MaxAttempts': 123}
)
except botocore.exceptions.WaiterError as e:
print(e.message)
snaps = ec2_source.describe_snapshots(OwnerIds=['self'], Filters=[{'Name':'tag:Backup','Values':['Complete']}])['Snapshots']
Tday = date.today()
Tday_snaps = [ s for s in snaps if s['StartTime'].date() == Tday ]
for Tday_s in Tday_snaps:
print('Copying:', Tday_s['SnapshotId'])
DestinationSnapshot = ec2_destination.copy_snapshot(
SourceSnapshotId = Tday_s['SnapshotId'],
SourceRegion = SOURCE_REGION,
Description = Tday_s['VolumeId']
)
DestinationTagID = DestinationSnapshot['SnapshotId']
ec2_destination.create_tags(Resources=[DestinationTagID],
Tags=Tday_s['Tags']
)
DestinationTagID = DestinationSnapshot['SnapshotId']
ec2_destination.delete_tags(Resources=[DestinationTagID],
Tags=[ {'Key': 'Backup', 'Value': 'Complete' },]
)