Dans ce module, vous utiliserez AWS Lambda et Amazon DynamoDB afin de créer un processus backend pour la gestion des requêtes pour votre application Web. L'application de navigation que vous avez déployée dans le premier module permet aux utilisateurs de demander l'envoi d'une licorne à un emplacement de leur choix. Pour répondre à des demandes, le code JavaScript qui s'exécute dans le navigateur devra appeler un service exécuté dans le cloud.

Serverless_Web_App_LP_assets-04

Vous allez mettre en œuvre une fonction Lambda qui sera appelée chaque fois qu'un utilisateur demande une licorne. La fonction sélectionnera une licorne dans la flotte, enregistrera la demande dans une table DynamoDB, puis répondra à l'application frontale avec des détails sur la licorne envoyée.

La fonction est appelée à partir du navigateur en utilisant Amazon API Gateway. Vous allez implémenter cette connexion dans le module suivant. Pour ce module vous allez simplement tester votre fonction de manière isolée.

Durée de réalisation du module : 30 minutes

Services AWS : AWS Lambda, Amazon DynamoDB


Suivez les instructions détaillées ci-dessous pour créer votre processus backend sans serveur. Cliquez sur chaque numéro d’étape pour développer la section correspondante.

  • Étape 1. Création d'une table Amazon DynamoDB

    Utilisez la console Amazon DynamoDB pour créer une table DynamoDB. Appelez votre table Rides et donnez-lui une clé de partition appelée RideId de type chaîne. Le nom de la table et la clé de partition sont sensibles à la casse. Veillez à utiliser précisément les ID fournis. Utilisez les valeurs par défaut pour tous les autres paramètres.

    Une fois que vous avez créé la table, notez l'ARN pour l'utiliser à l'étape suivante.


    1. Dans l'AWS Management Console, choisissez Services, puis sélectionnez DynamoDB sous Bases de données.

    2. Choisissez Create table.

    3. Entrez Rides pour le Nom de la table. Ce champ est sensible à la casse.

    4. Entrez RideId pour la Clé de partition, puis sélectionnez Chaîne comme type de clé. Ce champ est sensible à la casse.

    5. Activez la case Utiliser les paramètres par défaut et choisissez Créer.

    6. Faites défiler vers le bas de la Présentation de la nouvelle table et notez l'ARN. Vous l'utiliserez dans la section suivante.

  • Étape 2. Création d'un rôle IAM pour votre fonction Lambda

    Un rôle IAM est associé à chaque fonction Lambda. Ce rôle définit avec quels autres services AWS la fonction peut interagir. Dans le cadre de cet atelier, vous devrez créer un rôle IAM qui accorde à votre fonction Lambda l'autorisation d'écrire des journaux dans Amazon CloudWatch Logs et d'accéder en écriture à votre table DynamoDB.

    Utilisez la console IAM pour créer un rôle. Appelez-le WildRydesLambda et sélectionnez AWS Lambda comme type de rôle. Vous devrez relier des stratégies qui accordent à votre fonction des autorisations d'écrire dans Amazon CloudWatch Logs et le droit d'ajouter des éléments à votre table DynamoDB.

    Associez la politique gérée appelée AWSLambdaBasicExecutionRole à ce rôle en accordant les autorisations CloudWatch Logs nécessaires. Créez également une politique incluse personnalisée pour votre rôle, qui autorise l'action ddb:PutItem pour la table que vous avez créée à la section précédente.


    1. Dans l'AWS Management Console, cliquez sur Services, puis sélectionnez IAM dans la section Sécurité, identité et conformité.

    2. Sélectionnez Rôles dans la barre de navigation de gauche, puis Créer un rôle.

    3. Sélectionnez le type de rôle Lambda depuis le groupe Service AWS, puis cliquez sur Suivant : Autorisations.

      Remarque : la sélection d'un type de rôle crée automatiquement une stratégie d'approbation pour votre rôle qui permet aux services AWS d'assumer ce rôle en votre nom. Si vous créiez ce rôle en utilisant l'interface de ligne de commande CLI, AWS CloudFormation ou un autre mécanisme, vous spécifieriez une stratégie d'approbation directement.

    4. Commencez à saisir AWSLambdaBasicExecutionRole dans la zone de texte Filtre et cochez la case située en regard de ce rôle.

    5. Choisissez Next Step.

    6. Entrez WildRydesLambda comme Nom de rôle.

    7. Sélectionnez Create Role (Créer le rôle).

    8. Entrez WildRydesLambda dans la zone de filtre sur la page Rôles et choisissez le rôle que vous venez de créer.

    9. Dans l'onglet Autorisations, cliquez sur le lien Add inline policy (Ajouter une politique en ligne) situé dans le coin inférieur droit pour créer une nouvelle politique incluse.

    10. Sélectionnez Choose a service (Choisir un service).

    11. Commencez à saisir DynamoDB dans la boîte de recherche nommée Find a service (Trouver un service) et sélectionnez DynamoDB lorsqu'il apparaît.

    12. Choisissez Select actions (Sélectionner les actions).

    13. Commencez à saisir PutItem dans la boîte de recherche nommée Filter actions (Filtrer des actions) et cochez la case située à côté de PutItem lorsqu'il apparaît.

    14. Sélectionnez la section Ressources

    15. Avec l'option Specific (Spécifique) sélectionnée, sélectionnez le lien Add ARN (Ajouter ARN) dans la section table.

    16. Collez l'ARN de la table que vous avez créée dans la section précédente, dans le champ Specify ARN for table (Spécifier un ARN pour la table), et choisissez Ajouter.

    17. Choisissez Examiner une stratégie.

    18. Entrez DynamoDBWriteAccess pour le nom de la stratégie et choisissez Créer une stratégie.

  • Étape 3. Création d'une fonction Lambda pour gérer les requêtes

    AWS Lambda exécutera votre code en réponse à des événements, tels qu'une requête HTTP. Au cours de cette étape, vous allez créer la fonction principale qui traitera les demandes d'API de l'application Web pour envoyer une licorne. Dans le module suivant, vous utiliserez Amazon API Gateway pour créer une API RESTful qui exposera un point de terminaison HTTP qui peut être appelé à partir des navigateurs de vos utilisateurs. Vous connecterez ensuite la fonction Lambda créée dans cette étape à cette API afin de créer un backend totalement fonctionnel pour votre application Web.

    Utilisez la console AWS Lambda pour créer une nouvelle fonction Lambda appelée RequestUnicorn qui traitera les demandes d'API. Utilisez l'exemple d'implémentation requestUnicorn.js fourni pour le code de votre fonction. Copiez-collez simplement à partir de ce fichier dans l'éditeur de la console AWS Lambda.

    Assurez-vous de configurer votre fonction pour utiliser le rôle IAM WildRydesLambda que vous avez créé à la section précédente.


    1. Cliquez sur Services, puis sélectionnez Lambda dans la section Calcul.

    2. Cliquez sur Créer une fonction.

    3. Gardez la carte Author from scratch (Créer à partir de zéro) sélectionnée par défaut.

    4. Entrez RequestUnicorn dans le champ Nom.

    5. Sélectionnez Node.js 6.10 pour l'Exécution.

    6. Assurez-vous que l'option Choose an existing role (Choisir un rôle existant) est sélectionnée dans le menu déroulant Rôle.

    7. Sélectionnez WildRydesLambda dans le menu déroulant Rôle existant.

    8. Cliquez sur Create function (Créer une fonction).

    9. Descendez jusqu'à la section Function code (Code de fonction) et remplacez le code index.js présent dans l'éditeur de code par le contenu de requestUnicorn.js.

    10. Cliquez sur Enregistrer dans le coin supérieur droit de la page.

  • Étape 4. Test de votre implémentation

    Pour ce module, vous allez tester la fonction que vous avec créée à l'aide de la console AWS Lambda. Dans le module suivant, vous ajouterez une API REST avec API Gateway de manière à pourvoir appeler votre à partir de l'application basée sur navigateur que vous avez déployée dans le premier module.


    1. Depuis l'écran principal de modification de la fonction, sélectionnez Configure test event (Configurer un événement de test) dans le menu déroulant Select a test event... (Sélectionner un événement de test...).

    2. Laissez l'option Create new test event (Créer un nouvel événement de test) sélectionnée.

    3. Entrez TestRequestEvent dans le champ Nom de l'événement.

    4. Copiez et collez l'événement de test suivant dans l'éditeur :

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. Cliquez sur Create.

    2. Sur l'écran de modification des fonctions principales, cliquez sur Test en sélectionnant TestRequestEvent dans le menu déroulant.

    3. Naviguez jusqu'au sommet de la page et développez la section Détails de la section Execution result (Résultat de l'exécution).

    4. Assurez-vous que l'exécution a réussi et que la fonction se présente comme suit :

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }