Разделение большей работы на более короткие функции Lambda - PullRequest
0 голосов
/ 11 июня 2019

У меня есть бессерверная лямбда на AWS, которая проходит по циклу данных (pandas) и для каждого отдельного индекса вызывает другую лямбду (через SNS), которая выполняет фактическую обработку.Фактическая обработка может занять несколько секунд, чтобы приблизиться к минуте.

Я попытался поместить в цикл таймер сна. Фрейм данных имеет около 2000 строк и 3 столбца.Таким образом, за 15 минут будет сделано около 2000 лямбда-звонков.

Если сон слишком длинный, лямбда верхнего уровня не заканчивается в течение 15 минут.Если сон слишком низкий, то время ожидания отдельной лямбды может быть вызвано слишком большим количеством одновременных лямбд.(Кроме того, лямбды читают json-файл, который довольно большой - около 30 МБ из объекта S3)

def invoke_controller(event, context):

    if event != '':
        message = json.loads(event['Records'][0]['Sns']['Message'])
        function_name = message.get('function_name','DoSomething')

    sns_arn = sns_arn_prefix + function_name

    for index, row in dataframe.iterrows():
        print('Publishing data for {} to SNS ({})'.format(row.Id, function_name))
        client = boto3.client('sns')
        response = client.publish(
            TopicArn=sns_arn,
            Message=json.dumps(dict(row)),
        )
        time.sleep(sleep_time)

Я рассмотрел разделение фрейма данных и обработку их отдельно.Но мне интересно, есть ли более простой способ добиться этого?

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