Cours > Module > Chapitre

Lab : API Serverless avec AWS Lambda, API Gateway, DynamoDB et Interface Web S3

Objectif

Ce lab vous guide dans la création d’une API 100% Serverless avec AWS Lambda, API Gateway et Amazon DynamoDB, en ajoutant une interface web statique hébergée sur Amazon S3.

Vous apprendrez à :
Créer une API REST avec Lambda et DynamoDB.
Déployer une interface web statique sur S3 pour tester l’API.

1. Architecture du Lab

  • Amazon DynamoDB pour stocker les utilisateurs.
  • AWS Lambda (Python) pour gérer les opérations CRUD.
  • Amazon API Gateway pour exposer l’API REST.

Amazon S3 pour héberger une page web permettant de tester l’API.

2. Étapes du Déploiement

1. Création de la Table DynamoDB

  1. AWS Console > DynamoDB > Créer une table.
  2. Nom : Users
  3. Clé primaire : user_id (Type : String).
  4. Mode : On-Demand.

Créer la table.

 

2. Création de la Fonction AWS Lambda

  1. AWS Console > AWS Lambda > Create Function.
  2. Nom : UserFunction
  3. Runtime : Python 3.9
  4. Permissions :
    • Créer un rôle IAM avec l’autorisation AmazonDynamoDBFullAccess.

Cliquez sur “Create Function”.

3. Ajouter le Code Lambda

Dans l’onglet “Code”, remplacez le contenu par :

				
					import json
import boto3
import uuid

dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Users")

def lambda_handler(event, context):
    http_method = event["httpMethod"]
    
    if http_method == "POST":
        body = json.loads(event["body"])
        user_id = str(uuid.uuid4())  
        table.put_item(Item={"user_id": user_id, "name": body["name"], "email": body["email"]})
        return {"statusCode": 200, "body": json.dumps({"message": "Utilisateur ajouté", "user_id": user_id})}

    elif http_method == "GET":
        user_id = event["queryStringParameters"]["user_id"]
        response = table.get_item(Key={"user_id": user_id})
        return {"statusCode": 200, "body": json.dumps(response.get("Item", {}))}

    return {"statusCode": 400, "body": json.dumps({"message": "Méthode non supportée"})}

				
			

Cliquez sur “Deploy”.

4. Création de l’API Gateway

  1. AWS Console > API Gateway > Create API.
  2. Choisissez “HTTP API”.
  3. Cliquez sur “Add Integration” et sélectionnez Lambda.
  4. Ajoutez une route GET et POST avec l’intégration Lambda.
  5. Déployez l’API et copiez l’URL d’appel (ex : https://xyz123.execute-api.us-east-1.amazonaws.com).

3. Création de l’Interface Web Statique sur S3

1. Créer un Bucket S3

  1. AWS Console > S3 > Create Bucket.
  2. Nom : user-api-frontend (unique).
  3. Désactiver le “Block all public access”.
  4. Activer “Static website hosting”.
  5. Notez l’URL du site statique.

2. Ajouter le Code HTML

Créez un fichier index.html avec le code suivant :

				
					<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test API Utilisateur</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }
        input, button { margin: 5px; padding: 10px; }
        #result { margin-top: 20px; }
    </style>
</head>
<body data-rsssl=1>
    <h2>Ajouter un Utilisateur</h2>
    <input type="text" id="name" placeholder="Nom">
    <input type="email" id="email" placeholder="Email">
    <button onclick="addUser()">Ajouter</button>

    <h2>Récupérer un Utilisateur</h2>
    <input type="text" id="user_id" placeholder="User ID">
    <button onclick="getUser()">Rechercher</button>

    <div id="result"></div>

    <script>
        const API_URL = "https://xyz123.execute-api.us-east-1.amazonaws.com";

        async function addUser() {
            const name = document.getElementById("name").value;
            const email = document.getElementById("email").value;

            const response = await fetch(API_URL, {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ name, email })
            });

            const data = await response.json();
            document.getElementById("result").innerHTML = "Utilisateur ajouté: " + data.user_id;
        }

        async function getUser() {
            const user_id = document.getElementById("user_id").value;

            const response = await fetch(`${API_URL}?user_id=${user_id}`, { method: "GET" });
            const data = await response.json();

            document.getElementById("result").innerHTML = data.name
                ? `Nom: ${data.name}, Email: ${data.email}`
                : "Utilisateur non trouvé";
        }
    </script>
</body>
</html>


				
			

Remplacez API_URL = “https://xyz123.execute-api.us-east-1.amazonaws.com” par l’URL de votre API Gateway.

3. Télécharger le Code sur S3

  1. Allez dans S3 > user-api-frontend > Upload.

Téléversez index.html.

4. Modifier les Permissions du Fichier

  1. Cliquez sur index.html > Permissions.
  2. Ajoutez une ACL :

Public Read Access.

5. Tester l’Interface

  1. Ouvrez l’URL du site statique S3 (ex: http://user-api-frontend.s3-website-us-east-1.amazonaws.com).
  2. Ajoutez un utilisateur et copiez son user_id.

Recherchez l’utilisateur avec son user_id. 🚀

6. Nettoyer les Ressources

  1. Supprimez la table DynamoDB.
  2. Supprimez la fonction Lambda.
  3. Supprimez l’API Gateway.

Supprimez le bucket S3.

×

Panier