#amazon-web-services #amazon-s3 #aws-lambda #aws-step-functions
Вопрос:
Мне интересно, знает ли кто-нибудь о каком-либо способе запуска лямбда-функции после завершения/остановки всех других лямбда-функций. Я изучил пошаговые функции AWS, но, похоже, они не подходят для моего варианта использования, а если и подходят, то я не уверен, как это сделать.
Для контекста я пытаюсь кэшировать некоторые детали проекта после того, как все записи или новые записи были вставлены в базу данных. Поток, которого я пытаюсь достичь, выглядит примерно так:
Возможно ли что-то подобное? Если нет, какие-либо другие рекомендации (например, cron-задания)? Я использую MongoDB (Атлас), если это тоже поможет.
Буду признателен за любой совет! Заранее благодарю вас!
Комментарии:
1. Почему функции AWS Step не подходят для этого случая использования? Он поддерживает как последовательные зависимости, так и параллельные выполнения
2. Из того, что я исследовал, я не видел способа запуска пошаговых функций из пакетной загрузки S3. Один файл будет считаться событием, которое затем вызовет несколько экземпляров пошаговых функций. Разве это неправильно? Я провел исследование, но не тонну.
3. Хорошо, один из возможных способов-уведомить тему SNS, как только пакет файлов будет загружен в S3, и запустить пошаговые функции и прочитать файлы из S3 вместо триггера события S3. Это позволит клиентам узнать, как только все файлы S3 будут загружены. И функция Step может перебирать файлы, чтобы один лямбда-код мог обрабатывать все файлы ( docs.aws.amazon.com/step-functions/latest/dg/… ), а затем вызовите конечную лямбда-функцию. Это помогает сохранить все без изменений
4. О да, это может сработать! Не могли бы вы случайно указать мне, как уведомлять SNS после загрузки пакета файлов? Я вижу, что это возможно, просто не знаю, как это настроить.
5. Это должно быть сделано тем же источником, который загружает файлы S3, после завершения пакетной загрузки s3 необходимо выполнить дополнительный вызов для вставки сообщения в тему SNS
Ответ №1:
Это может быть то, что вы ищете: (Как только вы объедините результаты, вы сможете запустить другую лямбду по вашему выбору)
{
"Comment": "Parallel Example.",
"StartAt": "Process S3",
"States": {
"Process S3": {
"Type": "Parallel",
"Next": "Merge Results",
"Branches": [
{
"StartAt": "Upload S3 A",
"States": {
"Upload S3 A": {
"Type": "Task",
"Resource":
"arn:aws:lambda:us-east-1:123456789012:function:foobar",
"Next": "Process S3 A"
},
"Process S3 A": {
"Type": "Task",
"Resource":
"arn:aws:lambda:us-east-1:123456789012:function:foobar",
"End": true
}
}
},
{
"StartAt": "Upload S3 B",
"States": {
"Upload S3 B": {
"Type": "Task",
"Resource":
"arn:aws:lambda:us-east-1:123456789012:function:foobar",
"Next": "Process S3 B"
},
"Process S3 B": {
"Type": "Task",
"Resource":
"arn:aws:lambda:us-east-1:123456789012:function:foobar",
"End": true
}
}
}
]
},
"Merge Results":{
"Type": "Task",
"Resource":
"arn:aws:lambda:us-east-1:123456789012:function:foobar",
"End":true
}
}
}