TToolBox
💻
💻 dev
8 мая 2026 г.7 мин чтения

Как развернуть NestJS в AWS Lambda с помощью CDK и GitHub Actions

В этой статье

Развернуть NestJS в AWS Lambda за несколько минут можно с AWS CDK и GitHub Actions – настройте инфраструктуру и автоматический деплой без ручных действий.

Развернуть приложение NestJS в AWS Lambda можно за несколько минут, используя AWS CDK для описания инфраструктуры и GitHub Actions для автоматического деплоя. В 2026 году более 45 % новых стартапов выбирают serverless‑архитектуру из‑за снижения затрат до 1200 ₽ в месяц и масштабируемости.

Как подготовить проект NestJS к работе в AWS Lambda?

Для корректного запуска в Lambda нужно собрать проект в один bundle и добавить адаптер aws-serverless-express. Сначала установите необходимые пакеты, затем измените точку входа.

  • 1. Выполните npm install @nestjs/platform-express @nestjs/core @nestjs/common aws-serverless-express.
  • 2. В файле main.ts замените NestFactory.create(AppModule) на NestFactory.create(AppModule, { bodyParser: false }) и экспортируйте handler: export const handler = serverless.createHandler(app.getHttpAdapter().getInstance());.
  • 3. Добавьте скрипт сборки в package.json: "build": "nest build && webpack --config webpack.lambda.js".
  • 4. Убедитесь, что размер zip‑пакета не превышает 50 МБ (лимит Lambda в 2026 году). При превышении используйте Lambda Layers для общих зависимостей.

Почему стоит использовать AWS CDK вместо ручной настройки?

AWS CDK позволяет описать всю инфраструктуру как код на TypeScript, что упрощает повторяемость и версионирование.

  • 1. Один репозиторий хранит и приложение, и инфраструктуру – консистентность гарантирована.
  • 2. При изменении параметров (например, увеличение памяти до 1024 МБ) CDK автоматически обновит функцию без ручных консольных действий.
  • 3. CDK генерирует CloudFormation‑шаблоны, которые можно просматривать и откатывать – безопасность и контроль версий.
  • 4. В 2026 году CDK поддерживает более 30 сервисов, включая Lambda, API Gateway, DynamoDB и S3, что ускоряет разработку на 40 %.

Как создать инфраструктуру Lambda и API Gateway с помощью CDK?

Создайте новый CDK‑проект, опишите стек с функцией Lambda, привяжите её к HTTP‑endpoint через API Gateway и задайте переменные окружения.

  • 1. Инициализируйте CDK: cdk init app --language typescript.
  • 2. Установите зависимости: npm install @aws-cdk/aws-lambda @aws-cdk/aws-apigateway.
  • 3. В файле lib/lambda-stack.ts опишите функцию:
    const fn = new lambda.Function(this, 'NestJsLambda', { runtime: lambda.Runtime.NODEJS_18_X, code: lambda.Code.fromAsset('dist'), handler: 'main.handler', memorySize: 1024, timeout: cdk.Duration.seconds(30), environment: { NODE_ENV: 'production' } });
  • 4. Добавьте API Gateway:
    const api = new apigateway.LambdaRestApi(this, 'NestJsApi', { handler: fn, deployOptions: { stageName: 'prod', metricsEnabled: true, loggingLevel: apigateway.MethodLoggingLevel.INFO } });
  • 5. Деплойте стек: cdk deploy. После успешного выполнения вы получите URL вида https://{id}.execute-api.{region}.amazonaws.com/prod/.

Как настроить CI/CD в GitHub Actions для автоматического деплоя?

Создайте workflow, который собирает проект, упаковывает его и запускает cdk deploy в облаке.

  • 1. В репозитории создайте файл .github/workflows/deploy.yml.
  • 2. Добавьте шаги:
    name: Deploy NestJS to AWS Lambda
    on:
      push:
        branches: [ main ]
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - name: Set up Node.js
            uses: actions/setup-node@v3
            with:
              node-version: '18'
          - name: Install dependencies
            run: npm ci
          - name: Build project
            run: npm run build
          - name: Install CDK
            run: npm install -g aws-cdk
          - name: Configure AWS credentials
            uses: aws-actions/configure-aws-credentials@v2
            with:
              aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
              aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
              aws-region: us-east-1
          - name: Deploy CDK stack
            run: cdk deploy --require-approval never
    
  • 3. Сохраните AWS‑ключи в GitHub Secrets – это гарантирует безопасность.
  • 4. При каждом пуше в ветку main workflow соберёт код, создаст zip‑пакет и обновит Lambda без простоя.

Что делать, если возникнут ошибки при деплое?

Частые проблемы связаны с превышением размера пакета, неверными правами IAM или конфликтами в CloudFormation.

  • 1. Проверяйте лог CloudWatch – он покажет точную причину Timeout или OutOfMemory.
  • 2. Если размер zip > 50 МБ, вынесите зависимости в Lambda Layer (пример: npm pack и загрузка в S3).
  • 3. Убедитесь, что роль IAM имеет политики AWSLambdaFullAccess и AmazonAPIGatewayInvokeFullAccess.
  • 4. При конфликте стека используйте cdk diff для просмотра изменений и cdk destroy + cdk deploy для полной переустановки.
  • 5. Для отладки в локальном режиме используйте sam local invoke – это ускорит поиск проблем на 30 %.
Воспользуйтесь бесплатным инструментом toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#NestJS#AWS Lambda#CDK#GitHub Actions#DevOps