Хотя вы можете создать весь веб-сайт только в Lambda, вы должны учесть следующее:
- Lambda позади API-шлюза имеет ограничение времени ожидания 30 секунд и ограничение размера полезной нагрузки (как полученные, так и отправлено) 6 МБ. Хотя в большинстве случаев это нормально, если у вас есть действительно большие операции или вам нужно отправить действительно большие данные (например, изображения с высоким разрешением), вы не можете сделать это с помощью этого подхода, но вам нужно подумать о что-то еще (например, вы можете отправить SNS в другую лямбда-функцию с более высоким тайм-аутом, которая может делать все это асинхронно, а затем отправлять результат клиенту, когда это будет сделано, предполагая, что клиент способен принимать события)
- У Lambda холодные запуски, что в терминах замедляет ваши API, когда клиент вызывает их впервые за короткое время. Время холодного старта зависит от языка, на котором вы делаете свои лямбды, так что вы можете подумать и об этом. Если вы используете C# или Java для своих Lambdas, то это, вероятно, не лучший выбор. С этой точки зрения, Node.JS и Python, похоже, являются лучшими вариантами роста с Golang. Вы можете найти больше об этом здесь . И, кстати, теперь вы можете указать
Provisioned Throughput
для вашей лямбды, которая направлена на устранение проблемы холодного старта, но я еще не использовал ее, поэтому не могу сказать, есть ли какая-либо разница (но я обязательно есть) - Если все сделано правильно, вы в конечном итоге будете управлять сотнями функций Lambda, тогда как со стандартным контейнером Docker в ECS вы будете управлять несколькими API с несколькими конечными точками. Этот момент не следует недооценивать, так как с одной стороны это облегчит изменения в будущем, так как лямбда будет небольшой, и вы легко найдете ошибку и исправите ее, но с другой стороны вам придется переходить через эти функции, который, если вы не знаете точно, какая лямбда отвечает за то, что может быть долгим процессом
- Насколько я знаю, Lambda не может обрабатывать сессии. Поскольку через некоторое время контейнер Lambda удаляется, вы не можете хранить ни одного сеанса внутри самой Lambda. Вы всегда будете нуждаться в структуре для хранения сеанса, чтобы ее можно было разделить между несколькими вызовами Lambda, такими как некоторые записи в таблице DynamoDB или что-то еще, но это означает, что вы должны написать код для этого, находясь в классе. c API (как. NET Core one) все это обрабатывается самим языком, и вам нужно только сохранять или извлекать элементы из сеанса (в большинстве случаев)
Так что да! Возможна поддержка, полностью написанная на лямбде. Компания, в которой я работаю, делает это, и я должен сказать, что это намного лучше, как с точки зрения скорости, так и с точки зрения времени разработки. Но эти преимущества появятся позже, поскольку вам необходимо учесть все причины, перечисленные выше, и это не так просто, как может показаться