AWS Lambda (python): передать список путей к файлам и выполнить каждый файл как отдельную лямбду - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть одна лямбда-функция Python, которая перечисляет каждый файл в сегменте S3 (код ниже).Что мне не ясно, как это сделать, так это передать each file object другой лямбда-функции в качестве входных данных и иметь отдельные исполнения.Цель состоит в том, чтобы иметь x количество файлов в списке, чтобы создать x количество вторых лямбд для одновременного выполнения (т. Е. Если в списке 20 файлов, то выполнить вторую лямбду с 20 исполнениями при каждом передаваемом файле).к лямбда-функции соответственно).Файл будет использоваться во второй лямбда-функции для объединения в Pandas.

Очень ценю любую помощь!

Список файлов (лямбда-1)

import boto3

#Start session with Profile
session = 
boto3.session.Session(profile_name='<security_token_service_profile>')

client = session.client('s3') #low-level functional API
resource = session.resource('s3') #high-level object-oriented API

#State S3 bucket
my_bucket = resource.Bucket('<bucket>') #subsitute this for your s3 bucket name. 

#List all files
files = list(my_bucket.objects.filter(Prefix='<path_to_file>'))

print(files)

1 Ответ

0 голосов
/ 22 сентября 2018

Спасибо, @jarmod!Это сработало.Для тех, кому это может понадобиться в будущем, мой лямбда-скрипт выше был изменен следующим образом:

import boto3
import json

print('[INFO]  Loading Function')

def lambda_handler(event, context):

    print("[INFO]  Received event: " + json.dumps(event, indent=2))

    #Start session with region details for authentication
    session = boto3.session.Session(region_name='<region>')
    client = session.client('s3') #low-level functional API
    resource = session.resource('s3') #high-level object-oriented API

    #Identify S3 bucket
    my_bucket = resource.Bucket('<bucket>') #subsitute this for your s3 bucket name. 

    #List all files
    files = list(my_bucket.objects.filter(Prefix='<file_path>'))

    for file in files:
        payload = json.dumps({"key": file.key})
        print(payload)
        client_lambda = session.client('lambda')
        client_lambda.invoke(
            FunctionName='<lambda_function_name_to_call>',
            InvocationType='Event',
            LogType='None',
            Payload=payload
        )


if __name__ == '__main__':
    lambda_handler()`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...