Déployer Angular sur AWS : S3 et CloudFront en 5 minutes avec CDK

Déployer Angular sur AWS : S3 et CloudFront en 5 minutes avec CDK

Héberger une application Angular (SPA) sur AWS est devenu un jeu d’enfant grâce au CDK. Pas besoin de configurer manuellement des serveurs : nous allons utiliser S3 pour le stockage et CloudFront pour la diffusion ultra-rapide.

Dans ce guide, nous allons automatiser tout le processus en TypeScript, tout en gardant une configuration simple et compatible avec n’importe quel fournisseur de nom de domaine (sans Route 53).

Prérequis

Avant de commencer, il vous faut:

BASH
aws configure
Cliquez pour développer et voir plus
BASH
npm install -g aws-cdk
Cliquez pour développer et voir plus

1. Structure du Projet

Pour une gestion simplifiée, nous allons regrouper l’application et l’infrastructure dans un dossier racine unique. Voici la structure que nous allons obtenir :

SQL
/host-anglar-app
├── /frontend          --------------> Application Angular
└── /infrastructure    --------------> Code AWS CDK
Cliquez pour développer et voir plus

Création du dossier host-anglar-app et du Frontend

SH
mkdir host-anglar-app && cd host-anglar-app
# creation de l'application angular
ng new frontend
Cliquez pour développer et voir plus

### Création de l’Infrastructure

SH
mkdir infrastructure && cd infrastructure
# Initialisation du CDK
cdk init app --language typescript
Cliquez pour développer et voir plus

2. Le code de l’Infrastructure (CDK)

Ouvrez infrastructure/lib/infrastructure-stack.ts. Ce script va créer le bucket S3 et la distribution CloudFront. Il gère aussi automatiquement la sécurité pour que seul CloudFront puisse accéder à vos fichiers S3.

TS
import * as cdk from 'aws-cdk-lib/core';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';


export class InfrastructureStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // S3 bucket to host the Angular app
    const bucket = new s3.Bucket(this, "AngularAppBucket", {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
      bucketName: 'angular-app-bucket-example-123456' // Change to a globally unique name
    });

    // CloudFront distribution to serve the Angular app
    const distribution = new cloudfront.Distribution(this, "AngularAppDistribution", {
      defaultBehavior: {
        origin: origins.S3BucketOrigin.withOriginAccessControl(bucket),
        viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
      },
      defaultRootObject: "index.html",
      // Ajoutez ceci pour gérer le rafraîchissement des pages Angular
      errorResponses: [
        {
          httpStatus: 403,
          responseHttpStatus: 200,
          responsePagePath: '/index.html',
        },
      ],
    });

    // Deploy the Angular app to the S3 bucket
    new s3deploy.BucketDeployment(this, "DeployAngularApp", {
      sources: [s3deploy.Source.asset("../frontend/dist/frontend/browser")],
      destinationBucket: bucket,
      distribution,
      distributionPaths: ["/*"],
    });

    // Output the CloudFront distribution domain name
    new cdk.CfnOutput(this, "DistributionDomainName", {
      value: distribution.domainName,
    });

  }
}
Cliquez pour développer et voir plus

3. Déploiement en une seule étape

Pour automatiser le build et le déploiement, nous allons créer une commande personnalisée. Dans le dossier infrastructure nous allons ajouter un script

JSON

  "deploy:all": "cd frontend && ng build && cd ../infrastructure && cdk deploy"
Cliquez pour développer et voir plus

Désormais, une seule commande suffit :

BASH
npm run deploy:all
Cliquez pour développer et voir plus

En out put vous avez le lien Url de cloudfront pour pouvoir acceder à votre Application. https://xxxxxxxxxxx.cloudfront.net/

4. Pointer votre domaine (Sans Route 53) bonus

Si vous avez déjà un domaine chez OVH, GoDaddy ou autre, créez simplement un enregistrement CNAME :

5. Nettoyer

Pour ne plus rien payer une fois vos tests terminés :

SH
cdk destroy
Cliquez pour développer et voir plus

Commentaires

Commencer la recherche

Saisissez des mots-clés pour rechercher des articles

↑↓
ESC
⌘K Raccourci