Общие вопросы

Вопрос: Что такое AWS Lambda?

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

Вопрос: Что такое бессерверные вычисления?

Бессерверные вычисления позволяют создавать и запускать приложения и сервисы, не беспокоясь о серверах. При бессерверных вычислениях приложение по‑прежнему работает на серверах, но управление этими серверами AWS полностью берет на себя. В основе бессерверных вычислений лежит сервис AWS Lambda, позволяющий запускать код без выделения серверов или управления ими.

Вопрос: Какие события могут запустить функцию AWS Lambda?

Полный перечень источников событий приведен в нашей документации.

Вопрос: В каких случаях стоит использовать AWS Lambda вместо Amazon EC2?

Amazon Web Services предлагает большое количество вычислительных сервисов, которые подходят для самых разнообразных потребностей.

Amazon EC2 – это гибкий сервис с большим выбором различных типов инстансов и вариантов настроек операционной системы, сети, параметров безопасности и всего программного стека, который позволяет без труда переместить существующие приложения в облако. При использовании Amazon EC2 клиент берет на себя ответственность за предоставление ресурсов, мониторинг работоспособности и производительности групп инстансов, а также за обеспечение отказоустойчивости и масштабирование. AWS Elastic Beanstalk – удобный сервис для развертывания и масштабирования интернет‑приложений, при использовании которого базовые инстансы EC2 по‑прежнему принадлежат пользователю и находятся под его полным контролем. Amazon EC2 Container Service – это масштабируемый сервис управления, поддерживающий контейнеры Docker и позволяющий просто запускать распределенные приложения в управляемом кластере инстансов Amazon EC2.

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

Вопрос: Какой код можно запускать на AWS Lambda?

AWS Lambda позволяет выполнять в облаке самые различные операции. Например, можно использовать AWS Lambda для создания серверной части мобильных приложений, которые получают данные из Amazon DynamoDB и преобразуют их; обработчиков, которые сжимают или преобразуют объекты при их загрузке в Amazon S3; аудита и отправления отчетов о вызовах API, сделанных к любому из сервисов Amazon Web Services; а также для бессерверной обработки потоковых данных с помощью Amazon Kinesis.

Вопрос: Какие языки программирования поддерживает AWS Lambda?

AWS Lambda обеспечивает встроенную поддержку Java, Go, PowerShell, Node.js, C#, Python и Ruby, а также предоставляет API Runtime, с помощью которого для создания функций можно использовать любой дополнительный язык программирования. Ознакомьтесь с нашей документацией по использованию Node.js, Python, Java, Ruby, C#, Go и PowerShell.

Вопрос: Можно ли получить доступ к инфраструктуре, на которой работает AWS Lambda?

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

Вопрос: Как в AWS Lambda обеспечивается изоляция кода?

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

Вопрос: Как в AWS Lambda обеспечивается безопасность кода?

Код AWS Lambda сохраняется в Amazon S3 и шифруется при хранении. При использовании кода AWS Lambda выполняет дополнительную проверку целостности.

Вопрос: В каких регионах AWS работает AWS Lambda?

См. таблицу регионов глобальной инфраструктуры AWS.

Функции AWS Lambda

Вопрос: Что такое функция AWS Lambda?

Код, запускаемый в AWS Lambda, загружается в качестве функции Lambda. Каждая функция имеет соответствующую информацию о конфигурации, например название, описание, точку входа и требования к ресурсам. Код должен быть написан без сохранения состояния, то есть не должен зависеть от конкретной вычислительной инфраструктуры. Доступ к локальной файловой системе, дочерние процессы и подобные артефакты не могут храниться дольше, чем исполняется сам запрос, поэтому все постоянные состояния должны храниться в Amazon S3, Amazon DynamoDB, Amazon EFS или любом другом доступном через Интернет сервисе хранилища. Функции Lambda могут включать в себя библиотеки, в том числе встроенные.

Вопрос: Использует ли AWS Lambda инстансы функций повторно?

В целях повышения производительности (чтобы не создавать новые копии инстансов) инстансы функций в AWS Lambda могут сохраняться для обработки дальнейших запросов. Подробнее о том, как Lambda повторно использует инстансы функций, см. в нашей документации. В коде необходимо учитывать, что это происходит далеко не всегда.

Вопрос. Как быть, если выполнение функций AWS Lambda требует рабочего пространства на диске?

Вы можете предоставить каждой функции Lambda собственное краткосрочное хранилище размером от 512 МБ до 10 240 МБ с шагом в 1 МБ. Временное хранилище доступно в каталоге /tmp каждой функции.

Каждая функция имеет доступ к 512 МБ хранилища без дополнительной платы. Когда вы выделяете для своих функций более 512 МБ краткосрочной памяти, с вас взимается плата в зависимости от указанного размера хранилища и времени выполнения функции, измеряемого с шагом в 1 мс. Для сравнения: в регионе Восток США (Огайо) цена на краткосрочное хранение для AWS Fargate составляет 0,000111 USD за 1 ГБ в час или 0,08 USD за 1 ГБ в месяц. Цена на том хранилища Amazon EBS gp3 в регионе Восток США (Огайо) составляет 0,08 USD за 1 ГБ в месяц. Цена на краткосрочное хранение AWS Lambda составляет 0,0000000309 USD за 1 ГБ в секунду или 0,000111 USD за 1 ГБ в час и 0,08 USD за 1 ГБ в месяц. Подробную информацию см. в ценах на AWS Lambda.

Вопрос. Как настроить приложение для использования краткосрочного хранилища AWS Lambda?

Вы можете настроить для каждой функции Lambda краткосрочное хранилище размером от 512 МБ до 10 240 МБ с шагом в 1 МБ с помощью консоли AWS Lambda, API AWS Lambda или шаблона AWS CloudFormation во время создания или обновления функции.

Вопрос. Шифруется ли информация в краткосрочном хранилище AWS Lambda?

Да. Все данные, которые хранятся в краткосрочном хранилище, шифруются во время хранения с использованием ключа, управляемого AWS.

Вопрос. Какие метрики можно использовать для отслеживания использования краткосрочного хранилища AWS Lambda?

Для отслеживания использования краткосрочного хранилища AWS Lambda можно использовать метрики AWS CloudWatch Lambda Insight. Дополнительную информацию см. в документации AWS CloudWatch Lambda Insights.

Вопрос. Когда следует использовать Amazon S3, Amazon EFS или краткосрочное хранилище AWS Lambda для бессерверных приложений?

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

Вопрос. Можно ли пользоваться краткосрочным хранилищем, когда для функции Lambda включена функция Provisioned Concurrency?

Да. Однако, если вашему приложению требуется постоянное хранилище, воспользуйтесь Amazon EFS или Amazon S3. Когда для функции Lambda включена функция Provisioned Concurrency, код инициализации вашей функции выполняется во время распределения ресурсов, а также каждые несколько часов по мере утилизации инстансов вашей функции. Вы можете просмотреть время инициализации в журналах и маршрутах после обработки запроса инстансом. Однако плата за инициализацию взимается, даже если инстанс ни разу не обрабатывает запрос. Это поведение при инициализации Provisioned Concurrency может повлиять на взаимодействие вашей функции с данными, которые хранятся в краткосрочном хранилище, даже если ваша функция не обрабатывает запросы. Чтобы узнать больше о Provisioned Concurrency, см. соответствующую документацию.

Вопрос. Как настроить приложение для использования краткосрочного хранилища AWS Lambda?

Вы можете настроить для каждой функции Lambda краткосрочное хранилище размером от 512 МБ до 10 240 МБ с шагом в 1 МБ с помощью консоли AWS Lambda, API AWS Lambda или шаблона AWS CloudFormation во время создания или обновления функции.

Вопрос. Шифруется ли информация в краткосрочном хранилище AWS Lambda?

Да. Все данные, которые хранятся в краткосрочном хранилище, шифруются во время хранения с использованием ключа, управляемого AWS.

Вопрос. Какие метрики можно использовать для отслеживания использования краткосрочного хранилища AWS Lambda?

Для отслеживания использования краткосрочного хранилища AWS Lambda можно использовать метрики AWS CloudWatch Lambda Insight. Дополнительную информацию см. в документации AWS CloudWatch Lambda Insights.

Вопрос. Почему функции AWS Lambda не должны сохранять состояние?

Использование функций без сохранения состояния позволяет AWS Lambda быстро запускать нужное количество копий функции для масштабирования в соответствии со скоростью входящих событий. Модель программирования AWS Lambda не сохраняет состояния, однако код может получать доступ к данным с фиксацией состояния посредством вызова других веб‑сервисов, например Amazon S3 или Amazon DynamoDB.

Вопрос: Можно ли использовать в коде функции AWS Lambda потоки и процессы?

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

Вопрос: Какие существуют ограничения для кода функции AWS Lambda?

Команда разработчиков Lambda пыталась свести к минимуму количество ограничений на стандартные действия языков программирования и операционной системы, но все же несколько действий отключены: AWS Lambda блокирует входящие сетевые подключения, а для исходящих подключений поддерживаются только сокеты TCP/IP и UDP/IP; кроме того, заблокированы системные вызовы ptrace (отладка). В целях борьбы со спамом также заблокирован трафик через TCP‑порт 25.

Вопрос: Как создать функцию AWS Lambda, используя консоль Lambda?

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

Вы также можете заархивировать код (и любые зависимые библиотеки) в формат ZIP и загрузить архив с локального компьютера, используя консоль AWS Lambda, либо указать местоположение этого файла ZIP в Amazon S3. Размер загружаемых файлов не должен превышать 50 МБ (в сжатом виде). Для создания и развертывания функций Lambda на Java можно использовать подключаемый модуль AWS Eclipse. Для создания и развертывания функций Lambda на C# и Node.js можно использовать подключаемый модуль Visual Studio.

Вопрос: Как создать функцию AWS Lambda, используя интерфейс командной строки Lambda?

