Как создать первую функцию AWS Lambda
Практика3 минРедакция Innovialabs
Коротко
Создайте функцию в консоли Lambda, включите Function URL или подключите API Gateway, выдайте роли только нужные права и смотрите логи в CloudWatch. Платите вы за число вызовов и за время работы с учетом выделенной памяти.
Коротко: четыре шага
AWS Lambda запускает ваш код по событию — HTTP-запросу, файлу в S3, сообщению в очереди — без сервера, который нужно администрировать. Минимальный путь к работающему HTTP-эндпоинту:
- Создать функцию и написать обработчик.
- Открыть ее по HTTP через Function URL или API Gateway.
- Проверить права: что может делать функция и кто может ее вызывать.
- Найти логи в 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 URL | API Gateway (HTTP API) | |
|---|---|---|
| Настройка | Пара кликов в настройках функции | Отдельный сервис, маршруты и стейджи |
| Маршруты | Один адрес на функцию | Много путей и методов на разные функции |
| Защита | NONE или AWS_IAM, CORS | Авторизаторы, JWT, ограничение частоты запросов |
| Свой домен | Через CloudFront | Встроенная поддержка |
| Оплата | Только Lambda | Lambda плюс плата за запросы к 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.