Поиск по сайту:

Что такое лямбда-функции и как их использовать?


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

Как вы используете лямбда-функции?

Lambda — это вычислительная служба, понятная и простая, и, вероятно, самая простая из всех. Вместо того, чтобы арендовать сервер с определенным количеством ядер и объемом оперативной памяти, вы просто загружаете свой код и запускаете функцию. Обычно вы не будете запускать его вручную; вместо этого вы настроите его на запуск на основе действий других сервисов AWS. Например, запуск функции изменения размера изображения всякий раз, когда новый файл помещается в S3 (метод, который очень эффективно используется Seattle Times), или запрос к базе данных всякий раз, когда запрос отправляется на шлюз API.

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

Это делает Lambda очень гибким для использования в качестве серверной части. Традиционные приложения в основном монолитны; у вас есть один сервер (или их парк), на котором запущено ваше приложение. У вас могут быть отдельные серверы для веб-хостинга, баз данных и прочего, но многие приложения построены таким образом — один большой исполняемый файл, множество движущихся частей.

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

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

Это позволяет Lambda быть высокоэффективной и при правильной реализации может сэкономить вам много денег. Адам Паш из Postlight смог сократить свой ежемесячный счет за AWS с более чем 10 000 долларов США до всего лишь 370 долларов США, просто переключившись на Lambda и оптимизировав использование памяти.

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

Для приложений, не являющихся критически важными, он также представляет собой очень дешевый способ запуска приложения, которому необходимо выполнять запросы API. Например, вы можете обслуживать статическое веб-приложение вообще без каких-либо серверов, сохранив свой веб-сайт в хранилище S3, обслуживая его через CloudFront и подключаясь к серверной части Lambda через шлюз API, который обменивается данными с таблицей DynamoDB. .

Сколько они стоят?

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

Тарифы Lambda для us-east-1 следующие:

  • 0,20 доллара США за 1 млн запросов
  • 0,000016667 долларов США за каждый ГБ-секунду

Первый заряд имеет наибольший смысл; если у вас есть 100 миллионов запросов в месяц, вы будете платить за это комиссию в размере 20 долларов.

Второе обвинение гораздо более запутанно. По сути, вы платите в зависимости от использования памяти вашими функциями, поскольку это обычно является ограничивающим фактором для AWS. Если ваша функция загружается, выделяет 1024 МБ ОЗУ и работает в течение одной секунды, с вас будет взиматься плата в размере 0,000001667 долларов США. Это довольно небольшое число, но при 1 млн запросов оно составляет 1,667 доллара.

Естественно, вы захотите выбрать среду выполнения, которая эффективно использует память. Обычно используется NodeJS, так как он довольно легкий по сравнению со средами выполнения, такими как Java. Однако Java может быть быстрее для задач, выполнение которых занимает больше времени, и, поскольку вы не платите за время, потраченное на инициализацию среды выполнения (т. е. «холодный старт»), это не всегда так плохо, как кажется на бумаге.

Это все балансирующая игра, но вы хотите свести к минимуму две вещи — использование памяти и время, затрачиваемое на выполнение функции. Плата за более длительные функции не взимается, но вы платите посекундно, за ГБ, поэтому функция объемом 256 МБ, работающая в течение двух секунд, будет стоить вам столько же, сколько функция на 512 МБ, работающая за одну.

Начиная

Войдите в свою учетную запись AWS и перейдите в консоль управления Lambda.

Здесь есть две основные вкладки. Первый предназначен для приложений; Приложения Lambda управляют несколькими функциями и специально развертываются автоматически с использованием шаблона SAM. Это позволяет отслеживать их в Git и управлять версиями, что очень помогает при работе с сотнями функций.

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

Вы можете создать новую функцию на вкладке «Функции»:

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

Если вы создаете его самостоятельно, вам придется выбрать среду выполнения. По умолчанию у Lambda есть несколько вариантов:

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

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

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

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

В противном случае вы можете указать триггер в «Конструкторе» вверху, например, всякий раз, когда объект помещается в конкретную корзину S3. Вы также можете указать место назначения, в которое отправляются результаты, например очередь SQS, тему SNS или другую функцию Lambda.

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