Вы можете заархивировать код (и любые зависимые библиотеки) в формат ZIP и загрузить архив с локального компьютера, используя AWS CLI, либо указать местоположение этого файла ZIP в Amazon S3. Размер загружаемых файлов не должен превышать 50 МБ (в сжатом виде). Чтобы начать работу, перейдите на страницу Руководство по началу работы с Lambda.

Вопрос: Поддерживает ли AWS Lambda переменные среды?

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

Вопрос: Можно ли хранить конфиденциальную информацию в переменных среды?

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

Вопрос: Как управлять функциями AWS Lambda?

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

Вопрос: Можно ли использовать код для нескольких функций?

Да, любой код (платформы, пакеты SDK, библиотеки и т. д.) можно упаковать как уровень Lambda и использовать его с множеством функций, а также управлять им.

Вопрос: Как происходит мониторинг функции AWS Lambda?

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

Подробнее см. в разделе Troubleshooting CloudWatch metrics. Стандартная плата за использование AWS Lambda включает работу со встроенными метриками.

Вопрос: Как устранять неисправности в работе функции AWS Lambda?

AWS Lambda автоматически интегрируется с сервисом Amazon CloudWatch Logs, создавая группу журналов для каждой функции Lambda и собирая информацию о базовом жизненном цикле приложения, включая записи о ресурсах, использованных при каждом запуске функции. Можно без труда вставить в код дополнительные операторы для сохранения в журнале. В функциях Lambda можно также использовать сторонние API для ведения журналов. Подробнее см. в разделе Troubleshooting Lambda functions. Использование Amazon CloudWatch Logs оплачивается по тарифам этого сервиса.

Вопрос: Как масштабировать функции AWS Lambda?

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

Вопрос: Как выделяются вычислительные ресурсы для функций AWS Lambda?

В модели ресурсов AWS Lambda можно выбрать нужный для функции объем памяти, в соответствии с которым назначается мощность ЦПУ и другие ресурсы. Например, при выборе 256 МБ памяти функции Lambda назначается примерно в два раза больше мощности ЦПУ, чем для запрашиваемой памяти 128 МБ, и в два раза меньше, чем при выборе 512 МБ. Подробнее об этом см. в документации по конфигурированию функций.

Объем памяти можно выбрать в диапазоне от 128 МБ до 10 240 МБ.

Вопрос. Когда лучше использовать функции AWS Lambda с объемом памяти свыше 3008 МБ?

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

Вопрос. Как долго может выполняться функция AWS Lambda?

Функции AWS Lambda можно настроить на время исполнения до 15 минут при каждом запуске. Можно также указать любое значение тайм‑аута в интервале от 1 секунды до 15 минут.

Вопрос: Как начисляется плата за использование функций AWS Lambda?

Работа AWS Lambda оплачивается только по факту использования. Подробнее см. на странице цен на AWS Lambda.

Вопрос. Можно ли уменьшить расходы на AWS Lambda, используя тарифный план Compute Savings Plan?

Да. Помимо экономии на использовании сервисов Amazon EC2 и AWS Fargate можно сократить расходы на AWS Lambda, используя тарифные планы Compute Savings Plans. Тарифные планы Compute Savings Plans позволяют получить скидку до 17 % на Duration, Provisioned Concurrency и Duration (Provisioned Concurrency). Тарифные планы Compute Savings Plans не предусматривают скидку на Requests при использовании Lambda. Тем не менее если вы используете тарифные планы Compute Savings Plans, вы можете пользоваться Requests по обычным расценкам.

Вопрос: Поддерживает ли AWS Lambda управление версиями?

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

Вопрос: Через какое время после загрузки кода можно вызывать функцию AWS Lambda?

Время развертывания зависит от размера кода, но обычно функции AWS Lambda готовы для вызова через несколько секунд после загрузки.

Вопрос: Можно ли использовать свою версию поддерживаемой библиотеки?

Да. Вы можете добавить в код собственную копию библиотеки (включая AWS SDK) вместо версии, предоставляемой AWS Lambda по умолчанию.

Вопрос. Каков принцип работы многоуровневого ценообразования?

AWS Lambda предоставляет уровни сниженных цен для ежемесячной продолжительности использования функций по требованию, превышающей определенные пороговые значения. Многоуровневое ценообразование предусмотрено для функций, выполняемых как на основе архитектуры x86, так и на основе архитектуры Arm. Ценовые уровни Lambda применяются к общей ежемесячной продолжительности использования функций по требованию, работающих на той же инфраструктуре (x86 или Arm соответственно), в одном регионе и в пределах аккаунта. Если у вас включена консолидированная оплата в Организациях AWS, ценовые уровни применяются к общей ежемесячной продолжительности использования функций, работающих на той же инфраструктуре, в одном регионе и в пределах аккаунтов организации. Например, если вы используете функции Lambda для x86 в регионе Восток США (Огайо), то с вас будет взиматься плата в размере 0,0000166667 USD за каждую гигабайт-секунду и первые 6 миллиардов ГБ-секунд в месяц, 0,0000150000 USD за каждую гигабайт-секунду и следующие 9 миллиардов ГБ-секунд в месяц и 0,0000133334 USD за каждую гигабайт-секунду и более 15 миллиардов ГБ-секунд в месяц. Оплата запросов, Provisioned Concurrency и продолжительность использования функции Provisioned Concurrency остаются без изменений. Подробнее см. на странице Цены на AWS Lambda.

Вопрос. Могу ли я воспользоваться преимуществами многоуровневого ценообразования и планов экономии вычислительных ресурсов?

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

Использование AWS Lambda для обработки событий AWS

Вопрос: Что такое источник события?

Источник события – это сервис AWS или созданное разработчиком приложение, создающее события, которые запускают функцию AWS Lambda. Некоторые сервисы (например, Amazon S3) отправляют такие события в Lambda, напрямую вызывая функцию в облаке. Lambda также может опрашивать ресурсы в других сервисах, не посылающих события в Lambda. Например, Lambda может получать записи из потока Amazon Kinesis или очереди Amazon SQS и исполнять функцию Lambda для каждого полученного сообщения.

Многие другие сервисы, например AWS CloudTrail, также могут выступать как источники событий путем записи журналов в Amazon S3 и использования уведомлений корзины S3 в качестве триггеров функций AWS Lambda.

Вопрос: Какие источники событий могут использоваться с AWS Lambda?

Полный перечень источников событий приведен в нашей документации.

Вопрос: Как события отображаются в AWS Lambda?

События передаются в функцию Lambda в качестве входного параметра события. Для источников событий, в которых события возникают пакетами (например, Amazon SQS, Amazon Kinesis или Amazon DynamoDB Streams), параметр события может содержать множество событий в одном вызове, основываясь на размере запрашиваемого пакета. Подробнее об оповещениях для событий Amazon S3 см. в разделе Настройка уведомлений для Amazon S3 Events. Подробнее об Amazon DynamoDB Streams см. в Руководстве для разработчиков по DynamoDB Streams. Подробнее о вызове функций Lambda с помощью Amazon SNS см. в Руководстве для разработчиков по Amazon SNS. Подробнее о событиях Amazon Cognito см. на странице Amazon Cognito. Подробнее о журналах AWS CloudTrail и аудите вызовов API в сервисах AWS см. на странице AWS CloudTrail.

Вопрос: Как настроить запуск функции AWS Lambda в ответ на изменения в корзине Amazon S3?

В консоли AWS Lambda можно выбрать функцию и связать ее с уведомлениями от нужной корзины Amazon S3. Как вариант, можно использовать консоль Amazon S3 и настроить в ней отправление уведомлений нужной корзины в функцию AWS Lambda. Аналогичные функциональные возможности доступны в AWS SDK и интерфейсе командной строки.

Вопрос: Как настроить запуск функции AWS Lambda в ответ на обновления таблицы Amazon DynamoDB?

Можно активировать функцию Lambda в ответ на обновление таблицы DynamoDB, подписав эту функцию Lambda на поток DynamoDB Streams, связанный с таблицей. Связать поток DynamoDB Streams с функцией Lambda можно в консоли Amazon DynamoDB, консоли AWS Lambda или посредством API registerEventSource сервиса Lambda.

Вопрос: Как использовать функцию AWS Lambda для обработки записей в потоке Amazon Kinesis?

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

Вопрос: Как AWS Lambda обрабатывает данные из Amazon Kinesis Streams и Amazon DynamoDB Streams?

Записи из потоков Amazon Kinesis Streams и DynamoDB Streams, переданные в функцию AWS Lambda, строго упорядочены по сегментам. Это означает, что, если вы поместите две записи в один сегмент, Lambda гарантирует, что функция Lambda будет успешно вызвана для первой записи, а потом будет вызвана для второй записи. Если вызов для одной записи превышает время ожидания, пропускается или возникают любые другие ошибки, Lambda будет повторно вызывать функцию, пока это не удастся (или пока не истечет срок действия записи, равный 24 часам), прежде чем перейти к следующей записи. Упорядочение записей в разных сегментах не гарантируется, при этом обработка каждого сегмента происходит параллельно.

Вопрос. Как выбрать AWS Lambda и Управляемый сервис Amazon для Apache Flink, чтобы решить аналитические задачи?

AWS Lambda позволяет в одном логическом разделе, например в сегменте, за короткий промежуток времени до 15 минут выполнить агрегирование по времени (например, количество, максимальное значение, сумма, среднее значение и т. д.) для данных в Amazon Kinesis или Потоках Amazon DynamoDB. Благодаря этому можно легко настроить простую аналитику для вашего событийного приложения без добавления архитектурной сложности, поскольку правила бизнеса и логику аналитики можно разместить в одной функции. С помощью Lambda агрегирование происходит максимум за 15 минут в переворачивающемся окне на основе временной отметки события. Управляемый сервис Amazon для Apache Flink позволяет создавать более сложные аналитические приложения, которые поддерживают гибкие варианты обработки данных и надежную отказоустойчивость с однократной обработкой без дублирования, а также аналитику, которую возможно выполнить для всего потока данных в нескольких логических разделах. С помощью KDA данные можно анализировать в нескольких типах окон агрегирования (переворачивающееся окно, колеблющееся окно, скользящее окно, окно сеанса), используя время события или время обработки.

  AWS Lambda Amazon KDA
