Démarrer avec AWS

Création d'une application Web simple

Déploiement d'une application Web et ajout de fonctionnalités d'interactivité avec une API et une base de données

Module 4 : Création d'une table de données

Dans ce module, vous allez créer une table DynamoDB et activer votre fonction Lambda afin de pouvoir stocker des données dans la première.

Introduction

Dans ce module, vous allez créer une table afin de conserver des données à l'aide d'Amazon DynamoDB. DynamoDB étant un service de base de données de type clé-valeur, il n'est pas nécessaire de créer un schéma pour vos données. Ses performances sont constantes quelle que soit l'échelle, et aucun serveur ne doit être géré lors de son emploi.

En outre, le service AWS Identity and Access Management (IAM) vous permettra d'accorder, en toute sécurité, les autorisations requises aux outils concernés afin que ceux-ci puissent interagir les uns avec les autres. Vous allez ainsi, et à l'aide d'une politique IAM, autoriser la fonction Lambda créée au cours du module 2 à écrire des données dans votre nouvelle table DynamoDB. Pour ce faire, vous utiliserez le kit SDK AWS (Python, JavaScript ou Java) correspondant.

Opérations que vous allez apprendre à effectuer

  • Créer une table DynamoDB à l'aide de l'AWS Management Console
  • Créer un rôle et gérer des autorisations avec le service IAM
  • Écrire des données dans une table DynamoDB à l'aide du SDK AWS (Python, JavaScript ou Java)

Concepts clés

Données persistantes : de telles données sont stockées de manière à pouvoir être exploitées ultérieurement sans avoir à exécuter un programme particulier.

Base de données non relationnelle : une telle base de données ne s'articule pas autour d'un schéma constitué de lignes et de colonnes. À la place, le modèle de stockage est optimisé en fonction des caractéristiques spécifiques des données enregistrées.

Base de données clé-valeur : il s'agit d'un type de base de données non relationnelle qui stocke les données sous forme de paires clé-valeur. Une clé fait office d'identifiant unique.

Clé principale : il s'agit de la valeur permettant d'identifier chaque donnée dans une table DynamoDB. Elle est également employée pour partitionner cette dernière afin qu'elle puisse être mise à l'échelle.

Schéma : il s'agit de l'organisation appliquée par défaut dans une base de données.

SDK AWS : SDK signifie « Software Development Kit » (« Kit de développement logiciel »). Les SDK AWS incluent un ensemble d'outils, de bibliothèques, de documents, d'exemples de code, de processus et de guides permettant aux développeurs de créer des applications logicielles sur une plateforme spécifique.

Politique IAM : il s'agit d'un document définissant les ressources AWS auxquelles une entité (par exemple, un service, un utilisateur ou un groupe) peut accéder.

 Durée nécessaire

10 minutes

 Services utilisés

