Как развернуть 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. При каждом пуше в ветку
mainworkflow соберёт код, создаст 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 — работает онлайн, без регистрации.
Теги