Переворачивающееся окно Да Да
Колеблющееся окно Нет Да
Скользящее окно Нет Да
Окно сеанса Нет Да
Обогащение Нет Да
Совместные таблицы входящих и ссылочных данных Нет Да
Разделение входящего потока Нет Да
Строго однократная обработка Нет Да
Окно максимального времени 15 минут Без ограничений
Охват агрегирования Раздел/сегмент Поток
Временная семантика Время наступления события Время наступления события, время обработки

Вопрос. Как настроить запуск функции AWS Lambda в ответ на уведомления, отправленные Amazon Simple Notification Service (SNS)?

В консоли AWS Lambda можно выбрать функцию Lambda и связать ее с темой Amazon SNS. Аналогичные функциональные возможности доступны в AWS SDK и интерфейсе командной строки.

Вопрос: Как настроить запуск функции AWS Lambda в ответ на электронные письма, отправленные сервисом Amazon Simple Email Service (SES)?

В консоли Amazon SES можно задать свое правило обработки входящей почты для доставки сообщений сервисом Amazon SES в адрес функции AWS Lambda. Аналогичные функциональные возможности доступны в AWS SDK и интерфейсе командной строки.

Вопрос: Как настроить запуск функции AWS Lambda в ответ на предупреждения Amazon CloudWatch?

Сначала настройте предупреждение для отправки уведомлений посредством Amazon SNS. Затем в консоли AWS Lambda выберите функцию Lambda и свяжите ее с темой Amazon SNS. Подробнее о настройке предупреждений Amazon CloudWatch см. в Руководстве для разработчиков по Amazon CloudWatch.

Вопрос: Как настроить запуск функции AWS Lambda в ответ на изменения данных пользователя или устройства, управляемых с помощью Amazon Cognito?

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

Вопрос: Как приложение может напрямую запустить функцию AWS Lambda?

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

Вопрос: С какой задержкой происходит вызов функции AWS Lambda в ответ на событие?

AWS Lambda обеспечивает обработку события за миллисекунды. Задержка будет немного больше, если функция Lambda была недавно создана, обновлена или долгое время не использовалась.

Вопрос: Как создать серверную часть мобильного приложения с помощью AWS Lambda?

Нужно загрузить соответствующий код для исполнения AWS Lambda, а затем вызвать его из соответствующего мобильного приложения, используя SDK AWS Lambda, включенный в пакет SDK AWS Mobile. Сервис позволяет совершать двусторонние (синхронные) вызовы для получения или проверки данных в режиме реального времени, а также асинхронные вызовы. Можно также настроить специальный API с помощью Amazon API Gateway и вызывать свои функции Lambda с помощью любого клиента, совместимого с API REST. Подробнее об SDK AWS Mobile см. на странице SDK AWS Mobile. Подробнее об Amazon API Gateway см. на странице Amazon API Gateway.

Вопрос: Как вызвать функцию AWS Lambda через HTTPS?

Вызывать функции AWS Lambda можно через HTTPS, определив пользовательский API RESTful с помощью Amazon API Gateway. Это создаст адрес обращения к функции, готовый отвечать на такие вызовы REST, как GET, PUT и POST. Подробнее об использовании AWS Lambda с Amazon API Gateway.

Вопрос: Как функция AWS Lambda подстраивает поведение под устройство и приложение, выполняющее запрос?

При вызове через SDK AWS Mobile функции AWS Lambda автоматически получают данные об устройстве и приложении, выполнившем вызов, через объект context.

Вопрос: Как функция AWS Lambda персонализирует свое поведение на основе идентификации конечного пользователя приложения?

При использовании приложением идентификации Amazon Cognito авторизация конечных пользователей может выполняться с использованием различных публичных сервисов, таких как Amazon, Facebook, Google и других, совместимых с OpenID. Идентификация пользователя при этом происходит автоматически и в защищенном виде передается в функцию Lambda в качестве Amazon Cognito ID, что позволяет функции получить доступ к данным пользователя в Amazon Cognito, или же в качестве ключа для обмена пользовательскими данными с Amazon DynamoDB или другими веб‑сервисами.

Вопрос: Как создать навык Alexa с помощью AWS Lambda?

AWS Lambda интегрирована с пакетом Alexa Skills Kit – набором API для самостоятельного использования, инструментов, документации и примеров кода, которые позволяют просто создавать функциональные возможности голосового управления («навыки») для Alexa. Требуется просто загрузить код функции Lambda для создаваемого навыка Alexa, а AWS Lambda сделает все остальное, выполняя код в ответ на голосовое взаимодействие Alexa и автоматически управляя вычислительными ресурсами в аккаунте клиента. Дополнительную информацию см. в документации Alexa Skills Kit.

Вопрос: Что произойдет, если во время обработки события в функции произойдет сбой?

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

Когда AWS Lambda опрашивает последовательные источники событий, такие как потоки Amazon DynamoDB Streams и Amazon Kinesis Streams, при ошибке кода разработчика Lambda продолжает попытки исполнения до тех пор, пока не истечет срок действия данных. Отслеживать ход работы можно в консоли Amazon Kinesis и Amazon DynamoDB, а также через метрики Amazon CloudWatch, которые AWS Lambda создает для соответствующей функции. Можно также настроить предупреждения Amazon CloudWatch на основе количества ошибок или пропусков исполнения.

Использование AWS Lambda для создания приложений

Вопрос: Что такое бессерверное приложение?

Приложения на основе Lambda (называемые также бессерверными приложениями) состоят из функций, запускаемых событиями. Обычное бессерверное приложение состоит из одной или нескольких функций, запускаемых событиями, такими как оповещения о загрузке объекта в Amazon S3, Amazon SNS или действия API. Эти функции могут быть автономными или использовать в работе другие ресурсы, такие как таблицы DynamoDB или корзины Amazon S3. Большинство базовых бессерверных приложений представляют собой одну функцию.

Вопрос: Как выполнить развертывание бессерверного приложения и управлять им?

Выполнять развертывание бессерверных приложений и управлять ими можно с помощью AWS Serverless Application Model (AWS SAM). AWS SAM – это спецификация, в которой предписаны правила создания бессерверных приложений на AWS. Эта спецификация совпадет с синтаксисом, используемым в настоящее время сервисом AWS CloudFormation, и поддерживается по умолчанию в AWS CloudFormation в качестве набора типов ресурсов (называемых «бессерверными ресурсами»). Такие ресурсы облегчают клиентам AWS использование CloudFormation для настройки и развертывания бессерверных приложений с помощью существующих API CloudFormation.

Вопрос: Как найти существующие бессерверные приложения, разработанные сообществом AWS?

Можно выбрать приложения из коллекции бессерверных приложений, опубликованных разработчиками, компаниями и партнерами сообщества AWS, воспользовавшись репозиторием AWS Serverless Application Repository. Выбрав подходящее приложение, его настройку и развертывание можно выполнить прямо из консоли Lambda.

Вопрос: Как автоматизировать развертывание бессерверного приложения?

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

Подробнее о непрерывной интеграции и непрерывном развертывании бессерверного ПО см. в документации.

Вопрос: Как начать разработку бессерверных приложений?

Чтобы начать работу, откройте консоль AWS Lambda и загрузите одну из наших схем. В пакете, который вы загрузите, будет содержаться файл AWS SAM (который определяет ресурсы AWS в приложении), а также файл ZIP (который включает в себя код функции). После этого можно будет применить команды AWS CloudFormation для упаковки и развертывания загруженного бессерверного приложения. Подробнее см. в документации.

Вопрос: Как координировать вызовы между несколькими функциями AWS Lambda?

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

Вопрос: Как выполнять отладку бессерверного приложения?

Можно включить отслеживание используемых функций Lambda с помощью AWS X‑Ray, добавив разрешения X‑Ray для роли, исполняющей функции Lambda, и изменив в нужных функциях параметр «tracing mode» на «active». Когда для функции Lambda включен сервис X‑Ray, AWS Lambda передает в X‑Ray информацию об отслеживании расхода ресурсов сервиса Lambda при вызове функции. Это позволит получать такие аналитические данные, как расход ресурсов Lambda, время инициализации и время исполнения функции. Кроме того, можно включить SDK X‑Ray в свой пакет развертывания Lambda, чтобы создавать собственные сегменты отслеживания, добавлять комментарии к своим отслеживаниям или просматривать отслеживаемые сегменты для нисходящих вызовов, поступающих из функции Lambda. Пакеты SDK X‑Ray в настоящее время доступны для Node.js и Java. Подробнее см. в разделе Troubleshooting Lambda‑based applications. Использование AWS X‑Ray оплачивается отдельно.

Вопрос. Можно ли создавать бессерверные приложения, которые работают с реляционными базами данных?

Да. Можно создавать безопасные бессерверные приложения с высокой степенью масштабируемости на основе Lambda, которые подключаются к реляционным базам данных с помощью Amazon RDS Proxy. Это прокси-сервер с высоким уровнем доступности, который одновременно управляет тысячами подключений к реляционным базам данных. На данный момент RDS Proxy поддерживает базы данных MySQL и Aurora. Начать использовать RDS Proxy можно с помощью консоли Amazon RDS или консоли AWS Lambda. Бессерверные приложения, которые используют полностью управляемые пулы соединений со стороны RDS Proxy, оплачиваются в соответствии с ценами на RDS Proxy.

Вопрос. Как лицензируется AWS SAM?

Спецификация поставляется с открытым исходным кодом по лицензии Apache 2.0, которая позволяет пользователям заимствовать и включать AWS SAM в инструменты создания, развертывания, мониторинга и управления с лицензией, позволяющей использовать их в коммерческих целях. Репозиторий AWS SAM на GitHub доступен по ссылке.

