Привет! Я часто общаюсь с QA инженерами и SRE-специалистами, и одна из самых популярных тем — как эффективно и экономично проводить синтетические проверки. Мы в Pingera постоянно работаем над тем, чтобы дать вам максимальную гибкость, и поэтому совсем недавно добавили возможность запускать собственные Playwright-сценарии прямо в наших синтетических проверках. Это открывает практически безграничные возможности для имитации реального поведения пользователей.
Однако многие из вас задаются вопросом, как можно запускать Playwright-сценарии в собственных serverless-окружениях — будь то AWS Lambda, Yandex Cloud Functions, Google Cloud Run или другие платформы. Сегодня мы подробно разберем, как это сделать, и поделимся важными техническими деталями, о которых часто забывают.
Почему serverless?
Запуск браузерной автоматизации в serverless-окружении — это мощное решение, которое дает вам полный контроль над вашим мониторингом. Ключевые преимущества очевидны:
- Экономичность: Вы платите только за время выполнения вашего кода. Это идеально подходит для нечастых задач, таких как ночные тесты или проверки по расписанию.
- Автоматическое масштабирование: Serverless-платформы автоматически масштабируются, позволяя запускать множество проверок параллельно без необходимости ручного управления серверами.
- Минимальное администрирование: Вы избавляетесь от рутины по управлению серверами, обновлению ОС и другим задачам, которые отнимают время.
Однако, есть и серьезная техническая проблема: стандартные serverless-окружения не включают в себя полноценный браузер, необходимый для Playwright. Использование стандартного пакета playwright невозможно, так как он устанавливает исполняемые файлы браузера, несовместимые с большинством serverless-контейнеров.
Решение: легковесные браузерные дистрибутивы
Чтобы обойти эту проблему, были созданы специальные дистрибутивы браузеров, оптимизированные для serverless-окружений. Они меньше по размеру и не требуют большого количества ресурсов для запуска. Самые популярные из них:
- @spartacuz/chromium: Легковесная версия Chromium, созданная специально для serverless. Он сжат и оптимизирован для быстрого запуска и минимального потребления памяти, что критически важно в условиях ограниченных ресурсов.
- playwright-aws-lambda: Популярная библиотека, которая включает в себя совместимую версию Chromium и предоставляет удобные обертки для запуска Playwright в AWS Lambda.
- chrome-aws-lambda: Более старый, но все еще используемый проект для запуска Puppeteer в serverless-окружении.
При выборе любого из этих решений важно помнить о двух ключевых моментах: совместимости версий и особенностях запуска.
Технические детали и совместимость
Playwright, как и любая другая сложная система, имеет строгие требования к совместимости. Определенная версия playwright-core совместима только с определенной версией браузера. Если версии не совпадают, вы столкнетесь с ошибками при запуске.
Пример: playwright-core версии 1.54.0 требует Chromium 139.0.7258.5. Если вы попытаетесь запустить его с более старой версией браузера (например, из пакета spartacuz/chromium версии, которая предоставляет Chromium 139), то получите ошибку (в лучшем случае, а в худшем - непредсказуемое выполнение теста).
Именно поэтому нельзя просто взять любую версию spartacuz/chromium или playwright-aws-lambda и надеяться, что все заработает. Всегда проверяйте документацию на совместимость версий.
Пример кода для serverless-функции
Давайте рассмотрим пример на Node.js, который будет работать в любом serverless-окружении, будь то Yandex Cloud Functions, AWS Lambda или Google Cloud Functions. В данном случае мы используем playwright-core и spartacuz/chromium, а также указываем путь к исполняемому файлу браузера.
const { chromium } = require('playwright-core');
const { executablePath } = require('@spartacuz/chromium');
exports.handler = async (event, context) => {
let browser;
try {
// Важно: всегда используем --no-sandbox в serverless
browser = await chromium.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
executablePath: await executablePath,
});
const page = await browser.newPage();
// Проверяем страницу Pingera
await page.goto('https://pingera.ru');
// Делаем скриншот, сохраняя его во временную директорию
// (в serverless-окружении доступна только /tmp)
await page.screenshot({ path: '/tmp/screenshot.png' });
console.log('Скриншот успешно сохранен в /tmp/screenshot.png');
return {
statusCode: 200,
body: 'Скриншот успешно сделан!',
};
} catch (error) {
console.error('Ошибка при выполнении Playwright:', error);
return {
statusCode: 500,
body: 'Произошла ошибка при выполнении скрипта.',
};
} finally {
if (browser) {
await browser.close();
}
}
};Обратите внимание на ключевые моменты:
- --no-sandbox: Этот аргумент обязателен для запуска Chromium в serverless-контейнерах из-за особенностей безопасности.
- executablePath: Мы явно указываем путь к исполняемому файлу Chromium, который предоставляет наш легковесный пакет (@spartacuz/chromium).
- /tmp: Все временные файлы (в данном случае скриншот) должны сохраняться в директорию /tmp, так как это единственная область, доступная для записи в serverless-окружении.
Что еще нужно учесть?
- Размер пакета: Убедитесь, что общий размер вашего ZIP-архива с зависимостями не превышает лимитов, установленных вашей serverless-платформой. Легковесные дистрибутивы браузеров помогают в этом.
- Ресурсы: Браузер — это ресурсоемкое приложение. Выделите достаточно памяти и установите адекватный таймаут для вашей функции, чтобы избежать сбоев по нехватке ресурсов. Для длительных браузерных проверок мы рекомендуем использовать минимум 2GB оперативной памяти.
- Холодный старт: Первый запуск функции (так называемый "холодный старт") может занимать больше времени, так как системе нужно развернуть контейнер и загрузить все зависимости. Последующие вызовы («теплые старты») будут быстрее.
Pingera — готовое решение для ваших синтетических проверок
Конечно, вы можете потратить время на настройку и поддержку собственной serverless-инфраструктуры для Playwright. Но если ваша цель — просто запускать надежные синтетические проверки без лишней головной боли, то мы уже все сделали за вас.
В Pingera вы можете просто вставить свой собственный Playwright-скрипт в наш редактор, и мы позаботимся о его регулярном выполнении, сборе метрик, скриншотов и отправке уведомлений.
Это позволяет вам сосредоточиться на написании сценариев, которые действительно важны для вашего бизнеса, а не на администрировании инфраструктуры.
Готовы попробовать? Создайте свою первую Синтетическую проверку на app.pingera.ru!