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

Вопрос: Что такое 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 Lambda

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

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

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

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

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

Каждая функция Lambda получает 500 МБ временного дискового пространства в собственном каталоге /tmp.

Вопрос: Почему функции 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 МБ до 3 ГБ с шагом в 64 МБ.

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

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

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

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

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

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

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

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

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

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

Использование 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 см. в разделе Configuring Notifications for 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 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 оплачивается отдельно.

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

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

Lambda@Edge

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

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

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

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

Вопрос: В каких случаях следует использовать 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 Support, нажмите «Open a new case» (Создать новую заявку) и заполните заявку на увеличение ограничения.

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

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

Вопрос: Существуют ли ограничения по умолчанию на уровне функции?

Нет, ограничения по умолчанию применяются только на уровне аккаунта.

Вопрос: Что произойдет, если во время обработки события в функции 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 или параметров политики ресурсов в самой очереди. При существовании обеих политик будет применяться более строгая.

Вопрос: Можно ли с помощью функции AWS Lambda получить доступ к ресурсам в облаке Amazon VPC?

Да. Сервис может получить доступ к ресурсам в облаке Amazon VPC.

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

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

Вопрос: Можно ли предоставить одной функции Lambda доступ к нескольким облакам VPC?

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

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

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

Функции 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

Перейти на страницу цен
Готовы начать?
Регистрация
Есть вопросы?
Свяжитесь с нами