Поддержка образа контейнера

Вопрос. Что такое поддержка образа контейнера для AWS Lambda?

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

Вопрос. Как использовать поддержку образа контейнера для AWS Lambda?

Можно начать с предоставленных AWS базовых образов для Lambda или использовать один из предпочтительных образов сообщества или частных корпоративных образов. Затем просто используйте Docker CLI, чтобы создать образ, загрузите его в Amazon ECR, после чего создайте функцию, используя все знакомые интерфейсы и инструменты Lambda, такие как Консоль управления AWS, CLI AWS, AWS SDK, AWS SAM и AWS CloudFormation.

Вопрос. Какие типы образов контейнеров поддерживаются?

В дополнение к предоставленным в Lambda образам можно развертывать сторонние базовые образы Linux (например, Alpine или Debian). AWS Lambda будет поддерживать все образы на основе таких форматов манифеста образов: Docker Image Manifest V2 Schema 2 (используется с Docker версии 1.10 и новее) или Open Container Initiative (OCI) Spec (версии 1.0 и выше). Lambda поддерживает образы размером до 10 ГБ.

Вопрос. Какие базовые образы можно использовать?

Клиенты могут расширить множество базовых образов, предоставляемых AWS Lambda, а также использовать предпочтительные образы на базе Linux размером до 10 ГБ.

Вопрос. Какие контейнерные инструменты можно использовать, чтобы упаковывать и развертывать функции в виде образа контейнера?

Можно использовать любые контейнерные инструменты, если они поддерживают один из таких форматов манифеста образов контейнера: Docker Image Manifest V2 Schema 2 (используется с Docker версии 1.10 и новее) или Open Container Initiative (OCI) Specifications (версии 1.0 и выше). Например, можно использовать встроенные контейнерные инструменты (такие как docker run, docker compose, Buildah и Packer), чтобы определить свои функции как образ контейнера и развернуть в Lambda.

Вопрос. Какие возможности AWS Lambda доступны для функций, развернутых как образы контейнеров?

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

Вопрос. Поддерживает ли AWS Lambda исправление и обновление развернутого образа контейнера?

В настоящий момент нет. После развертывания в AWS Lambda образ станет неизменяемым. Сервис не будет исправлять и обновлять образ. Однако AWS Lambda опубликует специальные базовые образы для всех поддерживаемых сред выполнения, основанных на управляемой среде Lambda. Такие опубликованные образы будут исправляться и обновляться наряду с обновлениями управляемых сред выполнения AWS Lambda. Можно извлечь и использовать последний базовый образ из DockerHub или Amazon ECR Public, заново создать образ контейнера и развернуть его в AWS Lambda через Amazon ECR. Это позволяет создавать и тестировать обновленные образы и среды выполнения перед их развертыванием в рабочей среде.

Вопрос. В чем разница между функциями, созданными с использованием архивов в формате ZIP, и образами контейнеров?

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

  1. Максимальный размер пакета кода функций, созданных с помощью архивов в формате ZIP, в распакованном виде составляет 250 МБ, а максимальный размер образа функций, созданных с использованием образов контейнеров, – 10 ГБ. 
  2. Lambda использует Amazon ECR как базовое хранилище кода для функций, определенных как образы контейнеров, поэтому функцию невозможно применить, когда базовый образ удален из ECR. 
  3. Чтобы обеспечить новейшую безопасность во время исполнения и исправление ошибок, для ZIP-функции применяются автоматические исправления. Функции, определенные как образы контейнеров, являются неизменяемыми, и клиенты несут ответственность за компоненты, упакованные в их функции. Клиенты могут использовать предоставленные AWS базовые образы, которые AWS регулярно обновляет для обеспечения безопасности и исправления ошибок, используя при этом последние доступные исправления.

Вопрос. Есть ли разница в производительности между функциями, определенными как ZIP-образы и образы контейнеров?

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

Вопрос. Как оплачивается развертывание функций Lambda в виде образов контейнеров?

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

Вопрос. Что такое эмулятор интерфейса среды выполнения Lambda?

Эмулятор интерфейса среды выполнения Lambda – это прокси-сервер для Runtime API в Lambda, с помощью которого клиенты могут локально тестировать свою функцию Lambda, упакованную в виде образа контейнера. Это облегченный веб-сервер, который преобразует HTTP-запросы в события JSON и эмулирует Runtime API в Lambda. С его помощью можно локально тестировать функции, используя знакомые инструменты, такие как cURL и Docker CLI (при тестировании функций, упакованных как образы контейнеров). Кроме того, он упрощает запуск приложения во время использования дополнительных вычислительных сервисов. Эмулятор интерфейса среды выполнения Lambda можно включить в образ контейнера, чтобы он изначально принимал HTTP-запросы вместо событий JSON, необходимых для развертывания в Lambda. Этот компонент не эмулирует оркестратор Lambda или конфигурации безопасности и аутентификации. Эмулятор интерфейса среды выполнения распространяется с открытым исходным кодом на GitHub. Для начала работы его можно загрузить и установить на локальный компьютер.

Вопрос. Зачем нужен эмулятор интерфейса среды выполнения Lambda во время локального тестирования?

Runtime API в Lambda во время работы сервиса Lambda принимает события JSON и возвращает ответы. Эмулятор интерфейса среды выполнения Lambda позволяет функции, упакованной в виде образа контейнера, принимать HTTP-запросы во время локального тестирования с помощью таких инструментов, как cURL, и локально отображать их для функции через тот же интерфейс. Это позволяет использовать команду docker run или docker-compose up для локального тестирования приложения Lambda.

Вопрос. Какое поведение функций можно протестировать локально с помощью эмулятора?

Эмулятор можно использовать, чтобы проверить, совместим ли код функции со средой Lambda, работает ли успешно и обеспечивает ли ожидаемый результат. Например, можно имитировать тестовые события из разных источников событий. Кроме того, можно использовать его для тестирования расширений и агентов, встроенных в образ контейнера, на соответствие API расширений для Lambda.

Вопрос. Как эмулятор интерфейса среды выполнения помогает запускать образ, совместимый с Lambda, на дополнительных вычислительных сервисах?

Клиенты могут добавить эмулятор интерфейса среды выполнения в качестве точки входа к образу контейнера или упаковать его в качестве сопутствующего элемента, чтобы гарантировать, что образ контейнера теперь принимает HTTP-запросы вместо событий JSON. Это упрощает внесение изменений, необходимых для запуска образа контейнера в дополнительных вычислительных сервисах. Клиенты несут ответственность за соблюдение всех рекомендаций по безопасности, производительности и параллельности для выбранной среды. Эмулятор интерфейса времени исполнения предварительно упакован в образы, предоставленные AWS Lambda, и по умолчанию доступен в AWS SAM CLI. Поставщики базовых образов могут использовать документацию, чтобы обеспечить одинаковый опыт взаимодействия для своих базовых образов.

Вопрос. Как развернуть существующее контейнерное приложение в AWS Lambda?

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

  1. Образ контейнера должен внедрять Runtime API в Lambda. У нас есть набор пакетов программного обеспечения с открытым исходным кодом (клиенты интерфейса среды выполнения), которые реализуют Runtime API в Lambda, что позволяет легко расширять предпочтительные базовые образы для обеспечения совместимости с Lambda.
  2. Образ контейнера должен иметь возможность работать в файловой системе, доступной только для чтения. Ваш код функции может получить доступ к доступному для записи хранилищу каталога /tmp размером 512 МБ. Если используется образ, которому требуется доступный для записи корневой каталог, настройте его для записи в каталог /tmp.
  3. Пользователь Lambda по умолчанию может читать файлы, необходимые для выполнения кода функции. Lambda определяет пользователя Linux по умолчанию с наименее привилегированными разрешениями, который выполняет рекомендации по безопасности. Вам необходимо убедиться, что код приложения не полагается на файлы, выполнение которых ограничено другими пользователями Linux.
  4. Это образ контейнера на базе Linux.

AWS Lambda SnapStart

Вопрос. Что такое AWS Lambda SnapStart?
 
AWS Lambda SnapStart для Java обеспечивает до 10 раз более быстрый запуск функций. Этап инициализации (на котором AWS Lambda загружает код функции и инициализирует внешние зависимости) является основной причиной задержки запуска функций по запросу и происходит во время первого вызова. С помощью Lambda SnapStart Lambda заблаговременно инициализирует одноразовый код функции инициализации во время публикации ее версии, а не при первом ее вызове. Затем Lambda делает снимок состояния и кэширует состояние памяти и диска инициализированной  среды выполнения. Во время вызова функции и по мере ее масштабирования Lambda восстанавливает ее из кэшированного снимка состояния вместо того, чтобы инициализировать ее с нуля.
 
Вопрос. Как настроить функцию Lambda для использования Lambda SnapStart?
 
Lambda SnapStart – простая конфигурация функционального уровня, которую можно настроить для новых и существующих функций Java с помощью API Lambda, Консоли управления AWS, Интерфейса командной строки AWS (CLI), AWS SDK, Комплекта для облачной разработки AWS (CDK), AWS CloudFormation и Модели бессерверных приложений AWS (SAM). Если вы настроите Lambda SnapStart, то получите преимущества высокой производительности при запуске всех публикуемых версий функций. Дополнительную информацию о Lambda SnapStart см. в документации.
 
Вопрос. В каких случаях стоит выбрать Lambda SnapStart, а в каких – Provisioned Concurrency (PC)?

