Dans ce module, vous utiliserez AWS Lambda et Amazon DynamoDB pour créer un processus backend qui traitera les requêtes destinées à votre application Web. L’application de navigateur que vous avez déployée dans le premier module permet aux utilisateurs de demander qu’une licorne soit envoyée à un emplacement de leur choix. Afin de traiter ces requêtes, le code JavaScript exécuté dans le navigateur devra invoquer un service exécuté dans le cloud.

Serverless_Web_App_LP_assets-04

Vous implémenterez une fonction Lambda qui sera invoquée chaque fois qu’un utilisateur demande une licorne. Cette fonction sélectionnera une licorne à partir de la flotte, enregistrera la requête dans une table DynamoDB, puis répondra à l’application front-end en fournissant des informations sur la licorne envoyée.

La fonction est invoquée à partir du navigateur à l’aide d’Amazon API Gateway. Vous implémenterez cette connexion dans le prochain module. Dans le cadre du présent module, vous allez seulement tester votre fonction de façon isolée.

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

Services utilisés : 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 nouvelle table DynamoDB. Nommez votre table Rides et attribuez-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. Vérifiez que vous utilisez exactement les ID fournis. Utilisez les valeurs par défaut pour tous les autres paramètres.

    Une fois que vous avez créé cette table, notez l’ARN, que nous utiliserons dans l’étape suivante.


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

    2. Choisissez Créer une table.

    3. Saisissez Rides dans Nom de la table. Ce champ est sensible à la casse.

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

    5. Cochez la case Utiliser les paramètres par défaut, puis choisissez Créer.

    6. Faites défiler la page de la section Présentation de votre nouvelle table vers le bas et notez l’ARN. Cette valeur sera utilisée dans la section suivante.

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

    Chaque fonction Lambda dispose d’un rôle IAM qui lui est associé. Ce rôle définit les autres services AWS avec lesquels la fonction est autorisée à interagir. Dans le cadre de cet atelier, vous devrez créer un rôle IAM qui octroie à votre fonction Lambda l’autorisation d’écrire dans les journaux d’Amazon CloudWatch et d’accéder à votre table DynamoDB pour y écrire des articles.

    Utilisez la console IAM pour créer un nouveau rôle. Nommez-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 sur les journaux Amazon CloudWatch et le droit d’ajouter des articles à votre table DynamoDB.

    Reliez la stratégie gérée appelée AWSLambdaBasicExecutionRole à ce rôle pour lui accorder les autorisations liées aux journaux CloudWatch nécessaires. De plus, créez une stratégie en ligne personnalisée pour votre rôle, qui autorise l’action ddb:PutItem pour la table que vous avez créée dans la section précédente.


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

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

    3. Sélectionnez AWS Lambda comme type de rôle.

      Remarque : lorsque vous sélectionnez un type de rôle, une stratégie d’approbation est automatiquement créée pour votre rôle, laquelle autorise les services AWS à endosser ce rôle en votre nom. Si vous créez ce rôle à l’aide de l’interface de ligne de commande, AWS CloudFormation ou tout autre mécanisme, vous devez spécifier directement une stratégie d’approbation.

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

    5. Choisissez Étape suivante.

    6. Saisissez WildRydesLambda dans Nom du rôle.

    7. Sélectionnez Créer un rôle.

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

    9. Sur l’onglet Permissions, développez la section Stratégies en ligne, puis cliquez sur le lien cliquez ici pour créer une nouvelle stratégie en ligne.

    10. Assurez-vous que Générateur de stratégies est sélectionné et choisissez Sélectionner.

    11. Sélectionnez Amazon DynamoDB à partir du menu déroulant Service AWS.

    12. Sélectionnez PutItem dans la liste Actions.

    13. Collez l’ARN de la table que vous avez créée dans la section précédente dans le champ Amazon Resource Name (ARN).

    14. Choisissez Ajouter une instruction.

    15. Cliquez sur Étape suivante, puis Appliquer la stratégie.

  • Étape 3. Création d’une fonction Lambda pour les demandes de traitement

    AWS Lambda exécute votre code en réponse à des événements tels qu’une requête HTTP. Au cours de cette étape, vous créerez la fonction centrale qui traite les requêtes API à partir de l’application Web afin d’expédier une licorne. Dans le module suivant, vous utiliserez Amazon API Gateway pour créer une API RESTful qui exposera un point de terminaison HTTP pouvant être invoqué depuis le navigateur de vos utilisateurs. Ensuite, vous connecterez la fonction Lambda créée dans la présente étape à cette API afin d’établir un backend entièrement fonctionnel pour votre application Web.

    Utilisez la console AWS Lambda pour créer une nouvelle fonction Lambda nommée RequestUnicorn qui traitera les requêtes d’API. Utilisez l’exemple d’implémentation fourni requestUnicorn.js pour votre code de fonction. Il vous suffit de le copier-coller depuis fichier dans l’éditeur de la console AWS Lambda.

    Veillez à configurer votre fonction pour qu’elle utilise le rôle IAM WildRydesLambda que vous avez créé dans la section précédente.


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

    2. Sélectionnez Créer une fonction.

    3. Choisissez Partir de zéro.

    4. Saisissez RequestUnicorn dans le champ Nom.

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

    6. Sélectionnez Créer une fonction.

    7. Copiez et collez du fichier requestUnicorn.js dans la zone de saisie du code.

    8. Assurez-vous que Node.js 6.10 est sélectionné sous Runtime.

    9. Conservez la valeur par défaut index.handler dans le champ Gestionnaire.

  • Étape 4. Validation de votre implémentation

    Dans le cadre de ce module, vous allez tester la fonction que vous avez créée à l’aide de la console AWS Lambda. Dans le module suivant, vous ajouterez une API REST à l’aide d’API Gateway afin de pouvoir invoquer votre fonction à partir de l’application Web que vous avez déployée dans le premier module.


    1. Sélectionnez le menu déroulant Sélectionner un événement de test, puis Configurer l’événement de test.

    2. 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. Saisissez un nom d’événement, choisissez Créer, puisTester.

    2. Vérifiez que l’exécution a réussi et que le résultat de la fonction est semblable au suivant :

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