Если вы хотите создать бессерверную архитектуру в AWS или хотя бы ее часть, то сервис AWS Lambda будет наиболее важной частью этого процесса.
Это бессерверная вычислительная функция (обычно написанная на языке программирования Node.JS или Python), которую можно разрабатывать и запускать без запуска каких-либо серверных кластеров или серверов. Вы можете подключить несколько функций AWS Lambda для формирования более сложных процессов.
Однако важным свойством лямбда-функции является ее ограничение по времени обработки. Это в конечном итоге определяет, когда целесообразно использовать функцию AWS Lambda.
Источник: aws.amazon.com
Оглавление
Что такое интервал тайм-аута?
Функция тайм-аута функции AWS Lambda — это параметр, определяющий максимальное время, в течение которого функция может работать до ее завершения.
Лямбда-функции предназначены для кратковременного использования и без сохранения состояния, и именно так их и следует использовать. Это не редкое исключение, когда команды пытаются использовать функцию Lambda для длительных процессов. Они делают это только потому, что хотят воспользоваться преимуществами бессерверной природы AWS Lambda. Всегда гораздо дешевле запустить код без необходимости запуска сервера с определенной конфигурацией процессора и памяти. Итак, намерение легко понять.
Однако если функция выполняется слишком долго, это может вызвать проблемы с использованием ресурсов и производительностью. Вы рискуете заблокировать ресурсы, а поскольку у вас есть преимущество длительного процесса, скорее всего, вас не особо заботит оптимизация шагов внутри процессов. Внезапно время ожидания в пять минут не является большой проблемой. Вы можете позволить себе оставить его присутствующим, даже если для самого процесса он может оказаться бесполезным.
По умолчанию время ожидания для функции Lambda установлено всего на 3 секунды. В этом случае вам придется рассчитывать на то, что любой код, который вы выполняете внутри функции Lambda, должен завершиться в течение трех секунд. Это замечательно, если вы хотите построить архитектуру с действительно быстрой связью и временем отклика, потенциально с миллионами транзакций за очень короткое время. Но это существенно ограничит возможные варианты использования функции Lambda, поэтому вы можете увеличить этот предел максимум до 900 секунд (15 минут). По истечении этого времени ожидания Lambda завершит функцию и вернет код ошибки.
Как настроить функцию тайм-аута?
Источник: aws.amazon.com
Вы можете установить тайм-аут для функции Lambda с помощью консоли управления AWS, интерфейса командной строки AWS или пакетов AWS SDK.
Вот конкретные шаги, как этого добиться:
Вы также можете использовать командную строку AWS CLI, чтобы обновить время ожидания функции Lambda. Вот пример команды:
<code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900
Эта команда устанавливает тайм-аут для [My_Lambda_Function_Name] до 15 минут. Просто введите туда свое настоящее имя функции и желаемое значение таймаута в секундах.
Некоторые соображения
Настройка тайм-аута применяется ко всей функции, а не только к отдельным блокам кода или операциям внутри функции. Таким образом, если ваша функция выполняет длительную операцию, например обработку большого файла или выполнение сетевого запроса, вам необходимо убедиться, что тайм-аут по-прежнему достаточен для завершения операции, даже в худшем случае. .
Стоит отметить, что функции Lambda рассчитаны на кратковременное существование и не сохраняют состояние. Они предназначены для выполнения небольших дискретных задач. Если вы обнаружите, что ваша лямбда-функция выполняется долго, возможно, стоит разбить ее на несколько более мелких функций. Затем вы можете вызывать их один за другим с помощью триггера. Например, если выходные данные предыдущей функции Lambda хранятся в определенной корзине S3.
Кроме того, если вам необходимо запустить длительный процесс, длительность которого превышает 15-минутный лимит, вы можете рассмотреть возможность использования AWS Step Functions для организации ряда функций Lambda или других сервисов AWS для достижения желаемого результата.
Лучшие практики
Сам рабочий интервал таймаута кажется недостаточно большим для каких-то обширных разговоров. В большинстве случаев разработчики сразу устанавливают время 15 минут для всех функций Lambda. Даже если функция завершится гораздо раньше, никаких негативных побочных эффектов в этом нет.
Тем не менее, есть еще несколько передовых практик, на которые стоит обратить внимание.
№1. Определите подходящую стоимость
Вам следует установить значение тайм-аута на основе ожидаемого времени выполнения функции. По сути, это означает установку не слишком короткого, но и не слишком длинного значения.
Возможно, вам захочется убедиться, что общее время выполнения одной функции Lambda не превышает трех минут, например, просто по причинам архитектуры или общей производительности вашего приложения.
Точно так же вы можете убедиться, что функция Lambda не завершится раньше, чем, скажем, через три минуты. Одной из причин может быть то, что вы хотите заполнить некоторое количество повторов внутри лямбда-кода. Например, в случае, если некоторые ресурсы, необходимые для выполнения кода, заняты или заблокированы.
Поэтому, прежде чем вы установите тайм-аут на 15 минут, подумайте о том, каким может быть оптимальное значение времени выполнения. Определение более точных значений — это всего лишь еще один инструмент, позволяющий установить некоторые границы для всей команды разработчиков.
№2. Мониторинг с течением времени
После того как вы установили ограничения по времени ожидания, постарайтесь отслеживать время выполнения ваших функций Lambda. Это даст вам важную информацию о том, было ли первоначальное решение правильным или требует некоторых корректировок.
Вы можете использовать метрики и журналы CloudWatch для отслеживания времени выполнения функций. Затем определите те, которые занимают больше времени, чем ожидалось, а также те, которые выполняются намного быстрее, чем ожидалось.
№3. Асинхронный вызов
Если ваша Lambda-функция запускается событием, не требующим немедленного ответа, например загрузкой файла или сообщением из очереди, используйте асинхронный вызов, чтобы снизить риск тайм-аутов. Это заставит функцию работать в фоновом режиме, не дожидаясь ответа. Это, конечно, может привести к уменьшению количества таймаутов. Это просто потому, что вам не нужно включать в общее время выполнения Lambda время ожидания, необходимое функции для этого ресурса.
№4. Используйте ступенчатые функции для сложных процессов
Если вам необходимо запустить длительный процесс, длительность которого превышает 15-минутный лимит, вы можете использовать AWS Step Functions для организации ряда функций Lambda или других сервисов AWS для достижения этого результата. Функция Step разбивает процесс на более мелкие и более управляемые задачи, которые вы можете выполнить в пределах лимита времени ожидания.
Вы даже можете запускать несколько лямбда-функций параллельно в рамках ступенчатой функции. Затем позвольте пошаговой функции дождаться всех параллельных лямбда-функций, прежде чем продолжить. Это форма горизонтального масштабирования, при которой несколько лямбда-функций могут разделить одну проблему и частично решить ее вместе.
В конце концов, вам просто нужно собрать частичные результаты и создать окончательное разрешение, для чего может быть достаточно использования отдельной лямбда-функции.
№5. Оптимизируйте код
Вы можете оптимизировать код функции Lambda, чтобы сократить время выполнения и повысить производительность. Это полезно, если интервал тайм-аута недостаточен только время от времени. В этом случае, возможно, стоит поискать оптимизацию кода для устранения таких случаев сбоя.
Как тайм-аут влияет на выставление счетов?
Источник: aws.amazon.com
Настройка тайм-аута для функции AWS Lambda не влияет напрямую на выставление счетов за эту функцию. AWS Lambda выставляет счета на основе количества запросов и продолжительности выполнения функции.
Если вы увеличите время ожидания для функции Lambda, это может привести к увеличению времени выполнения. Но только если функции действительно нужно дополнительное время. Если вы объедините это с более высокой частотой выполнения функции, выполнение которой занимает больше времени, то да, вы можете ожидать более высоких затрат.
Однако если функция вызывается нечасто или если она завершает процесс раньше, чем будет достигнуто значение тайм-аута, влияние на выставление счетов может быть минимальным.
Вот почему установка для всех функций Lambda таймаута 15 минут по умолчанию может не быть основной причиной увеличения стоимости всей обработки.
Однако это, безусловно, приводит к косвенному увеличению общих затрат. Разработчики будут чувствовать, что у них есть некоторый резерв, который можно использовать, и они могут не оптимизировать код в такой степени, которую они, вероятно, сделали бы, если бы таймауты были более ограничительными, но все же реалистичными.
Другое дело, что AWS Lambda предоставляет уровень бесплатного пользования, который включает 1 миллион бесплатных запросов и 400 000 ГБ-секунд вычислительного времени в месяц. Если использование функции Lambda попадает в пределы бесплатного уровня, вы не будете платить за время выполнения функции независимо от настройки тайм-аута.
Заключительные слова
Функция AWS Lambda — мощный инструмент, особенно для бессерверной обработки в облаке AWS. У него есть своя цель и ограничения, о которых нам следует знать. Давайте не будем пытаться использовать его в случаях, для которых он не предназначен.
Он идеально подходит для простых, асинхронных и идеально запускаемых действий, время выполнения которых не превышает 15 минут. Если вам нужно что-то более сложное, используйте AWS Step Functions, чтобы объединить несколько функций Lambda в один оркестрованный процесс. Или откажитесь от более дешевой бессерверной обработки и используйте серверы с соответствующей конфигурацией и вычислительной мощностью для выполнения вашей задачи.
Далее ознакомьтесь с введением в AWS Lambda для начинающих.