Lambda SnapStart позволяет оптимизировать производительность и в 10 раз ускорить время запуска функций Java посредством уменьшения переменной задержки, возникающей вследствие выполнения одноразового кода инициализации. Lambda SnapStart работает со всеми функциями в вашем приложении или аккаунте без дополнительной платы. Когда клиент публикует версию функции с помощью Lambda SnapStart, код функции инициализируется заблаговременно, а не при первом вызове. Затем Lambda делает снимок состояния инициализированной среды выполнения и сохраняет его в многоуровневом кэше для обеспечения доступа с низкой задержкой. При первом вызове и последующем масштабировании функции Lambda восстанавливает ее из кэшированного снимка состояния вместо того, чтобы инициализировать ее с нуля. Таким образом сводятся к минимуму задержки при запуске.

Несмотря на то, что функция Lambda SnapStart позволяет уменьшить задержку при запуске, она работает на основе принципа «разумных усилий» и не гарантирует устранение «холодных» запусков. Если у вашего приложения имеются строгие требования касательно задержки и времени запуска, которое должно составлять не более ста миллисекунд, мы рекомендуем вам использовать PC.

Вопрос. Какие среды выполнения поддерживает Lambda SnapStart?
 
Lambda SnapStart поддерживает среду выполнения Java 11. Поддержка будущих версий Java будет добавлена после их выпуска. Полный перечень сред выполнения, которые поддерживает Lambda, см. в документации.
 
Вопрос. Можно ли активировать Lambda SnapStart вместе с PC в одной и той же функции?

Нет. Lambda SnapStart и PC нельзя активировать в одной и той же функции одновременно.
 
Вопрос. Можно ли настроить виртуальное частное облако (VPC) для функции Lambda SnapStart?
 
Да. Вы можете настроить доступ к ресурсам в виртуальном частном облаке (VPC) для функции Lambda SnapStart. Дополнительную информацию о том, как настроить VPC для своей функции, см. в документации по Lambda.
 
Вопрос. Можно ли настроить Lambda SnapStart в архитектурах x86 и Arm?

Нет. На данный момент Lambda SnapStart можно настроить только для функций, выполняемых на основе архитектуры x86.
 
Вопрос. Можно ли активировать Lambda SnapStart с Эластичной файловой системой Amazon (EFS)?

Нет. На данный момент нельзя активировать Lambda SnapStart с Amazon EFS.
 
Вопрос. Можно ли активировать Lambda SnapStart с краткосрочным хранилищем (/tmp) с объемом памяти более 512 МБ?
 
Нет. На данный момент нельзя активировать Lambda SnapStart с краткосрочным хранилищем (/tmp) с объемом памяти более 512 МБ.
 
Вопрос. Нужно ли учитывать совместимость ПО при кэшировании и восстановлении из снимков состояния?

Да. Если ваш код подразумевает уникальность состояния, вам нужно оценить его устойчивость к операциям снимков состояния (таким как клонирование и восстановление). Подробные сведения об аспектах уникальности в снимках состояния виртуальных машин при использовании Lambda SnapStart см. в документации и блоге.

Вопрос. Можно ли выполнить собственный код перед созданием снимка состояния или во время восстановления функции из снимка состояния?

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

Вопрос. Взимается ли плата за Lambda SnapStart?

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

Вопрос. Сколько сохраняются в кэше Lambda SnapStart снимки состояния для опубликованных версий функций?

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

Вопрос. Как зашифровать снимки состояния инициализированной среды выполнения, созданные Lambda SnapStart?

Снимки состояния зашифровываются по умолчанию с помощью уникальных ключей Сервиса управления ключами AWS (KMS), которые находятся в собственности и под управлением сервиса Lambda. Клиенты также могут зашифровать снимки состояния с помощью ключей KMS, которые им принадлежат и полностью ими управляются.

Вопрос. Есть ли ограничение по времени, в течение которого может выполняться инициализация моего кода с помощью Lambda SnapStart?

Максимально допустимая продолжительность инициализации для Lambda SnapStart будет соответствовать длительности времени ожидания выполнения, которую вы настроили для своей функции. Максимальный лимит для настраиваемого времени ожидания выполнения функции составляет 15 минут.
 

Provisioned Concurrency

Вопрос. Что такое AWS Lambda Provisioned Concurrency?

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

Вопрос. Как настроить Provisioned Concurrency и управлять этой возможностью?

Параллельные операции для функции можно настроить в Консоли управления AWS, с помощью Lambda API, интерфейса командной строки AWS и AWS CloudFormation. Provisioned Concurrency проще всего использовать с помощью AWS Auto Scaling. Auto Scaling можно использовать для настройки расписаний. Кроме того, Auto Scaling автоматически регулирует уровень Provisioned Concurrency в режиме реального времени по мере изменения требований. Чтобы узнать больше о Provisioned Concurrency, см. документацию.

Вопрос. Требуется ли менять код, чтобы использовать Provisioned Concurrency?

Для использования Provisioned Concurrency не требуется вносить изменения в код. Эта возможность эффективно работает со всеми существующими функциями и средами выполнения. При использовании Provisioned Concurrency в модели вызовов и выполнения Lambda нет никаких изменений.

Вопрос. Как начисляется плата за Provisioned Concurrency?

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

Вопрос. В каких случаях следует использовать Provisioned Concurrency?

Provisioned Concurrency – оптимальный выбор для создания приложений, которые чувствительны к задержкам, например серверной части мобильных и интернет-приложений, синхронно вызываемых API и интерактивных микросервисов. Количество параллельных операций легко настраивается в зависимости от уникальных требований вашего приложения. Во время повышения активности можно увеличить количество параллельных операций, а во время ее снижения – уменьшить или выключить эту возможность.

Вопрос. Что происходит, если функции получают уведомления свыше заданного уровня в Provisioned Concurrency?

Если количество параллельных операций функции достигает заданного уровня, то задержка и масштаб ее последующих вызовов будут такими же, как и у обычных функций Lambda. Масштабирование функции можно ограничить определенным уровнем. В этом случае функция не превысит заданный уровень Provisioned Concurrency. Этот механизм позволяет избежать нежелательных колебаний в работе приложения, когда спрос превышает ожидаемое количество операций.

Функции AWS Lambda на базе процессоров Graviton2

Вопрос. Каковы функции AWS Lambda на базе процессоров Graviton2?

AWS Lambda позволяет запускать функции на процессорах x86 или Arm. Процессоры AWS Graviton2 созданы по оригинальной разработке Amazon Web Services с использованием 64-битных ядер Arm Neoverse, чтобы обеспечить оптимальное соотношение цены и качества для облачных нагрузок. Клиенты получают те же преимущества AWS Lambda: запуск кода без подготовки или управления серверами, автоматическое масштабирование, высокая доступность и оплата только за используемые ресурсы.

Вопрос. Почему следует использовать функции AWS Lambda на базе процессоров Graviton2?

Функции AWS Lambda на базе Graviton2, использующие архитектуру процессора на базе Arm от AWS, обеспечивают на 34 % более высокую производительность различных бессерверных рабочих нагрузок (веб- и мобильные серверы, обработка данных и потоковая обработка), чем функции на процессорах x86. Функции Graviton2 дают меньшую задержку, производительность на 19 % выше, сниженную на 20 % стоимость и наибольшую энергоэффективность, доступную в AWS. Благодаря этому они используются для критически важных бессерверных приложений. Клиенты могут выбрать Graviton2 в качестве целевого процессора как для существующих, так и для новых функций. Функции, работающие на Graviton2, можно развертывать как zip-файлы или как образы контейнеров.

Вопрос. Как настроить работу функций на процессорах Graviton2?

Вы можете настроить запуск функций на Graviton2 с помощью консоли управления AWS, API AWS Lambda, интерфейса командной строки AWS CLI и AWS CloudFormation, установив для функции флажок архитектуры «arm64».

Вопрос. Как развернуть приложение, созданное с использованием функций на базе процессоров Graviton2?

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

Вопрос. Может ли приложение использовать обе функции: работающие и на процессорах Graviton2, и на процессорах x86?

Приложение может содержать функции, работающие на обеих архитектурах. AWS Lambda позволяет изменять архитектуру («x86_64» или «arm64») текущей версии функции. Но как только будет создана определенная версия функции, архитектуру изменить невозможно.

Вопрос. Поддерживает ли AWS Lambda многоархитектурные образы контейнеров?

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

Вопрос. Могу ли я создать уровни AWS Lambda, нацеленные на функции на базе процессоров AWS Graviton2?

Да. Уровни и расширения можно нацелить на совместимые архитектуры «x86_64» или «arm64». По умолчанию, архитектурой для функций и уровней является «x86_64».

Вопрос. Какие языки и среды выполнения поддерживают функции Lambda, работающие на процессорах Graviton2?

После запуска клиенты могут использовать Python, Node.js, Java, Ruby, .Net Core, настраиваемую среду выполнения (provided.al2) и образы на базе OCI. Подробнее см. в информации о AWS Lambda Runtimes.

Вопрос. Каковы цены на функции AWS Lambda на базе процессоров Graviton2? Можно ли использовать уровень бесплатного пользования AWS Lambda при работе с функциями на базе Graviton2?

Функции AWS Lambda на базе процессоров Graviton2 на 20 % дешевле функций Lambda на базе x86. Уровень бесплатного пользования можно использовать для работы функций AWS Lambda на базе архитектур x86 и Arm.

Вопрос. Как выбрать, на каких процессорах – Graviton2 или x86 – запускать функции?

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

Вопрос. Нужна ли мне машинная разработка на базе Arm для создания, сборки и тестирования функций, работающих локально на процессорах Graviton2?

Интерпретируемые языки, такие как Python, Java и Node, обычно не требуют перекомпиляции, если код не ссылается на библиотеки со специфичными для архитектуры компонентами. В таких случаях потребуется предоставить библиотеки, предназначенные для arm64. Подробнее см. на странице Начало работы с AWS Graviton. Для неинтерпретируемых языков потребуется компиляция кода для arm64. Более современные компиляторы будут создавать код, скомпилированный для arm64, а вам потребуется развернуть его для тестирования в среде на базе arm. Подробнее об использовании функций Lambda с Graviton2 см. в документации.

Amazon EFS для AWS Lambda

Вопрос: Что из себя представляет Amazon EFS для AWS Lambda?

