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

Вопрос: Что такое 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 Service; а также для обработки потоковых данных с помощью Amazon Kinesis без использования сервера.

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

AWS Lambda поддерживает код, написанный на Node.js (JavaScript), Python, Java (совместимый с Java 8) и C# (.NET Core). Ваш код может включать любые существующие библиотеки, даже встроенные. Ознакомьтесь с нашей документацией по использованию Node.js, Python, Java и C#.

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

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

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

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

Вопрос: Как обеспечивается безопасность кода в 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; кроме того, заблокированы системные вызовы 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. Для управления функциями также можно использовать AWS CLI и AWS SDK. Подробнее см. на странице Руководство разработчика Lambda.

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

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

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

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

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

Вопрос: Как масштабировать функции 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 должны завершать выполнение в течение 300 секунд. Тайм-аут по умолчанию равен 3 секундам, но вы можете выбрать свое значение в пределах от 1 до 300 секунд.

Вопрос: Какая плата взимается за использование функций 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. Некоторые сервисы отправляют такие события в Lambda, напрямую вызывая функцию в облаке (например, Amazon S3). Lambda также может опрашивать ресурсы в других сервисах, не посылающих события в Lambda. Например, Lambda может получать записи из потока Kinesis и выполнять функцию Lambda для каждого сообщения в потоке.

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

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

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

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

События передаются в функцию Lambda в качестве входного параметра события. Для источников событий, в которых события создаются пакетами (таких как Amazon Kinesis или потоки Amazon DynamoDB), параметр события может содержать несколько событий в одном вызове, основываясь на размере запрашиваемого пакета. Подробнее об уведомлениях событий Amazon S3 см. на странице Настройка уведомлений для событий Amazon S3. Подробнее о потоках Amazon DynamoDB см. на странице Руководство разработчика потоков DynamoDB. Подробнее о вызове функций 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 и CLI.

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

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

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

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

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

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

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

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

Вопрос: Как использовать функцию 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.

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

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

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

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

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

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

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

Вы загружаете желаемый код для выполнения AWS Lambda, а затем вызываете его с помощью мобильного приложения, используя SDK AWS Lambda, включенный в пакет SDK AWS Mobile. Вы можете в реальном времени совершать двусторонние (синхронные) вызовы для получения данных о проверке, а также асинхронные вызовы. Вы также можете определить пользовательский API с помощью Amazon API Gateway и вызывать свои функции Lambda с помощью любого совместимый клиента 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 автоматически получают данные об устройстве и приложении, осуществившем вызов, через «контекстный» объект.

Вопрос: Как функция 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 и Amazon Kinesis, 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». Когда сервис X-Ray включен для функции Lambda, 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 поддерживает только Node.js для глобального вызова на основе событий CloudFront. Подробнее см. в нашей документации.

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

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

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

Вы можете привязать существующие функции Lambda Node.js-6.10 к событиям 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 и Amazon DynamoDB вызываются снова до тех пор, пока функция Lambda не будет выполнена успешно или пока у данных не истечет срок. Amazon Kinesis и потоки Amazon DynamoDB сохраняют данные на протяжении 24 часов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Контроль доступа осуществляется с помощью роли функции Lambda. Роль, которую вы назначаете функции Lambda, также определяет и то, какие ресурсы может опрашивать 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».

Другие темы

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

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

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

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

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

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

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

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

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

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