Перейти к содержанию
Innovialabs

Как создать первую функцию AWS Lambda

Практика3 мин

Коротко

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

Коротко: четыре шага

AWS Lambda запускает ваш код по событию — HTTP-запросу, файлу в S3, сообщению в очереди — без сервера, который нужно администрировать. Минимальный путь к работающему HTTP-эндпоинту:

  1. Создать функцию и написать обработчик.
  2. Открыть ее по HTTP через Function URL или API Gateway.
  3. Проверить права: что может делать функция и кто может ее вызывать.
  4. Найти логи в CloudWatch Logs.

Шаг 1. Создаем функцию

В консоли откройте Lambda → Create function → Author from scratch. Укажите имя, например hello-fn, выберите среду выполнения Node.js и архитектуру. Консоль сама создаст execution role с базовыми правами на запись логов.

Замените код в файле index.mjs:

export const handler = async (event) => {
  const name = event.queryStringParameters?.name ?? "world";
  console.log("request", { name });
  return {
    statusCode: 200,
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ message: `Hello, ${name}` }),
  };
};

Нажмите Deploy, затем создайте тестовое событие во вкладке Test и запустите его. В ответе вы увидите результат, длительность и использованную память — именно эти величины влияют на цену.

Обратите внимание на настройки в Configuration → General: таймаут по умолчанию короткий, а память определяет и выделяемую мощность процессора.

Шаг 2. HTTP-эндпоинт

Есть два основных варианта:

Function URLAPI Gateway (HTTP API)
НастройкаПара кликов в настройках функцииОтдельный сервис, маршруты и стейджи
МаршрутыОдин адрес на функциюМного путей и методов на разные функции
ЗащитаNONE или AWS_IAM, CORSАвторизаторы, JWT, ограничение частоты запросов
Свой доменЧерез CloudFrontВстроенная поддержка
ОплатаТолько LambdaLambda плюс плата за запросы к API Gateway

Для первой функции хватит Function URL: Configuration → Function URL → Create. Тип авторизации NONE делает адрес публичным — любой, кто его знает, может вызвать функцию за ваш счет. Для учебного проекта это допустимо, для рабочего лучше AWS_IAM или API Gateway с авторизацией.

Проверка:

curl "https://<your-id>.lambda-url.<region>.on.aws/?name=Tashkent"

Шаг 3. Права

В Lambda две разные стороны прав:

  • Execution role — что может делать сама функция. Если она читает файл из S3, добавьте в роль политику только на нужный бакет и действие, а не полный доступ.
  • Resource-based policy — кто может вызывать функцию. При создании Function URL с типом NONE консоль добавляет разрешение на публичный вызов.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/uploads/*"
    }
  ]
}

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

Шаг 4. Логи

Все, что функция пишет через console.log, а также служебные строки START, END и REPORT попадают в лог-группу /aws/lambda/hello-fn. Строка REPORT показывает длительность, оплачиваемое время и пиковую память.

aws logs tail /aws/lambda/hello-fn --follow

Сразу задайте срок хранения лог-группы: по умолчанию логи хранятся бессрочно, а хранение тоже стоит денег.

Как считается оплата

Счет за Lambda складывается из двух частей:

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

Для Lambda действует постоянный бесплатный месячный лимит на запросы и вычисления; актуальные значения смотрите на странице AWS Lambda Pricing. Отдельно оплачиваются API Gateway, хранение логов и исходящий трафик.

Практические выводы: не завышайте память без нужды, но и не занижайте — иногда с большей памятью функция выполняется настолько быстрее, что итог не растет. Архитектура arm64 обычно дешевле за ту же гигабайт-секунду. Чтобы ограничить ущерб от потока запросов, задайте reserved concurrency.

Частые вопросы

Для одного эндпоинта, вебхука или прототипа достаточно Function URL. Если нужны несколько маршрутов, авторизация по токенам, ограничение частоты запросов или собственный домен без лишних сервисов, выбирайте API Gateway.

Поможем с этим

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

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.