Amazon Elastic File System (Amazon EFS) для AWS Lambda позволяет клиентам безопасно считывать, записывать и сохранять большие объемы данных практически в любом масштабе, используя полностью управляемую эластичную файловую систему NFS, которую можно масштабировать по требованию без необходимости самостоятельно выделять ресурсы или управлять ими. Ранее для загрузки данных объемом до 512 МБ из S3 или баз данных в локальное временное хранилище разработчикам приходилось добавлять соответствующий код в свои функции. С EFS для Lambda писать код для загрузки данных во временное хранилище и их последующей обработки не требуется.

Вопрос: Как настроить Amazon EFS для Lambda?

Разработчики могут без труда подключить существующую файловую систему EFS к функции Lambda через точку доступа EFS Access Point, используя консоль сервиса, интерфейс командной строки или SDK. При первом вызове функции файловая система автоматически подключается и становится доступной для кода функции. Подробнее см. в документации.

Вопрос: Нужно ли настраивать функцию с использованием настроек VPC перед подключением файловой системы Amazon EFS?

Да. Целевые точки подключения для Amazon EFS связаны с подсетью в VPC. Для функции AWS Lambda необходимо настроить доступ к этому облаку VPC.

Вопрос: Как можно использовать сервис Amazon EFS для Lambda?

EFS для Lambda идеально подходит для создания приложений машинного обучения, загрузки крупных справочных файлов или моделей, обработки или резервного копирования больших объемов данных, размещения веб‑контента или разработки внутренних систем сборки. Клиенты также могут использовать EFS для Lambda в целях сохранения состояния между вызовами в архитектуре микросервисов с фиксацией состояния, в рабочем процессе Step Functions или для обмена файлами между бессерверными приложениями и приложениями на основе инстансов или контейнеров.

Вопрос. Будут ли данные шифроваться при передаче?

Да. При передаче данных используется стандартный отраслевой протокол Transport Layer Security (TLS) 1.2 для шифрования данных, которыми обмениваются функции AWS Lambda и файловые системы EFS.

Вопрос: Будут ли данные шифроваться при хранении?

Клиенты могут настроить Amazon EFS для шифрования данных при хранении. Шифрование при хранении обеспечивает прозрачное шифрование данных при записи и прозрачное дешифрование во время чтения; изменения в код приложений вносить не требуется. Ключи шифрования управляются сервисом AWS Key Management Service (KMS), что исключает необходимость создания и поддержки собственной инфраструктуры безопасного управления ключами.

Вопрос: Как начисляется плата за использование Amazon EFS для AWS Lambda?

Дополнительная плата за использование Amazon EFS для AWS Lambda не начисляется. Клиенты оплачивают стандартную стоимость AWS Lambda и Amazon EFS. Если функции Lambda и EFS используются в одной зоне доступности, плата за передачу данных не взимается. Однако если используется пиринговое подключение VPC для доступа к нескольким аккаунтам, плата за передачу данных будет начисляться. Подробнее см. на странице Цены.

Вопрос: Можно ли связать с функцией AWS Lambda несколько файловых систем Amazon EFS?

Нет. Каждая функция Lambda может иметь доступ только к одной файловой системе EFS.

Вопрос: Можно ли использовать одну и ту же файловую систему Amazon EFS для множества функций, контейнеров и инстансов?

Да. Amazon EFS поддерживает работу с функциями Lambda, контейнерами ECS и Fargate, а также инстансами EC2. Файловая система может находиться в совместном доступе, а для разделения прав доступа каждой функции, контейнера или инстанса можно использовать политики IAM и точки доступа Access Point.  

Расширения для Lambda

Вопрос: Что представляют собой расширения AWS Lambda?

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

Вопрос: Как работают расширения Lambda?

Расширения – это сопутствующие процессы, запускаемые в среде выполнения Lambda, в которой выполняется код функций. Кроме того, они могут выполняться отдельно от вызова функции, т. е. начинаться до ее инициализации, выполняться параллельно с функцией, после ее выполнения и до отключения среды выполнения сервисом Lambda.

Вопрос: Для чего можно использовать расширения Lambda?

Вы можете использовать расширения для работы с привычными инструментами мониторинга, наблюдения, обеспечения безопасности и управления как от AWS, так и от следующих партнеров: AppDynamics, Coralogix, Datadog, Dynatrace, Epsagon, HashiCorp, Honeycomb, Imperva, Lumigo, Check Point CloudGuard, New Relic, Thundra, Splunk, Sentry, Site24x7, Sumo Logic, AWS AppConfig, Amazon CodeGuru Profiler, Amazon CloudWatch Lambda Insights, AWS Distro для OpenTelemetry. Для получения дополнительной информации об этих расширениях прочитайте публикацию в блоге о запуске.

Вопрос: Как настраивать расширения Lambda и управлять ими?

Развертывать расширения можно с помощью слоев для одной или нескольких функций Lambda с использованием консоли сервиса, интерфейса командной строки или же инструментов типа «инфраструктура как код», например CloudFormation, AWS Serverless Application Model и Terraform. Чтобы начать работу, изучите документацию.

Вопрос. С какими средами выполнения можно использовать расширения AWS Lambda?

Список сред выполнения, которые поддерживают расширения, приведен здесь.

Вопрос. Учитываются ли расширения при расчете лимита пакета развертывания?

Да, общий размер извлеченной функции и всех расширений не может превышать максимального размера извлеченного пакета развертывания, составляющего 250 МБ.

Вопрос: Влияет ли использование расширений на производительность?

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

Вы можете использовать метрику PostRuntimeExecutionDuration для измерения дополнительного времени, которое требуется расширению после выполнения функции, и метрику MaxMemoryUsed для измерения увеличения использованной памяти. Чтобы оценить влияние конкретного расширения, можно также использовать метрику Duration. В настоящее время ответ на выполнение функции возвращается после завершения выполнения функции и расширения. Подробнее см. в документации для разработчиков по Lambda.

Вопрос: Какая плата взимается за использование расширений Lambda?

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

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

Дополнительная плата за установку расширений не взимается, однако предложения партнеров могут быть платными. Подробные сведения см. на веб‑сайте соответствующего партнера.

Вопрос: Можно ли создавать собственные расширения Lambda?

Да, с помощью API расширений для среды выполнения AWS Lambda. Подробнее см. в документации.

Вопрос. Как работают расширения, если включена функция Provisioned Concurrency?

Когда функция Provisioned Concurrency включена, функции находятся в инициализированном состоянии и готовы к быстрому реагированию в пределах ста миллисекунд. Если функция Provisioned Concurrency включена, она также инициализирует расширения и поддерживает их в состоянии готовности для выполнения параллельно с кодом функции.

Вопрос: Какими разрешениями обладают расширения?

Расширения выполняются в той же среде, что и функция Lambda, поэтому им доступны те же ресурсы, а разрешения используются одновременно функцией и расширением. Таким образом они совместно используют учетные данные, роли и переменные среды. Расширения обладают доступом к коду функции только для чтения, а также могут выполнять чтение и запись в каталоге /tmp.

Вопрос. Что такое API телеметрии AWS Lambda?

API телеметрии AWS Lambda дает вам возможность использовать расширения собирать расширенные данные, полученные в результате мониторинга и наблюдения непосредственно от Lambda, и отправлять их выбранным целевым объектам.

Вопрос. Как работает API телеметрии?

Сервис Lambda автоматически собирает данные телеметрии и направляет их в Amazon CloudWatch и AWS X-Ray. API телеметрии предоставляет простой интерфейс HTTP или TCP для расширений, чтобы иметь возможность получать одни и те же данные телеметрии с помощью событий жизненного цикла среды выполнения Lambda и метрики уровня вызова функций. Расширения могут использовать API телеметрии для сбора этих потоков телеметрии непосредственно из Lambda, а также их дальнейшей обработки, фильтрации и отправки любым целевым объектам.

Вопрос. Как приступить к работе с API телеметрии?

Расширения с поддержкой API телеметрии для функций Lambda можно развертывать с использованием консоли AWS Lambda, интерфейса командной строки или же инструментов типа «инфраструктура как код», например AWS CloudFormation, Модель бессерверных приложений AWS (SAM) и Terraform. Вам не придется вносить изменения в код для использования расширения с поддержкой API телеметрии для функции Lambda. Просто добавьте расширение предпочтительного поставщика инструментария в функцию Lambda.  Чтобы начать работу с расширениями, созданными партнерами APN, перейдите по ссылкам, приведенным в публикации в блоге о выпуске. Также вы можете создать собственное расширение, которое использует API телеметрии. Подробнее см. в Руководстве для разработчиков по AWS Lambda.

Вопрос: Влияет ли использование API телеметрии на производительность?

Вы можете использовать API телеметрии только с расширениями AWS Lambda. Расширения могут влиять на производительность функции, поскольку совместно с ней они используют такие ресурсы, как ЦПУ, память и хранилище. Использование памяти растет линейно по мере увеличения количества подписок на API телеметрии, потому что каждая подписка открывает новый буфер памяти для хранения данных телеметрии. Однако вы можете оптимизировать использование памяти, регулируя конфигурацию буферизации в запросе на подписку на API телеметрии. Мы рекомендуем поставщикам расширений публиковать данные об ожидаемом потреблении ресурсов, чтобы разработчикам функций было проще выбрать подходящее расширение. Чтобы узнать прогнозы производительности расширения, обратитесь к его документации, предоставляемой поставщиком.

Вопрос. Какая плата взимается за использование API телеметрии?

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

Вопрос. Отключается ли отправка журналов в Журналы Amazon CloudWatch при использовании API телеметрии?

Нет. По умолчанию сервис Lambda отправляет все данные телеметрии в журналы CloudWatch, и использование API телеметрии не отключает отправку в журналы CloudWatch.

URL-адреса функции Lambda

Вопрос. Поддерживают ли функции AWS Lambda адреса HTTP(S)?

