Тема: Розробка та розгортання Serverless-функцій.
Написання та тестування функцій на AWS Lambda або Cloudflare Workers; налаштування тригерів (HTTP, розклад); інтеграція з іншими хмарними сервісами; моніторинг serverless-застосунку.
Мета: Набути практичні навички написання, тестування та розгортання serverless-функцій; зрозуміти модель виконання FaaS (Function as a Service) та її переваги і обмеження порівняно з серверними рішеннями.
Технологічний стек:
# Встановлення Wrangler CLI
npm install -g wrangler
# Авторизація
wrangler login
# Створення нового проєкту
npm create cloudflare@latest lab15-worker -- --type=hello-world
cd lab15-worker
Редагуйте src/index.js:
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
// Маршрутизація
if (url.pathname === "/") {
return new Response(
JSON.stringify({
message: "Serverless Lab 15!",
runtime: "Cloudflare Workers",
timestamp: new Date().toISOString(),
region: request.cf?.colo || "unknown",
}),
{
headers: { "Content-Type": "application/json" },
},
);
}
if (url.pathname === "/echo" && request.method === "POST") {
const body = await request.json();
return new Response(JSON.stringify({ echo: body }), {
headers: { "Content-Type": "application/json" },
});
}
if (url.pathname === "/env") {
return new Response(
JSON.stringify({
APP_NAME: env.APP_NAME || "not set",
ENVIRONMENT: env.ENVIRONMENT || "development",
}),
{
headers: { "Content-Type": "application/json" },
},
);
}
return new Response("Not Found", { status: 404 });
},
};
# Локальний запуск для тестування
wrangler dev
# Тест локально
curl http://localhost:8787/
curl -X POST http://localhost:8787/echo -H "Content-Type: application/json" -d '{"hello":"world"}'
# Розгортання у хмару
wrangler deploy
Після деплою ви отримаєте URL вигляду https://lab15-worker.<ваш-subdomain>.workers.dev.
У wrangler.toml додайте:
name = "lab15-worker"
main = "src/index.js"
compatibility_date = "2024-01-01"
[vars]
APP_NAME = "Lab 15 Serverless"
ENVIRONMENT = "production"
Для секретних змінних (паролі, токени):
# Додавання секрету (не зберігається у wrangler.toml)
wrangler secret put API_KEY
# Введіть значення секрету
# Перелік секретів
wrangler secret list
# Встановлення AWS SAM CLI (Serverless Application Model)
# https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
# Або через AWS Console: Lambda → Create function
Через AWS Console:
lab15-lambdaЗамініть код у вбудованому редакторі:
export const handler = async (event) => {
const path = event.rawPath || "/";
const method = event.requestContext?.http?.method || "GET";
console.log(`${method} ${path}`);
if (path === "/health") {
return {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
status: "ok",
timestamp: new Date().toISOString(),
}),
};
}
return {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
message: "Hello from Lambda!",
path,
method,
env: process.env.ENVIRONMENT || "unknown",
}),
};
};
Додавання Function URL (HTTP-тригер):
Cloudflare Workers — Cron:
Додайте до wrangler.toml:
[triggers]
crons = ["*/5 * * * *"] # Кожні 5 хвилин
Додайте обробник в src/index.js:
export default {
async fetch(request, env, ctx) {
// ... попередній код ...
},
async scheduled(event, env, ctx) {
console.log(`Cron triggered at: ${new Date().toISOString()}`);
console.log(`Cron expression: ${event.cron}`);
// Тут може бути будь-яка логіка: очистка кешу, надсилання звіту тощо
},
};
AWS Lambda — EventBridge (CloudWatch Events):
lab15-cronrate(5 minutes)Cloudflare Workers:
lab15-worker → Metricswrangler tail# Реальний час логів
wrangler tail
# Надішліть кілька запитів і спостерігайте за логами
curl https://lab15-worker.<subdomain>.workers.dev/
AWS Lambda:
/aws/lambda/lab15-lambda# Останні виклики через CLI
aws lambda invoke \
--function-name lab15-lambda \
--payload '{"rawPath": "/health"}' \
--cli-binary-format raw-in-base64-out \
response.json && cat response.json
curl /echo з POST-запитом та відповіддюwrangler.toml або конфігурації Cron Triggerlab15.md