У меня есть одна функция лямбды python, которая будет перечислять каждый файл в ведре S3 (код ниже). То, что я не понимаю, как это сделать, - передать each file object
другой лямбда-функции в качестве ввода и иметь отдельные исполнения. Цель состоит в том, чтобы x
количество файлов в списке, чтобы создать число x
второго lambdas для выполнения одновременно (т.е. Если в списке 20 файлов, затем выполните вторую лямбда с 20 исполнением с каждым файлом, переданным лямбда-функции соответственно). Файл будет использоваться во второй лямбда-функции для соединения в Pandas.
Радуйся за любую помощь!
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)
Спасибо @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()'