Да. Функции Lambda можно настроить с помощью URL-адреса функции – встроенного адреса HTTPS, который вызывается через браузер, Curl и любой HTTP клиента. URL-адреса функции позволяют с легкостью начать создание функций, доступных по протоколу HTTPS.

Вопрос. Как настроить URL-адрес функции Lambda для моей функции?

Вы можете настроить URL-адрес функции в консоли управления AWS, AWS Lambda API, AWS CLI, AWS CloudFormation и AWS Serverless Application Model. URL-адреса функции можно включить в последней ($LATEST) неквалифицированной версии функции или в любом псевдониме функции. Подробнее о настройке URL-адреса функции см. в документации.

Вопрос. Как обезопасить URL-адрес функции Lambda?

Безопасность URL-адресов функции Lambda по умолчанию обеспечивается за счет авторизации IAM. При желании можно отключить авторизацию IAM для создания публичного адреса или внедрения пользовательской авторизации в бизнес-логику функции.

Вопрос. Как вызвать функцию с помощью URL-адреса функции Lambda?

Вызвать функцию можно с помощью интернет-браузера, перейдя по URL-адресу Lambda, кода клиентского приложения, используя библиотеку HTTP, или командной строки, используя Curl.

Вопрос. Работают ли URL-адреса функции Lambda с версиями и псевдонимами функции?

Да. Вы можете настроить взаимодействие URL-адресов функции Lambda с версиями и псевдонимами. Если псевдоним не выбран, URL по умолчанию указывает на последний ($LATEST). В качестве цели URL-адресов функции нельзя выбрать отдельную версию функции.

Вопрос. Можно ли включить пользовательские домены для URL-адресов функции Lambda?

URL-адреса функции в настоящий момент не поддерживают пользовательские имена доменов. Чтобы использовать пользовательский домен с URL функции, необходимо создать базу раздачи Amazon CloudFront и CNAME и сопоставить пользовательский домен с именем базы раздачи Amazon CloudFront. Затем обозначить доменное имя базы раздачи CloudFront, чтобы выполнить перенаправление к URL-адресу функции, выступающему источником.

 Вопрос. Можно ли использовать URL-адреса функции Lambda для вызова функции в VPC?

Да, URL-адреса функции Lambda можно использовать для вызова функции в VPC.

Вопрос. Какова стоимость использования URL-адресов функции Lambda?

Дополнительная плата за использование URL-адресов отсутствует. Вы платите стандартную цену за AWS Lambda. Подробнее см. в ценах на AWS Lambda.

Lambda@Edge

Вопрос: Что представляет собой Lambda@Edge?

С Lambda@Edge можно запускать код в местоположениях AWS по всему миру без выделения серверов и управления ими и обеспечивать ответ на запросы конечных пользователей с минимальной сетевой задержкой. Сервис позволяет загрузить код Node.js или Python в AWS Lambda и настроить вызов конкретной функции в ответ на запросы сервиса Amazon CloudFront (т. е. при получении запроса пользователя, при перенаправлении запроса в адрес сервера‑источника, при возврате запроса от сервера‑источника, а также непосредственно перед отправкой ответа конечному пользователю). После этого код готов к исполнению в местоположениях AWS во всем мире при каждом получении запроса на контент. При этом код будет масштабироваться вместе с объемом запросов CloudFront по всему миру. Подробнее см. в нашей документации.

Вопрос: Как использовать Lambda@Edge?

Чтобы использовать Lambda@Edge, достаточно загрузить свой код в AWS Lambda и настроить вызов функции в ответ на запросы Amazon CloudFront. Код должен соответствовать лимитам сервиса Lambda@Edge. Lambda@Edge поддерживает для глобального вызова на основе событий CloudFront код Node.js и Python. Подробнее см. в нашей документации.

Вопрос: В каких случаях следует использовать Lambda@Edge?

Lambda@Edge оптимизирован для чувствительных к задержкам приложений, конечные пользователи которых располагаются по всему миру. Вся информация, необходимая для принятия решения, должна быть доступна на стороне CloudFront в рамках функции и запроса. Например, если требуется принять решение о доставке контента на основании ряда характеристик пользователя (местоположение, устройство и т. д.), теперь это можно сделать ближе к пользователям, без отправки информации на централизованный сервер.

Вопрос: Можно ли развертывать существующие функции Lambda для вызова в глобальном режиме?

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

Вопрос: Какие события Amazon CloudFront могут использоваться для вызова функций?

Функции могут быть автоматически запущены в ответ на следующие события Amazon CloudFront:

  • Запрос пользователя. Это событие возникает, когда конечный пользователь или устройство в Интернете отправляет в CloudFront запрос HTTP(S), который поступает в ближайшее к пользователю периферийное местоположение.
  • Ответ посетителю. Это событие возникает, когда сервер CloudFront в периферийном местоположении готов ответить конечному пользователю или устройству, сделавшему запрос.
  • Запрос источника. Это событие возникает, когда в кэше периферийного сервера CloudFront отсутствует запрошенный объект и запрос посетителя перенаправляется на веб‑сервер источника (например, Amazon EC2, Application Load Balancer или Amazon S3).
  • Ответ источника. Это событие возникает, когда сервер CloudFront в периферийном местоположении получает ответ от веб‑сервера источника.

Вопрос: Чем использование AWS Lambda@Edge отличается от использования AWS Lambda за шлюзом Amazon API Gateway?

Разница в том, что API Gateway и Lambda являются региональными сервисами. Использование Lambda@Edge и Amazon CloudFront позволяет исполнять логику программы в нескольких местоположениях AWS в зависимости от местоположения конечных пользователей.

Масштабирование и доступность

Вопрос: Насколько доступны функции AWS Lambda?

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

Вопрос: Останутся ли функции AWS Lambda доступными, если я изменю код или конфигурацию?

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

Вопрос: Существует ли ограничение на количество одновременно запущенных функций AWS Lambda?

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

Если вы хотите отправить запрос на увеличение лимита одновременных исполнений, используйте квоты на обслуживание

Вопрос. Что произойдет, если мой аккаунт превысит установленное по умолчанию ограничение на одновременные исполнения?

В случае превышения ограничения одновременных исполнений синхронно вызываемые функции AWS Lambda возвращаются с ошибкой регулирования (код ошибки 429). Функции Lambda, вызываемые асинхронно, на протяжении 15–30 минут могут поглощать значительные объемы трафика, после чего входящие события будут отклоняться и пропускаться. Если функция Lambda вызвана в ответ на события Amazon S3, отклоненные события AWS Lambda могут быть сохранены и отправлены из Amazon S3 повторно в течение 24 часов. События из потоков Amazon Kinesis Streams и Amazon DynamoDB Streams вызываются повторно до тех пор, пока функция Lambda не будет исполнена успешно или пока не истечет срок действия данных. Потоки Amazon Kinesis и Amazon DynamoDB сохраняют данные на протяжении 24 часов.

Вопрос. Применяются ли максимальные ограничения одновременных исполнений по умолчанию на уровне каждой функции?

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

Вопрос. Как быстро масштабируются мои функции AWS Lambda?

Каждая синхронно вызываемая функция Lambda может масштабироваться со скоростью до 1000 одновременных исполнений каждые 10 секунд. Хотя скорость масштабирования Lambda подходит для большинства примеров использования, она особенно подходит для сценариев с предсказуемыми или непредсказуемыми всплесками трафика. Например, обработка данных в соответствии с SLA требует предсказуемого, но быстрого масштабирования для удовлетворения спроса на обработку. Аналогичным образом, публикация последних новостей или мгновенные продажи могут привести к непредсказуемому росту трафика за короткий период времени. Скорость масштабирования Lambda позволяет упростить такие примеры использования без дополнительных конфигураций или инструментов. Кроме того, ограничение параллельного масштабирования – это ограничение на уровне функций. Это означает, что каждая функция в вашем аккаунте масштабируется независимо от других.

Вопрос. Что произойдет в случае сбоя в функции Lambda во время обработки события?

При возникновении сбоя синхронно вызываемые функции Lambda ответят с ошибкой исключения. Функции Lambda, запускаемые асинхронно, вызываются повторно не менее трех раз. События из потоков Amazon Kinesis Streams и Amazon DynamoDB Streams вызываются повторно до тех пор, пока функция Lambda не будет исполнена успешно или пока не истечет срок действия данных. Потоки Kinesis и DynamoDB сохраняют данные не менее 24 часов.

Вопрос: Что будет, если вызов функции Lambda нарушает установленные политики?

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

Вопрос: Какие ресурсы можно установить в качестве очереди необрабатываемых сообщений для функции Lambda?

В качестве очереди необрабатываемых сообщений можно настроить очередь Amazon SQS или тему Amazon SNS.

Безопасность и контроль доступа

Вопрос: Как разрешить функции AWS Lambda доступ к другим ресурсам AWS?

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

Вопрос: Как управлять тем, какие именно корзины Amazon S3 могут вызывать конкретные функции AWS Lambda?

При настройке корзины Amazon S3 для отправки сообщений в функцию AWS Lambda создается правило политики ресурсов, разрешающее доступ. Подробнее о политиках ресурсов и контроле доступа к функциям Lambda см. в Руководстве для разработчиков по Lambda.

Вопрос: Как управлять тем, какие таблицы Amazon DynamoDB или поток Amazon Kinesis может опрашивать функция AWS Lambda?

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

Вопрос: Как управлять тем, какую очередь Amazon SQS будет опрашивать функция AWS Lambda?

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

Вопрос. Как получить доступ к ресурсам Amazon VPC с помощью функции AWS Lambda?