Implémentation

  • Création d'une table DynamoDB
    1. Connectez-vous à la console Amazon DynamoDB.
    2. Veillez à noter le nom de la région dans laquelle vous créez votre fonction. Cette information est indiquée dans la partie supérieure de la page, en regard du nom de votre compte.
    3. Cliquez sur le bouton Créer une table, de couleur bleue.
    4. En regard de Nom de la table, saisissez HelloWorldDatabase.
    5. Dans le champ Clé principale, saisissez ID.
    6. Cliquez sur le bouton Créer, de couleur bleue.
    7. Copiez l'Amazon Resource Name (ARN) de la table depuis la partie droite (vous en aurez besoin ultérieurement au cours de ce module).
  • Création et ajout d'une politique IAM à la fonction Lambda
    1. Maintenant que vous disposez d'une table, modifiez votre fonction Lambda afin de pouvoir y écrire des données. Dans une nouvelle fenêtre de votre navigateur, connectez-vous à la console AWS Lambda.
    2. Cliquez sur la fonction créée au cours du module 2 (si vous avez réutilisé nos exemples, celle-ci se nomme « HelloWorldFunction »).
    3. Vous allez maintenant, à l'aide d'AWS Identity and Access Management (IAM), ajouter des autorisations à votre fonction afin qu'elle puisse utiliser le service DynamoDB.
    4. Cliquez sur l'onglet Autorisations.
    5. Dans le champ Rôle d'exécution, cliquez sur le rôle approprié. Un nouvel onglet s'ouvre dans votre navigateur.
    6. Cliquez sur Ajouter une stratégie en ligne, à droite de Politiques d'autorisation.
    7. Sélectionnez l'onglet JSON.
    8. Copiez les éléments suivants dans la zone de texte, en prenant garde à remplacer l'ARN de votre table dans le champ Ressource, à la ligne 15 :
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

    9. Cette autorisation permet à votre fonction Lambda de lire, modifier ou supprimer des éléments, mais uniquement dans la table que vous avez créée.

    10. Cliquez sur le bouton Vérifier la politique, de couleur bleue.

    11. En regard de Nom, saisissez HelloWorldDynamoPolicy.

    12. Cliquez sur le bouton Créer la politique, de couleur bleue.

    13. Vous pouvez désormais fermer cet onglet et revenir à celui dédié à votre fonction Lambda.


  • Modification de la fonction Lambda afin de pouvoir écrire des données dans une table DynamoDB
    • Python
    • JavaScript
    • Java
    • Python
      1. Cliquez sur l'onglet Configuration.
      2. Remplacez le code associé à votre fonction par les éléments suivants :
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3. Cliquez sur le bouton Enregistrer, de couleur orange, dans la partie supérieure de la page.

    • JavaScript
      1. Cliquez sur l'onglet Configuration.
      2. Remplacez le code associé à votre fonction par les éléments suivants :
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3. Cliquez sur le bouton Enregistrer, de couleur orange, dans la partie supérieure de la page.

    • Java
      1. Cliquez sur l'onglet Configuration.
      2. Rendez-vous dans la section Code de la fonction, puis chargez le fichier JAR suivant (dans le cadre de ce didacticiel, aucun paquet de déploiement ne devra être créé).
      3. Remplacez le gestionnaire par com.example.app.SavePersonHandler::handleRequest.
      4. Cliquez sur le bouton Enregistrer, de couleur orange, dans la partie supérieure de la page.
  • Test des modifications
    1. Cliquez sur le bouton Tester, de couleur blanche.
    2. Le message « Exécution réussie » doit s'afficher dans une section verte.
    3. Dans un nouvel onglet de votre navigateur, ouvrez la console DynamoDB.
    4. Cliquez sur Tables dans la barre de navigation de gauche.
    5. Cliquez sur HelloWorldDatabase, la base de données créée précédemment au cours de ce module.
    6. Cliquez sur l'onglet Éléments situé sur la droite.
    7. Les éléments associés à votre événement de test doivent s'afficher à cet endroit. Si vous avez réutilisé nos exemples, l'ID doit correspondre à « Ada Lovelace ».
    8. Chaque fois que votre fonction Lambda s'exécute, votre table DynamoDB est mise à jour. Si le même nom est utilisé, seul l'horodatage change.

Architecture d'application

Maintenant que le module 4 est terminé, voici votre architecture actuelle :

full-stack amplify console arch diagram module 4

Deux services ont été ajoutés au cours de ce module : DynamoDB (pour le stockage) et IAM (pour la gestion sécurisée des autorisations). Tous deux sont connectés à votre fonction Lambda, afin que cette dernière puisse écrire des données dans votre base de données. L'étape finale consiste à ajouter du code à votre client pour appeler le service API Gateway.

Ce module vous a-t-il été utile ?

Merci
Merci de nous indiquer ce que vous avez aimé.
Fermer
Nous sommes désolés de vous décevoir.
Quelque chose est-il obsolète, déroutant ou inexact ? Aidez-nous à améliorer ce didacticiel en fournissant des commentaires.
Fermer

Ajout de fonctionnalités d'interactivité à l'application Web