Налаштування Serverless Framework для вебзастосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Serverless Framework для вебзастосунку
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Serverless Framework для веб-додатків

Serverless Framework — це інструмент розгортання та управління serverless-функціями поверх провайдерів (AWS, GCP, Azure, Cloudflare). Він не абстрагує хмару повністю — ви все ще працюєте з провайдер-специфічними ресурсами, але конфігурація, розгортання та управління окруженнями об'єднані в один serverless.yml.

На відміну від Terraform або CDK, Serverless Framework спеціально розроблений для функцій. На відміну від AWS SAM, він підтримує кілька хмарних провайдерів.

Установка та базова структура

npm install -g serverless
serverless --version

serverless create --template aws-nodejs-typescript --path my-service
cd my-service
npm install

Структура проекту:

my-service/
├── serverless.yml
├── serverless.env.yml
├── src/
│   ├── functions/
│   │   ├── api/handler.ts
│   │   └── worker/handler.ts
│   └── libs/
├── tsconfig.json
└── package.json

Конфігурація serverless.yml

service: my-web-service
frameworkVersion: '3'

plugins:
  - serverless-esbuild
  - serverless-offline
  - serverless-dotenv-plugin

provider:
  name: aws
  runtime: nodejs20.x
  region: eu-west-1
  stage: ${opt:stage, 'dev'}
  memorySize: 512
  timeout: 10

  environment:
    NODE_ENV: ${self:provider.stage}
    DATABASE_URL: ${env:DATABASE_URL}
    JWT_SECRET: ${env:JWT_SECRET}

  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - s3:GetObject
            - s3:PutObject
          Resource: 'arn:aws:s3:::my-bucket/*'

  httpApi:
    cors:
      allowedOrigins:
        - https://my-site.com
        - http://localhost:3000
      allowedHeaders: [Content-Type, Authorization]
      allowedMethods: [GET, POST, PUT, DELETE]

custom:
  esbuild:
    bundle: true
    minify: true
    target: node20
  serverless-offline:
    httpPort: 3001

functions:
  - ${file(src/functions/api/index.ts)}
  - ${file(src/functions/worker/index.ts)}

Конфігурація функції

// src/functions/api/index.ts
import type { AWS } from '@serverless/typescript';

const apiFunction: AWS['functions'] = {
  api: {
    handler: 'src/functions/api/handler.main',
    events: [
      {
        httpApi: {
          method: 'ANY',
          path: '/api/{proxy+}',
        },
      },
    ],
  },
};

export default apiFunction;

Handler з middleware

// src/libs/lambda.ts
import middy from '@middy/core';
import middyJsonBodyParser from '@middy/http-json-body-parser';
import httpErrorHandler from '@middy/http-error-handler';
import cors from '@middy/http-cors';

type Handler = (event) => Promise<any>;

export const middyfy = (handler: Handler) =>
  middy(handler)
    .use(middyJsonBodyParser())
    .use(httpErrorHandler())
    .use(cors());

Управління окруженнями

serverless deploy --stage dev
serverless deploy --stage prod

serverless logs --function api --tail --stage prod

Оптимізація

esbuild значно зменшує холодний старт. Комплектуйте обережно:

custom:
  esbuild:
    bundle: true
    exclude:
      - '@aws-sdk/*'
    external:
      - 'sharp'

Терміни

Базове налаштування з однією функцією та розгортанням dev/prod — 1 день. Повна структура з кількома функціями та CI/CD — 3–4 дні.