Чтобы получить доступ к ресурсам VPC можно включить функции Lambda, указав подсеть и группу безопасности в конфигурации функций. Функции Lambda, настроенные на доступ к ресурсам в конкретном облаке VPC, по умолчанию не будут иметь доступа к Интернету. Чтобы предоставить им доступ, используйте интернет-шлюзы. По умолчанию функции Lambda взаимодействуют с ресурсами VPC с двумя стеками по протоколу IPv4. Можно настроить функции для доступа к ресурсам VPC с двумя стеками по протоколу IPv6. Дополнительные сведения о функциях Lambda, настроенных в VPC, см. в разделе Частные сети Lambda с VPC.

Вопрос. Что такое подписание кода для AWS Lambda?

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

Вопрос. Как создать артефакты кода с цифровой подписью?

Артефакты кода с цифровой подписью можно создавать с помощью профиля подписи через консоль AWS Signer, Signer API, SAM CLI или AWS CLI. Подробнее см. в документации по AWS Signer.

Вопрос. Как настроить функции Lambda, чтобы включить подписание кода?

Чтобы включить подписание кода, можно создать конфигурацию подписания кода через Консоль управления AWS, Lambda API, AWS CLI, AWS CloudFormation и AWS SAM. Конфигурация подписания кода помогает задать утвержденные профили подписи и указать, что делать в случае сбоя проверки подписи – предупреждать или отклонять развертывания. Конфигурации подписания кода можно прикрепить к отдельным функциям Lambda, чтобы включить возможность подписания кода. Теперь такие функции начинают проверку подписей при развертывании.

Вопрос. Какие проверки подписи AWS Lambda выполняет при развертывании?

При развертывании AWS Lambda может выполнять указанные ниже проверки подписи:

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

Подробнее см. в документации AWS Lambda.

Вопрос. Можно ли включить подписание кода для существующих функций?

Да, подписание кода можно включить для существующих функций, прикрепив к функции конфигурацию подписания кода. Это можно сделать с помощью консоли AWS Lambda, Lambda API, AWS CLI, AWS CloudFormation и AWS SAM.

Вопрос. Взимается ли дополнительная плата за использование подписания кода для AWS Lambda?

Дополнительная плата за использование подписания кода для AWS Lambda не взимается. Вы платите стандартную цену за AWS Lambda. Подробнее см. на странице Цены.

Расширенные средства управления журналами

Вопрос. Какие расширенные средства управления для ведения журналов поддерживаются в Lambda?

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

Вопрос. Как можно использовать расширенные средства управления для ведения журналов?

Журналы функций Lambda можно записывать в структурированном формате JSON, не используя собственные библиотеки журналов. Структурированные журналы JSON упрощают поиск, фильтрацию и анализ больших объемов записей журнала. Можно управлять фильтрацией журналов функций Lambda на уровне журналов без внесения изменений в код, что позволяет выбрать требуемый уровень детализации ведения журнала для функций Lambda, не просматривая большие объемы журналов при отладке и устранении ошибок. Можно также указать, в какую группу журналов Amazon CloudWatch Lambda будет их отправлять, что упростит объединение журналов нескольких функций приложения в одном месте. Затем можно применять политики безопасности, управления и хранения к журналам на уровне приложения, а не по отдельности к каждой функции.

Вопрос. Как использовать расширенные средства управления для ведения журналов?

Указать расширенные средства управления для ведения журналов для функций Lambda можно с помощью AWS Lambda API, консоли AWS Lambda, интерфейса командной строки AWS, модели бессерверных приложений AWS (SAM) и AWS CloudFormation. Чтобы узнать больше, ознакомьтесь с публикацией в блоге о запуске расширенных средств управления для ведения журналов или с руководством для разработчиков Lambda.

Вопрос. Могу ли я использовать собственные библиотеки журналов для создания структурированных журналов JSON для моей функции Lambda?

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

Вопрос. Как будет взиматься плата за использование расширенных средств управления для ведения журналов?

Дополнительная плата за использование расширенных средств управления для ведения журналов в Lambda не взимается. Плата в Журналах Amazon CloudWatch будет по-прежнему взиматься за прием и хранение журналов Lambda. Подробные сведения о ценах см. на странице цен CloudWatch.

Функции AWS Lambda на Java

Вопрос: Как скомпилировать код Java для функции AWS Lambda?

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

Вопрос: Что представляет собой среда JVM, которую использует AWS Lambda для исполнения функции?

Lambda предоставляет сборку openjdk 1.8 для Amazon Linux.

Функции AWS Lambda на Node.js

Вопрос: Можно ли использовать пакеты при работе с AWS Lambda?

Да. Можно использовать как пакеты NPM, так и пользовательские пакеты. Подробнее см. по ссылке.

Вопрос: Можно ли выполнить другие программы с помощью моей функции AWS Lambda, написанной на Node.js?

Да. Встроенная изолированная среда Lambda позволяет запускать пакетные скрипты (скрипты оболочки), среды выполнения для других языков, сервисные программы и исполняемые файлы. Подробнее см. по ссылке.

Вопрос: Можно ли использовать встроенные модули с функциями AWS Lambda, написанными на Node.js?

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

Вопрос: Можно ли исполнять бинарные файлы с помощью функции AWS Lambda, написанной на Node.js?

Да. Вы можете использовать команду child_process для Node.js, чтобы исполнить бинарный файл, включенный в функцию, или любой исполняемый файл в Amazon Linux, видимый для функции. Как вариант, несколько пакетов NPM могут существовать в качестве упакованных бинарных файлов командной строки, например node‑ffmpeg. Подробнее см. здесь.

Вопрос: Как развертывать код функции AWS Lambda, написанный на Node.js?

Чтобы выполнить развертывание кода функции Lambda, написанного на Node.js, просто упакуйте свой код JavaScript и зависимые библиотеки в формат ZIP. Такой файл ZIP можно загрузить с локального компьютера либо указать местоположение этого файла ZIP в Amazon S3. Подробнее см. в документации.

Функции AWS Lambda на Python

Вопрос: Можно ли использовать пакеты Python при работе с AWS Lambda?

Да. С помощью системы управления пакетами pip можно установить любые нужные пакеты Python.

Функции AWS Lambda на C#

Вопрос: Как упаковать функцию AWS Lambda на C# и выполнить ее развертывание?

Функцию Lambda на C# можно создать с помощью среды разработки Visual Studio, выбрав команду «Publish to AWS Lambda» в обозревателе решений. Можно также выполнить команду «dotnet lambda publish» непосредственно с помощью интерфейса командной строки dotnet с установленным пакетом [# Lambda CLI tools patch]. В результате будет создан пакет ZIP с исходным кодом на C# вместе со всеми зависимостями NuGet, а также опубликованной сборкой DLL, а затем выполнена его автоматическая загрузка в AWS Lambda с использованием параметра среды выполнения «dotnetcore1.0»

Функции AWS Lambda на PowerShell

Вопрос: Как развертывать код функции AWS Lambda, написанный на PowerShell?

Пакет развертывания PowerShell на Lambda – это файл ZIP, который содержит скрипт PowerShell, модули PowerShell, необходимые для данного скрипта, а также сборки, требуемые для размещения среды PowerShell Core. Чтобы создать пакет развертывания PowerShell на Lambda, используйте модуль PowerShell AWSLambdaPSCore, который можно установить из галереи PowerShell.

Вопрос: Как развертывать код функции AWS Lambda, написанный на PowerShell?  Пакет развертывания PowerShell на Lambda – это файл ZIP, который содержит скрипт PowerShell, модули PowerShell, необходимые для данного скрипта, а также сборки, требуемые для размещения среды PowerShell Core. Чтобы создать пакет развертывания PowerShell на Lambda, используйте модуль PowerShell AWSLambdaPSCore, который можно установить из галереи PowerShell.
Вопрос: Как развертывать код функции AWS Lambda, написанный на PowerShell?  Пакет развертывания PowerShell на Lambda – это файл ZIP, который содержит скрипт PowerShell, модули PowerShell, необходимые для данного скрипта, а также сборки, требуемые для размещения среды PowerShell Core. Чтобы создать пакет развертывания PowerShell на Lambda, используйте модуль PowerShell AWSLambdaPSCore, который можно установить из галереи PowerShell.

Функции AWS Lambda на Go

Вопрос: Как упаковать функцию AWS Lambda на Go и выполнить ее развертывание? 

Загрузите исполняемый артефакт Go в виде файла ZIP с помощью интерфейса командной строки AWS или консоли Lambda и выберите среду выполнения go1.x. При работе с Lambda для создания и упаковки кода можно использовать встроенные инструменты Go. Подробнее см. в документации

Функции AWS Lambda на Ruby

Вопрос: Как развертывать код функции AWS Lambda, написанный на Ruby? 

Чтобы выполнить развертывание функции Lambda, написанной на Ruby, упакуйте код и гемы Ruby в файл ZIP. Такой файл ZIP можно загрузить с локального компьютера либо указать местоположение этого файла ZIP в Amazon S3.

Другие темы

Вопрос: Какие версии Amazon Linux, Node.js, Python, JDK, .NET Core, SDK и дополнительных библиотек поддерживает AWS Lambda?

Список поддерживаемых версий см. по ссылке.

Вопрос: Можно ли поменять версию Amazon Linux или среды выполнения для языка программирования?

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

Вопрос: Можно ли записывать вызовы API AWS Lambda для последующего аудита?

Сервис AWS Lambda интегрирован с AWS CloudTrail. AWS CloudTrail может записывать информацию об использовании API тем или иным аккаунтом в файлы журналов и отправлять их в корзину Amazon S3, принадлежащую этому же аккаунту.

Вопрос: Как координировать вызовы между различными функциями Lambda?

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

Вопрос. Поддерживает ли AWS Lambda набор Advanced Vector Extensions 2 (AVX2)?

Да, AWS Lambda поддерживает набор инструкций Advanced Vector Extensions 2 (AVX2). Подробнее о том, как скомпилировать код приложения, чтобы повысить производительность этого набора инструкций, см. в документации для разработчиков AWS Lambda.

Подробнее о ценах на AWS Lambda

Перейти на страницу цен
Готовы начать?
Регистрация
Возникли дополнительные вопросы?
Связаться с нами