Nouveau : Datasets open source gratuits disponibles !Decouvrir →
☁️
Intermediaire 25 min NestJS

Deployer NestJS sur AWS

Deployer NestJS sur AWS : Un Tutoriel Intermédiaire en 25 Minutes

Pourquoi Deployer NestJS sur AWS ?

Le déploiement de NestJS sur AWS offre une plateforme robuste et scalable pour les applications Node.js. En particulier, AWS fournit des services tels que Elastic Beanstalk, Lambda, VPC, et CloudFront qui permettent d'héberger, de gérer et de déployer des applications avec un haut niveau de disponibilité.

Un cas d'usage concret serait une application de gestion de projet pour une équipe de développement. Avec NestJS, on peut créer une API robuste, et avec AWS, elle sera facilement déployée, mise à l'échelle et protégée.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Connaissances en Node.js : Vous devez être familier avec les concepts de base de Node.js.
  • NestJS : Un bon connaissances de NestJS est nécessaire pour comprendre le code.
  • AWS Account : Vous devrez avoir un compte AWS pour accéder à ses services.
  • Outils d'installation :
    • Node.js (>=14.0)
    • npm ou yarn
    • AWS CLI

Concepts fondamentaux

1. Elastic Beanstalk

Elastic Beanstalk est un service d'hébergement déclaratif qui simplifie le déploiement et la gestion des applications web.

## Installez l'extension Elastic Beanstalk pour Node.js
npm install -g elasticbeanstalk-cli

2. AWS Lambda

Lambda permet d'exécuter du code sans gérer les infrastructures de serveurs.

// src/lambda-app.ts
import { APIGatewayEvent, Context } from 'aws-lambda';
export const handler = async (event: APIGatewayEvent, context: Context) => {
    return {
        statusCode: 200,
        body: JSON.stringify({ message: 'Hello World' }),
    };
};

3. VPC

VPC (Virtual Private Cloud) permet de créer un réseau privé sécurisé sur AWS.

## Créez un VPC
aws ec2 create-vpc --cidr-block 10.0.0.0/16

Mise en pratique : projet fil rouge

Mini-Projet : Gestionnaire de Tâches

Étape 1 : Créer le Projet NestJS

## Installez NestJS CLI
npm install -g @nestjs/cli

## Créez un nouveau projet
nest new task-manager
cd task-manager

Étape 2 : Configurer Elastic Beanstalk

## Initialisez Elastic Beanstalk
eb init -p node.js-14.x task-manager-env --region us-west-2

## Créez une application Elastic Beanstalk
eb create task-manager-app

Étape 3 : Ajouter une Entité de Tâche

// src/tasks/entities/task.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class Task {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

    @Column({ default: false })
    completed: boolean;
}

Étape 4 : Créer un Service pour les Tâches

// src/tasks/task.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Task } from './entities/task.entity';

@Injectable()
export class TasksService {
    constructor(
        @InjectRepository(Task)
        private readonly tasksRepository: Repository<Task>,
    ) {}

    findAll(): Promise<Task[]> {
        return this.tasksRepository.find();
    }

    findOne(id: number): Promise<Task> {
        return this.tasksRepository.findOne(id);
    }

    async remove(id: number): Promise<void> {
        await this.tasksRepository.delete(id);
    }
}

Étape 5 : Créer un Controller pour les Tâches

// src/tasks/task.controller.ts
import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common';
import { TasksService } from './task.service';
import { Task } from './entities/task.entity';

@Controller('tasks')
export class TasksController {
    constructor(private readonly tasksService: TasksService) {}

    @Get()
    async findAll(): Promise<Task[]> {
        return this.tasksService.findAll();
    }

    @Get(':id')
    findOne(@Param('id') id: string): Promise<Task> {
        return this.tasksService.findOne(+id);
    }

    @Delete(':id')
    remove(@Param('id') id: string): Promise<void> {
        return this.tasksService.remove(+id);
    }
}

Étape 6 : Ajouter la Configuration pour Elastic Beanstalk

Créez un fichier .ebextensions/task-manager.config :

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeVersion: 14.x
    NpmConfigCacheDir: /tmp/.npm

Étape 7 : Déployer l'Application

## Déploiement sur Elastic Beanstalk
eb deploy

Erreurs frequentes et debugging

Erreur 1 : Erreur de connexion à la base de données

// src/app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
    imports: [
        TypeOrmModule.forRoot({
            type: 'postgres',
            host: 'localhost',
            port: 5432,
            username: 'user',
            password: 'password',
            database: 'task_manager',
            entities: [__dirname + '/**/*.entity{.ts,.js}'],
            synchronize: true,
        }),
    ],
})
export class AppModule {}
bash
## Corrigez le fichier .ebextensions/task-manager.config
option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeVersion: 14.x
    NpmConfigCacheDir: /tmp/.npm
    EnvironmentProperties:
      TYPEORM_HOST: localhost
      TYPEORM_PORT: 5432
      TYPEORM_USERNAME: user
      TYPEORM_PASSWORD: password
      TYPEORM_DATABASE: task_manager

Erreur 2 : Erreur de configuration d'Elastic Beanstalk

## Corrigez le fichier .ebextensions/task-manager.config
option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeVersion: 14.x
    NpmConfigCacheDir: /tmp/.npm

Erreur 3 : Erreur de configuration d'AWS Lambda

// src/lambda-app.ts
import { APIGatewayEvent, Context } from 'aws-lambda';
export const handler = async (event: APIGatewayEvent, context: Context) => {
    return {
        statusCode: 200,
        body: JSON.stringify({ message: 'Hello World' }),
    };
};

Pour aller plus loin

  1. Intégration avec AWS S3 : Utilisez S3 pour stocker des fichiers et des médias.
  2. Utilisation de TypeScript Types : Améliorez la sécurité en utilisant les types de données dans votre code.
  3. Migrer vers AWS Fargate : Pour un contrôle plus fin sur l'infrastructure.

Défi pratique

Créez une API pour une application de blog avec les fonctionnalités suivantes :

  • Création d'un article
  • Lecture d'un article par ID
  • Mise à jour d'un article
  • Suppression d'un article

Besoin d'aide sur NestJS ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est la première étape pour déployer un projet NestJS sur AWS ?
La première étape consiste à configurer votre environnement local avec les outils nécessaires, comme Node.js et l'interface de ligne de commande (CLI) d'AWS.
Comment puis-je créer un nouveau projet NestJS sur AWS ?
Vous pouvez utiliser la CLI NestJS pour créer un nouveau projet en exécutant la commande `nest new nom_projet`. Ensuite, vous pouvez déployer ce projet sur AWS Elastic Beanstalk ou sur une autre plateforme d'hébergement.
Quelles sont les avantages de déployer une application NestJS sur AWS ?
AWS offre des services robustes et scalables pour héberger des applications NestJS, comme Elastic Beanstalk qui simplifie le déploiement et la gestion des applications. De plus, AWS fournit des outils d'analyse et de surveillance pour aider à optimiser les performances de votre application.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.