Сценарий выглядит следующим образом:
- Файлы поступают в случайное время
- Файлы должны обрабатываться, но не в режиме реального времени
- требуемые библиотеки слишком велики для лямбда-функции AWS
Предлагаемая архитектура:
- Настройте Событие Amazon S3 для отправки сообщения на Amazon SQS queue при получении файла
- Настройка Amazon CloudWatch Event для запуска Лямбда-функции AWS через регулярные интервалы (например, 1 час)
- Функция Lambda проверяет, есть ли в очереди сообщения
- Если есть сообщения, запускает экземпляр Amazon EC2 со сценарием пользовательских данных, которыйустанавливает и запускает систему обработки
- Система обработки будет:
- Захватить сообщение из очереди
- Обработка сообщения (без ограничений по лямбде)
- Удаление сообщение
- Если в очереди не осталось сообщений, прекратит работу экземпляра EC2
Это может быть очень экономически выгодно , потому что экземпляры Amazon EC2 Linux оплачиваются в секунду. Вы можете запустить несколько рабочих параллельно для обработки сообщений (но будьте осторожны при написании кода завершения, чтобы все работники завершили обработку сообщений). Или, если вещи не являются критичными по времени, просто выберите наименьший используемый тип экземпляра и однопотоковый, так как большие экземпляры в любом случае стоят дороже (поэтому они не лучше с экономической точки зрения).
Убедитесь, чтоВы устанавливаете мониторинг , чтобы обеспечить обработку сообщений. Реализуйте Dead Letter Queue в Amazon SQS, чтобы перехватывать сообщения, которые не обрабатываются, и помещайте CloudWatch Alarm в DLQ, чтобы уведомлять вас, если что-то идет не так.