aws lambda что такое
Запускайте программный код и не беспокойтесь о серверах или кластерах
1 миллион запросов бесплатно
Запуск программного кода без необходимости выделять инфраструктуру или управлять ею. Просто напишите и передайте код в виде zip-файла или образа контейнера.
Обеспечьте автоматическое реагирование на запросы на выполнение кода в любом масштабе: от десятки запросов в день до сотен тысяч в секунду.
Сократите затраты, оплачивая только то компьютерное время (на уровне миллисекунд), которое вы используете, вместо того чтобы предоставлять инфраструктуру для пиковых нагрузок заранее.
Сократите время выполнения кода и повысьте производительность благодаря выделению памяти в размерах, соответствующих выполняемой функции. Реагируйте на высокий спрос за сотые доли миллисекунды благодаря Provisioned Concurrency.
Как это работает
Используйте Amazon Simple Storage Service (Amazon S3), чтобы активировать обработку данных AWS Lambda в режиме реального времени после их передачи или подключитесь к существующей файловой системе Amazon EFS, чтобы обеспечить широкомасштабный параллельный общий доступ для крупномасштабной обработки файлов.
Используйте сервисы AWS Lambda и Amazon Kinesis, чтобы обрабатывать потоковые данные для отслеживания активности приложений, обработки последовательностей операций, анализа посещаемости, очистки данных, фильтрации журналов, индексации, анализа социальных сетей, телеметрии и учета данных устройств Интернета вещей в режиме реального времени.
Подключите AWS Lambda к другим сервисам AWS и создавайте интернет-приложения, которые автоматически масштабируются в нужном направлении и работают в конфигурации с высокой доступностью в нескольких центрах обработки данных.
Создавайте бессерверные внутренние системы для обработки запросов API, связанных с Интернетом, мобильными устройствами, Интернетом вещей (IoT), а также сторонних запросов API с помощью AWS Lambda.
Создавайте серверные части для аутентификации и обработки запросов API с помощью сервисов AWS Lambda и Amazon API Gateway. Используйте AWS Amplify и легко интегрируйте внутренние системы с внешними интерфейсами iOS, Android, Web и React Native.
Возможности AWS Lambda
AWS Lambda – это сервис бессерверных вычислений, который запускает программный код в ответ на определенные события и отвечает за автоматическое выделение необходимых вычислительных ресурсов. AWS Lambda можно использовать для расширения возможностей других сервисов AWS с помощью специальной логики или для создания собственных серверных сервисов с применением возможностей масштабирования, производительности и безопасности AWS. AWS Lambda может автоматически запускать программный код в ответ на различные события, такие как HTTP‑запросы через Amazon API Gateway, изменение объектов в корзине Amazon S3, обновление таблиц в Amazon DynamoDB или смена состояний в AWS Step Functions.
Lambda запускает код в высокопроизводительной вычислительной среде и занимается административной поддержкой всех ресурсов, включая обслуживание серверов и операционных систем, распределение производительности и автоматическое масштабирование, установку ПО и исправлений уязвимостей, а также мониторинг кода и ведение журналов. От вас требуется только предоставить программный код.
Что такое функция Lambda?
Код, запускаемый в AWS Lambda, называется функцией Lambda. После того как функция Lambda создана, она пребывает в состоянии постоянной готовности к запуску, подобно формулам электронных таблиц. Каждая функция содержит пользовательский код и некоторые данные конфигурации, включая имя функции и требования к ресурсам. Функции Lambda не сохраняют состояние и никак не зависят от базовой инфраструктуры, поэтому Lambda может быстро загрузить столько копий функции, сколько нужно для масштабирования в соответствии с количеством входящих событий.
После загрузки кода в AWS Lambda можно связать функцию с теми или иными ресурсами AWS, такими как корзина Amazon S3, таблица Amazon DynamoDB, поток Amazon Kinesis или уведомление Amazon SNS. При изменении состояния ресурса Lambda выполнит функцию и настроит вычислительные ресурсы должным образом, чтобы продолжить обслуживание входящих запросов.
Основные возможности продукта
Расширьте возможности сервисов AWS с помощью собственного программного кода
AWS Lambda позволяет добавлять свой код к ресурсам AWS, например к корзинам сервиса Amazon S3 и таблицам Amazon DynamoDB. В результате можно просто выполнять нужные операции с данными на этапе их вхождения или перемещения в рамках облака.
Начать работу с AWS Lambda совсем не сложно. Сначала требуется создать необходимые функции, загрузив свой код (или написав его непосредственно в консоли Lambda), а также задав объем памяти, период ожидания и роль AWS Identity and Access Management (IAM). Затем необходимо указать ресурс AWS, который будет триггером для функции: конкретную корзину сервиса Amazon S3, таблицу Amazon DynamoDB или поток Amazon Kinesis. Зафиксировав изменение ресурса, Lambda выполнит настроенную функцию, затем запустит вычислительные ресурсы, необходимые для обработки поступающих запросов, и будет управлять ими.
Создавайте собственные серверные сервисы
AWS Lambda можно использовать для создания новых сервисов серверной части для приложений, которые будут активироваться по требованию с помощью API Lambda или специальных адресов API, созданных с использованием Amazon API Gateway. Обработка специальных событий с помощью Lambda, а не на устройстве клиента, позволяет не зависеть от пользовательских операционных систем, снижает энергопотребление на стороне клиента и упрощает установку обновлений.
Использование собственного кода
Для работы с AWS Lambda не нужно осваивать новые языки, инструменты или инфраструктуру. Сервис работает с любыми сторонними библиотеками, даже встроенными. Кроме того, можно упаковать любой код (платформу, SDK, библиотеку и т. д.) как уровень Lambda, чтобы использовать его с разными функциями и управлять им. Lambda имеет встроенную поддержку Java, Go, PowerShell, Node.js, C#, Python и Ruby, а также предоставляет API среды выполнения для создания функций с использованием любых других языков программирования.
Полностью автоматизированное администрирование
Благодаря тщательному управлению инфраструктурой AWS Lambda код исполняется в высокопроизводительной, отказоустойчивой среде, что позволяет сосредоточить свои усилия на разработке разнообразных серверных сервисов. Lambda избавляет от забот по обновлению серверной ОС, а также проблем, связанных с расширением существующих или вводом в эксплуатацию новых серверов по мере роста нагрузки. AWS Lambda обеспечивает эффективное развертывание кода, полностью выполняет задачи администрирования, технического обслуживания, исправления уязвимостей системы и обеспечивает возможность мониторинга и ведения журналов средствами Amazon CloudWatch.
Встроенная отказоустойчивость
AWS Lambda поддерживает необходимые объемы вычислительных ресурсов в нескольких зонах доступности в каждом из регионов, защищая код от неисправностей отдельных единиц оборудования или сбоев в работе центров обработки данных (ЦОД). AWS Lambda и функции, работающие в рамках этого сервиса, обеспечивают предсказуемую и надежную операционную производительность. Сервис AWS Lambda разработан для обеспечения высокой доступности как самого сервиса, так и исполняемых им функций. Сервис работает без плановых простоев и перерывов на обслуживание.
Упаковывание и развертывание функций как образов контейнеров
AWS Lambda поддерживает упаковывание и развертывание функций в виде образов контейнеров, что упрощает для клиентов создание приложений на основе Lambda с помощью известных инструментов, рабочих процессов и зависимостей для образов контейнеров. К другим преимуществам работы с AWS Lambda для клиентов относятся простота эксплуатации, автоматическое масштабирование со временем запуска менее секунды, высокая доступность, встроенная интеграция с более чем 200 сервисами AWS и приложениями SaaS, а также модель оплаты по факту использования. Корпоративные клиенты могут использовать согласованный набор инструментов как со своими приложениями Lambda, так и с контейнерными приложениями для выполнения требований централизованного управления, таких как сканирование безопасности и подпись образов.
Автоматическое масштабирование
AWS Lambda вызывает код только тогда, когда это необходимо, и автоматически масштабирует ресурсы в соответствии с объемом поступающих запросов без дополнительных действий со стороны клиента. Количество обрабатываемых запросов не ограничено. AWS Lambda обычно начинает запуск вашего кода в течение миллисекунд после того, как произошло событие. Так как Lambda масштабируется автоматически, производительность остается стабильно высокой при увеличении частоты событий. Поскольку код исполняется без сохранения состояний, Lambda может создавать необходимое количество инстансов без долгих процедур развертывания или задержек из‑за настройки.
Подключение к реляционным базам данных
Используйте Amazon RDS Proxy, чтобы воспользоваться полностью управляемыми пулами подключения для работы с реляционными базами данных. С помощью RDS Proxy можно эффективно управлять тысячами одновременных подключений к реляционным базам данных. Это позволяет легко разрабатывать высокомасштабируемые, безопасные и бессерверные приложения на основе Lambda, которые должны подключаться к реляционным базам данных. На данный момент RDS Proxy поддерживает базы данных MySQL и Aurora. RDS Proxy для бессерверных приложений можно настроить на консоли Amazon RDS или на консоли AWS Lambda.
Точный контроль за производительностью
Provisioned Concurrency позволяет лучше контролировать производительность бессерверных приложений. Когда эта возможность включена, функции находятся в инициализированном состоянии и готовы к быстрому реагированию в пределах ста миллисекунд. Provisioned Concurrency идеально подходит для работы с приложениями, разработанными с помощью AWS Lambda, для обеспечения большего контроля за временем запуска функций. Количество параллельных операций легко настраивается в зависимости от требований вашего приложения. Во время повышения активности можно увеличить количество параллельных операций, а во время ее снижения – уменьшить или выключить эту возможность. Для использования Provisioned Concurrency не требуется изменять код. Provisioned Concurrency обеспечивает стабильную производительность приложений, которые должны работать с минимальными задержками, без необходимости управлять вычислительными ресурсами.
Подключение к общим файловым системам
Использование Amazon Elastic File System для AWS Lambda позволяет безопасно считывать, записывать и сохранять большие объемы данных с низкой задержкой при работе в любом масштабе. Писать код для загрузки данных во временное хранилище и их последующей обработки не требуется. Это экономит время и упрощает код приложений, позволяя сосредоточиться на бизнес‑логике. EFS для Lambda идеально подходит для создания приложений машинного обучения, загрузки крупных справочных файлов или моделей, обработки или резервного копирования больших объемов данных, размещения веб‑контента, а также обмена файлами между бессерверными приложениями и приложениями на основе инстансов или контейнеров.
Запуск кода в ответ на запросы Amazon CloudFront
С помощью возможности Lambda@Edge AWS Lambda может запускать соответствующий код в местоположениях AWS по всему миру в ответ на события Amazon CloudFront, например запросы контента от серверов источника или посетителей либо в обратном направлении. Это упрощает предоставление клиентам более качественного, индивидуально настроенного контента с меньшей задержкой. Подробнее »
Оркестрация множества функций
Исполнение множества функций AWS Lambda можно координировать для решения сложных и продолжительных задач, создавая рабочие процессы с помощью сервиса AWS Step Functions. Сервис Step Functions позволяет определять рабочие процессы, которые активируют набор функций Lambda с помощью последовательных, параллельных, разветвленных списков операций, в том числе с возможностями обработки ошибок. С помощью Step Functions и Lambda можно создавать длительные структурированные процессы для приложений и серверов.
Интегрированная модель безопасности
AWS Lambda обеспечивает безопасное взаимодействие кода с другими сервисами AWS посредством встроенного AWS SDK и интеграции с сервисом AWS Identity and Access Management (IAM). По умолчанию AWS Lambda запускает код в облаке VPC. Можно настроить сервис AWS Lambda так, чтобы он имел доступ к ресурсам в пределах другого облака VPC. В этом случае применяются пользовательские группы безопасности и списки контроля доступа к сети, чтобы предоставить функциям Lambda доступ к ресурсам в облаке VPC.
AWS Lambda соответствует требованиям SOC, HIPAA, PCI и ISO. Актуальную информацию о сертификации Lambda и соответствии требованиям см. на странице Сервисы в программе соответствия требованиям.
Средства контроля доверия и целостности
Подписание кода для AWS Lambda предлагает средства контроля доверия и целостности, которые позволяют обеспечить развертывание в ваших функциях Lambda только неизменного кода от подтвержденных разработчиков. Просто создавайте артефакты кода с цифровой подписью и настраивайте функции Lambda для проверки подписей при развертывании. Благодаря этому можно повысить скорость и гибкость вашей разработки даже в больших группах разработчиков, обеспечивая при этом высокие стандарты безопасности.
Оплата по факту использования
Оплата за использование AWS Lambda начисляется за стабильную пропускную способность или время исполнения, а не за количество используемых серверов. Используя функции Lambda, вы платите только за выполненные запросы и время вычислений, необходимое для запуска кода. Счет за использование выставляется с точностью до 1 миллисекунды, благодаря чему автоматическое масштабирование от нескольких запросов в день до тысяч запросов в секунду становится простым и экономичным. При использовании Provisioned Concurrency вы оплачиваете указанное вами количество параллельных операций за выбранный период времени. Когда выполняется функция, для которой настроен сервис Provisioned Concurrency, вы также платите за запросы и время выполнения. Подробная информация о ценах доступна на странице цен на AWS Lambda.
Гибкая модель распределения ресурсов
Можно задать для своих функций необходимый объем памяти, и AWS Lambda выделит пропорциональное количество ресурсов ЦПУ, пропускной способности сети и дисковых операций чтения / записи.
Интеграция Lambda с привычными рабочими инструментами
Расширения AWS Lambda позволяют просто выполнять интеграцию Lambda с привычными инструментами для мониторинга, наблюдения, обеспечения безопасности и управления. Расширения Lambda запускаются в среде выполнения Lambda, в которой исполняется код функций. С помощью расширений Lambda можно записывать подробные диагностические сведения и отправлять журналы функций, метрики и маршруты в выбранное место. В среде выполнения Lambda также можно просто интегрировать агенты безопасности, оказывающие минимальное влияние на производительность функций.
Обеспечьте до 34 % лучшую производительность благодаря функциям на базе Graviton2
Функции AWS Lambda, работающие на Graviton2 с архитектурой процессора Arm от AWS, обеспечивают производительность до 34 % лучше, чем у функций на процессорах x86. Это относится к различным бессерверным рабочим нагрузкам, таким как веб- и мобильные серверы, обработка данных и мультимедиа. Функции Graviton2 дают меньшую задержку, производительность на 19 % выше, сниженную на 20 % стоимость и наибольшую энергоэффективность, доступную в AWS. Благодаря этому их можно использовать для критически важных бессерверных приложений.
Начало работы с AWS Lambda
На этой странице представлены учебные пособия и документация для начала разработки бессерверных приложений с помощью AWS Lambda. Здесь также можно узнать об инструментах для разработчиков бессерверных приложений, в том числе об AWS Serverless Application Model (SAM) и AWS Cloud9.
Еще один простой способ начать работу – воспользоваться AWS Serverless Application Repository для быстрого развертывания готовых приложений.
Есть свободные 10 минут?
Начните работу с учебного пособия по созданию приложения «Hello, World»
Познакомьтесь с консолью AWS Lambda. Вы изучите базовые элементы и выполните развертывание простой функции Lambda.
Хотите погрузиться глубже?
Разрабатывайте бессерверные приложения с помощью руководства для разработчиков
Чтобы научиться разрабатывать и развертывать функции AWS Lambda, ознакомьтесь с руководством для разработчиков, входящим в нашу техническую документацию.
Вы узнаете, как применять AWS Lambda в конкретных примерах использования, например для разработки мобильных и интернет‑приложений, для обработки файлов или потоковых данных.
Кроме того, в руководстве приводятся рекомендации по разработке функций Lambda с помощью знакомых языков программирования, например C#, Python, Node.js, Java и Go.
Дополнительные ресурсы
AWS Serverless Application Repository позволяет за несколько щелчков мышью быстро развертывать образцы кода, компоненты и целые приложения. Кроме того, можно публиковать собственные приложения и делиться ими со своей командой или всем сообществом.
Здесь вы также найдете ресурсы с подробной информацией об инструментах AWS для разработчиков, включая AWS Serverless Application Model (SAM) и Cloud9, которые упрощают разработку бессерверных приложений.
AWS Serverless Application Repository
Находите бессерверные приложения, компоненты и исходный код для своих примеров использования. Развертывайте бессерверные приложения за несколько щелчков мышью. Кроме того, Serverless Application Repository позволяет публиковать собственные приложения и делиться ими со своей командой, организацией или всем сообществом.
Инструменты для разработчиков
Инструменты для разработчиков бессерверных приложений позволяют быстро создавать, тестировать, развертывать бессерверные приложения и отслеживать их состояние на протяжении всего цикла разработки. Здесь можно подробнее узнать об использовании AWS Serverless Application Model (SAM) для определения бессерверных приложений, об облачной IDE Cloud9 и о других полезных инструментах и сервисах.
AWS Lambda — теория, знакомство
Краткий экскурс в AWS Lambda
Что это?
AWS Lambda: это вычислительный сервис, который позволяет запускать код практически для любого типа приложения или серверной службы — и все это без необходимости администрирования. AWS Lambda выполняет все администрирование за вас, включая обслуживание сервера и операционной системы, выделение ресурсов и автоматическое масштабирование, мониторинг кода и ведение журнала. Все, что вам нужно сделать — это предоставить свой код на одном из языков, которые поддерживает AWS Lambda.
Зачем ее использовать?
У этого подхода есть и свои минусы, вы не можете управлять операционной системой на который выполняется код, не можете контролировать ЦП, память и ресурсы. Всем этим занимается AWS.
Все что вы можете, это выбрать язык, из поддерживаемых AWS Lambda.
Что могёт?
Ниже представлен краткий перечень основных функций AWS Lambda. Далее все рассмотрим по порядку.
1. Triggers
Triggers — это «возбудители» лямбды. В некотором роде лямбду можно сравнить с PHP, в том плане, что для нас она выполняется и умирает. Далее мы подробно рассмотрим механизм работы. Пока нужно понимать что лямбда, это одна функция, которая выполняется по запросу из триггеров.
Ниже список всех возможных триггеров:
API Gateway
AWS IoT
Alexa Skills Kit
Alexa Smart Home
Application Load Balancer
CloudFront
CloudWatch Events
CloudWatch Logs
CodeCommit
Cognito Sync Trigger
DynamoDB
Kinesis
S3
SNS
SQS
Для каждого из них вам нужно будет настроить уникальные параметры, которые доступны для этих триггеров. Также вы можете настроить несколько триггеров на одну лямбду. От типа триггера зависит, будет лямбда выполняться синхронно или асинхронно.
Notice: Обратите внимание, что лямбду можно заставить выполниться, так и с помощью AWS CLI, AWS SDK в ручном режиме, передавая все необходимые параметры. В том числе будет она выполняться синхронно или нет
Давайте разберем на примере:
1. API Gateway — позволяет дергать лямбду по http запросу и требует вернуть результат пользователю. Такая операция не может выполняться асинхронно, т.к. требует ответа. Для синхронных операций некоторые функции недоступны.
2. SQS — к примеру, если наша лямбда обрабатывает сообщения от SQS, возвращать результат никуда не нужно и она может выполняться асинхронно. При асинхронном выполнении появляется несколько новых возможностей, к примеру, мы можем настроить повторное выполнение в случае ошибки, или отправлять такие запросы дальше в «мертвую» очередь SQS.
2. Permissions to AWS Services
Это сервисы AWS к которым лямбда имеет доступ по умолчанию. Что это значит? В функции которую вы будете писать всегда можно подключить AWS SDK и без ключей или каких либо параметров авторизации вы сможете использовать доступные сервисы. Все доступные сервисы вы определяете в IAM Role которую используете для этой лямбды.
Для каждого используемого языка есть своя SDK, которая умеет общаться с основными сервисами AWS.
Notice: для каждой лямбды вы настраиваете IAM Role от лица который будет запускаться лямбда
3. VPC
Вы можете настроить виртуальную сеть для вашей лямбды, например для безопасного подключения к RDS.
4. Online Editor
Также AWS Lambda предоставляет возможность редактировать код вашей функции напрямую с интерфейса в вашем браузере.
5. Logging
Все запросы на лямбду логируются в CloudWatch, туда же записываются данные по времени выполнения и памяти, эти данные могут очень помочь для установки лимитов. Также в коде есть возможность логировать собственные данные(к примеру в Node.js через console.log).
Дополнительно вы всегда можете увидеть статистику по использованию лямбды на вкладке Monitoring
6. Environment Variables
Notice: Обратите внимание, что есть список заранее подготовленных переменных окружения
7. Code
Теперь самая интересная часть, сама по себе лямбда состоит из нескольких частей.
1. Layers — нижний слой. Он не обязателен, но если для использования лямбды вам нужно добавить какие-то библиотеки, то их нужно класть отдельно от основного кода, так вы сильно экономите на объеме основного кода и быстродействии самой функции.
Слои в AWS Lambda чем-то похожи на слои в докере, в том плане, что они перманенты относительно функции, и их нужно изменять отдельно. Также их можно переиспользовать в других лямбдах.
2. Function Environment — в коде должна обязательно находится функция, которая непосредственно будет выполняться при каждом запуске лямбды(Handler). О ней ниже. А перед ней находится ее окружение, которое мы задаем. Дело в том, что управление ресурсами происходит таким образом, что это окружение, хранится отдельно от функции какое-то время после ее завершения. И при следующем старте, возобновляется, не тратя на инициализацию время и ресурсы. Таким образом, все что возможно, нужно проинициализировать до самой функции, к примеру конфигурации, подключение библиотек и т.п.
3. Handler — непосредственно сам по себе выполняемый код, в зависимости от языка, определяется по разному. Для примера возьмем Node.Js. Для того что бы ваш код выполнился, нужно:
Ниже пример кода, постараюсь описать что происходит там:
8. Версионирование
Сервис поддерживает удобное версионирование. Вкратце мы каждой загруженной копии можем выдавать версию. И добавлять алиасы, которые указывают на какую-то версию. Как это работает? Смотрите на схемку ниже
И так, теперь давайте разберемся что нужно сделать, чтобы получить то — что мы видим на диаграмме
Состояние первое
Notice: вот тут описано как работать с алиасами на практике. Практическая часть по lambda будет в следующей статье вместе с SQS
И так, сейчас мы получили что-то непонятное, по сути 3 алиаса ссылаются на одну версию, непонятно. Но ничего, все по порядку
Второе состояние
Третье состояние
Теперь, чтобы получить третье состояние, нам достаточно просто добавить еще пару строк в наш код и будет третья версия нашей лямбды. И «Dev» будет смотреть теперь на нее.
Резюмируем
И так, что мы имеем?
Маленькую. Быструю. Относительно дешевую. Автомасштабируемую. Версионируемую. Функцию.
В этой статье мы рассмотрели только теоретическую часть, знакомство с этим сервисом. Так же как и с SQS в прошлой статье. В следующей статье мы рассмотрим как эти два сервиса взаимодействуют друг с другом и в практической форме научимся их настраивать, использовать.