Лямбда истекает через 3 секунды - PullRequest
0 голосов
/ 08 апреля 2020

Лямбда запускается и истекает через 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' },]
          )

1 Ответ

0 голосов
/ 08 апреля 2020

Время ожидания лямбды по умолчанию составляет 3 секунды. Для обновления go на консоли Lambda и выберите свою Lambda. Затем немного прокрутите вниз до «Basi c Settings». Выберите это:

enter image description here

И обновите по мере необходимости.

Если вы используете aws cli, вы можете запустить что-то вроде:

aws lambda update-function-configuration --function-name functionName --timeout 45

для изменения лямбда-функции functionName на 45 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...