Тайм-аут кода при попытке запуска как лямбда-функции в AWS - PullRequest
0 голосов
/ 12 февраля 2019

Ниже приведен мой код, и я надеюсь, что кто-нибудь может помочь мне в очистке кода и повышении его эффективности.По сути, код должен перебирать все тома в моей учетной записи AWS, а затем перечислять все непомеченные тома и затем отправлять электронное письмо.Тем не менее, он истекает при запуске его как лямбда-функции в AWS, но если я запускаю его локально, это займет более 30 минут для завершения (хотя это действительно завершить).Я уверен, что это перебирает вещи, которые ему не нужны.

Также, если я распечатываю список ec2_instances, я вижу дублированные значения, поэтому я хочу иметь только уникальные значения, чтобы не повторять сценарий для каждого экземпляра ec2.

import logging
import boto3
from smtplib import SMTP, SMTPException
from email.mime.text import MIMEText

logger = logging.getLogger()
logger.setLevel(logging.INFO)

session = boto3.Session(profile_name="prod")
client = session.client('ec2')

untagged_volumes = []
detached_volumes = []
ec2_instances = []

response = client.describe_volumes()

for volume in response['Volumes']:
    if 'Tags' in str(volume):
        continue
    else:
        if 'available' in str(volume):
            detached_volumes.append(volume['VolumeId'])
        else:
            untagged_volumes.append(volume['VolumeId'])
            untagged_volumes.append(volume['Attachments'][0]['InstanceId'])
            ec2_instances.append(volume['Attachments'][0]['InstanceId'])

unique_instances = list(set(ec2_instances))

# Create the msg body.
msg_body_list = []
for instance in unique_instances:
    desc_instance = client.describe_instances()

    # append to the msg_body_list the lines that we would like to show on the email
    msg_body_list.append("VolumeID: {}".format(desc_instance['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['VolumeId']))
    msg_body_list.append("Attached Instance: {}".format(desc_instance['Reservations'][0]['Instances'][0]['InstanceId']))

    # if there are tags, we will append it as singles lines as far we have tags
    if 'Tags' in desc_instance['Reservations'][0]['Instances'][0]:
        msg_body_list.append("Tags:")
        for tag in desc_instance['Reservations'][0]['Instances'][0]['Tags']:
            msg_body_list.append("    Key: {} | Value: {}".format(tag['Key'], tag['Value']))
    # in case we don't have tags, just append no tags.
    else:
        msg_body_list.append("Tags: no tags")
        msg_body_list.append("--------------------")

# send email
mail_from = "xxx@xxx.com"
mail_to = 'xxx@xxx.com'

msg = MIMEText("\n".join(msg_body_list))
msg["Subject"] = "EBS Tagged Instance Report for"
msg["From"] = mail_from
msg["To"] = mail_to

try:
    server = SMTP('xxx.xxx.xxx.xxx', 'xx')
    server.sendmail(mail_from, mail_to.split(','), msg.as_string())
    server.quit()
    print('Email sent')
except SMTPException:
    print('ERROR! Unable to send mail')

1 Ответ

0 голосов
/ 12 февраля 2019

Лямбда-функции имеют ограничение по времени 15 минут.Это является причиной истечения времени ожидания - если вам нужно дольше запускать сценарии, найдите AWS Fargate .

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