#python #arrays #aws-lambda #invoke
Вопрос:
У меня есть функция AWS Lambda ( Function1
) в Python 3.8. Он сканирует корзину S3 и выводит имена всех объектов в массив. Мне нужно отправить этот массив в другую лямбда-функцию ( Function2
), которая также написана на Python 3.8.
Function1
:
for each in contents:
print(each["Key"])
inputForInvoker.append({'SQLFilename': each["Key"]})
response = lambdac.invoke(
FunctionName='arn:aws:lambda:eu-west-2:169697352176:function:pyodbc',
InvocationType='RequestResponse',
Payload=json.dumps(inputForInvoker)
)
где contents
переменная-это массив словарей. Пример элемента массива из contents
приведен ниже для справки. Исходя из этого, я пытаюсь извлечь Key
ценность. Эта логика работает хорошо, потому что , когда я печатаю inputForInvoker
, она дает мне массив словарей.
Содержание contents
:
{'Key': 'body_aus.sql', 'LastModified': datetime.datetime(2021, 9, 8, 1, 34, 12, tzinfo=tzlocal()), 'ETag': '"xxx"', 'Size': 23, 'StorageClass': 'STANDARD', 'Owner': {'ID': 'yyy'}},
Выход из print(inputForInvoker)
:
[{'SQLFilename': 'body_aus.sql'}, {'SQLFilename': 'footer.sql'}, {'SQLFilename': 'header.sql'}, {'SQLFilename': 'test.sql'}]
Function2
:
def lambda_handler(event, context):
sqlFileName = event['SQLFileName']
print(sqlFileName)
Выход из Function2
:
{'SQLFilename': 'body_aus.sql'}
В идеале я должен был бы получить весь массив из Function1
вместо одного элемента.
Комментарии:
1. Событие должно быть объектом словаря, а не списком. Воспользуйся
Payload=json.dumps({"queries": inputForInvoker})
2. Сработало хорошо.. Спасибо @OluwafemiSule!