Выполняет ли AWS Lambda каждый вызов на отдельной виртуальной машине Firecracker?

Мне известны холодный и теплый запуск в AWS Lambda.

Однако я не уверен, что во время горячего запуска архитектура Lambda повторно использует виртуальную машину Firecracker в серверной части? Или он вызывает новую виртуальную машину?

Есть ли способ обеспечить изоляцию на уровне виртуальных машин для каждого вызова через какое-либо другое решение AWS?

1 ответ

Решение

Основываясь на том, что указано в документации для контекста выполнения Lambda, Lambda пытается повторно использовать контекст выполнения между последующими выполнениями, это то, что приводит к холодному запуску (когда контекст раскручивается) и теплому запуску (когда существующий контекст повторно используется).

Обычно эта задержка наблюдается при первом вызове функции Lambda или после ее обновления, поскольку AWS Lambda пытается повторно использовать контекст выполнения для последующих вызовов функции Lambda.

Это подтверждается другим утверждением в документации по среде выполнения Lambda, где сказано, что:

Когда вызывается лямбда-функция, плоскость данных выделяет среду выполнения для этой функции или выбирает существующую среду выполнения, которая уже была настроена для этой функции, а затем запускает код функции в этой среде.

Более поздний отрывок на той же странице дает немного больше информации о том, как среды / ресурсы распределяются между функциями и выполнениями в одной учетной записи AWS:

Среды выполнения работают на аппаратных виртуализированных виртуальных машинах (microVM). МикроВМ предназначена для учетной записи AWS, но может повторно использоваться средами выполнения для различных функций в учетной записи. [...] Среды выполнения никогда не разделяются между функциями, и microVM никогда не разделяются между учетными записями AWS.

Кроме того, есть еще одна страница документации, которая дает некоторые дополнительные сведения об изоляции между средами, но опять же, не упоминается возможность принудительного выполнения одного выполнения для каждой среды.

Насколько мне известно, нет способа сделать так, чтобы новое исполнение использовало новую среду, а не существующую. AWS не дает особого понимания этого, но формулировка темы, похоже, предполагает, что большинство людей на самом деле пытаются сделать противоположное тому, что вы ищете:

При написании кода функции Lambda не предполагайте, что AWS Lambda автоматически повторно использует контекст выполнения для последующих вызовов функций. Другие факторы могут потребовать от AWS Lambda создания нового контекста выполнения, что может привести к неожиданным результатам, таким как сбои подключения к базе данных.

Я бы сказал, что если вас беспокоит изоляция от других клиентов / учетных записей, AWS гарантирует изоляцию посредством виртуализации, которая, хотя и не на физическом уровне, может быть достаточной в зависимости от их SLA и ваших SLA / требований. Если вместо этого вы думаете о создании какой-то многопользовательской инфраструктуры, которая требует, чтобы Lambda-исполнения были изолированы друг от друга, то этот компонент может быть не тем, что вы ищете.

Другие вопросы по тегам