Passer au contenu principal
Cette fonctionnalité utilise la délégation. Par défaut, la délégation est désactivée pour les locataires qui n’avaient aucune option en usage en date du 8 juin 2017. Les anciens locataires qui utilisent actuellement une option nécessitant la délégation peuvent continuer à utiliser cette fonctionnalité. Si la fonctionnalité de délégation est modifiée ou retirée du service un jour, les clients qui l’utilisent actuellement en seront avisés à l’avance et disposeront d’un délai suffisant pour migrer. De plus, notez que la délégation ne prend pas en charge l’utilisation de domaines personnalisés; les fonctionnalités qui en dépendent pourraient donc ne pas être entièrement fonctionnelles avec un domaine personnalisé.

Étape 1 - Configurer Amazon API Gateway

Après avoir terminé cette étape, vous aurez :
  • Configuré Amazon API Gateway à l’aide de fonctions AWS Lambda pour exécuter la logique de votre service, qui stocke et récupère des animaux de compagnie dans une table Amazon DynamoDB;
  • Créé deux méthodes de service REST non authentifiées pour récupérer et mettre à jour une liste d’animaux de compagnie.
Avant de commencer, assurez-vous que Node.js est installé.

Étape 1. Créez la table Amazon DynamoDB

Dans la console Amazon DynamoDB, cliquez sur Create Table.
Console DynamoDB - Créer une table
Configurez les paramètres de la table :
  • Nom de la table : Pets
  • Clé primaire : username
  • Type de clé primaire : String
  • Utiliser les paramètres par défaut : décoché
  • Unités de capacité de lecture : 3
  • Unités de capacité d’écriture : 3
Console DynamoDB - Configurer la table nouvellement créée
Cliquez sur Create pour créer la table avec les paramètres indiqués. Pendant la création de la table, prenez en note l’Amazon Resource Name (ARN) dans la section Détails de la table. Vous aurez besoin de l’ARN de la table à l’étape suivante.
Console DynamoDB - Détails de la table - Amazon Resource Name

Étape 2. Créez la stratégie qui accorde aux fonctions AWS Lambda l’accès à la table Pets de DynamoDB

Accédez à la console AWS IAM. Cliquez sur Roles dans le menu de gauche, puis sur le bouton Create New Role.
Console IAM - Roles - Create New Roles
Nommez le rôle APIGatewayLambdaExecRole, puis cliquez sur Next Step. Sélectionnez le type de rôle. Sous AWS Service Roles, sélectionnez AWS Lambda.
Console IAM - Select the Role Type - Service Roles - AWS Lambda
À l’écran Attach Policy, ignorez cette étape en cliquant sur Next Step. À ce stade, vérifiez les renseignements que vous avez fournis. Si tout semble correct, cliquez sur Create Role. Une fois terminé, vous devriez voir votre rôle affiché sur la page d’accueil de l’IAM. Sélectionnez le rôle que vous venez de créer, APIGatewayLambdaExecRole. Cliquez sur la flèche vers le bas pour Inline Policies, puis sur le lien Click Here. Sélectionnez Custom Policy, puis cliquez sur Select. Nommez la stratégie LogAndDynamoDBAccess et ajoutez le code suivant comme document de stratégie (assurez-vous d’abord de mettre à jour l’Amazon Resource Name (ARN) de votre table DynamoDB). Cliquez sur Apply Policy.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AccessCloudwatchLogs",
      "Action": ["logs:*"],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
      "Sid": "PetsDynamoDBReadWrite",
                  "Effect": "Allow",
      "Action": [
                  "dynamodb:DeleteItem",
                  "dynamodb:GetItem",
                  "dynamodb:PutItem",
                  "dynamodb:UpdateItem"
                  ],
      "Resource": ["DYNAMODB_TABLE_ARN_VALUE_FROM_PREVIOUS_STEP"]
    }
   ]
}

Étape 2. Créer les fonctions AWS Lambda

Les trois étapes suivantes permettent de créer les fonctions AWS Lambda pour récupérer et mettre à jour les informations sur les animaux de compagnie dans la table DynamoDB.

Créer la fonction Lambda pour GetPetInfo

Dans la console AWS Lambda, sélectionnez Create a Lambda Function (si vous n’avez jamais créé de fonction AWS Lambda auparavant, cliquez sur Get Started Now). À l’écran Select blueprint, cliquez sur Blank Function. Vous serez ensuite invité à configurer les déclencheurs. Cliquez sur Next pour continuer. Vous n’avez pas à le faire à cette étape. Enfin, il vous sera demandé de configurer la fonction. Remplissez les champs appropriés avec les informations suivantes :
  • Nom : GetPetInfo
  • Environnement d’exécution : Node.js 6.10
Collez le code suivant dans la zone Lambda function code pour récupérer les informations sur l’animal à partir de la table DynamoDB.
var AWS = require('aws-sdk');
var DOC = require('dynamodb-doc');
var dynamo = new DOC.DynamoDB();

exports.handler = function(event, context) {
   var cb = function(err, data) {
      if(err) {
         console.log('error on GetPetsInfo: ',err);
         context.done('Unable to retrieve pet information', null);
      } else {
         if(data.Item && data.Item.pets) {
             context.done(null, data.Item.pets);
         } else {
              context.done(null, {});
         }
      }
   };

   dynamo.getItem({TableName:"Pets", Key:{username:"default"}}, cb);
};
Pour le champ Role, sélectionnez Choose an existing role. Ensuite, choisissez APIGatewayLambdaExecRole comme valeur de Existing Role. Laissez tous les autres paramètres à leur valeur par défaut. Cliquez sur Next pour vérifier les renseignements que vous avez fournis. Si tout semble correct, cliquez sur Create function. Cliquez sur Test, en laissant Input test event à sa valeur par défaut (qui utilise le modèle Hello World). Une fois le test terminé, vous devriez voir une sortie vide ({}) dans la section Execution Result. La table est vide.

Créez la fonction Lambda pour UpdatePetInfo

Répétez les étapes utilisées pour créer la fonction GetPetInfo, mais utilisez plutôt le code de fonction suivant :
var AWS = require('aws-sdk');
var DOC = require('dynamodb-doc');
var dynamo = new DOC.DynamoDB();
exports.handler = function(event, context) {
    var item = { username:"default",
                 pets: event.pets || {}
            };

    var cb = function(err, data) {
        if(err) {
            console.log(err);
            context.fail('unable to update pets at this time');
        } else {
            console.log(data);
                context.done(null, data);
        }
    };
    dynamo.putItem({TableName:"Pets", Item:item}, cb);
};
Testez la fonction en cliquant sur la liste déroulante Actions, puis en choisissant Configurer l’événement d’exemple. Saisissez les données d’exemple suivantes, puis cliquez sur Soumettre :
{
  "pets": [{
    "id": 1,
    "type": "dog",
    "price": 249.99
  }]
}
Vous devriez voir un résultat vide ({}). Retournez à votre fonction Lambda GetPetInfo et cliquez de nouveau sur Test. Vous devriez maintenant voir un seul animal de compagnie.

Créer la troisième fonction Lambda

Vous allez créer une autre fonction Lambda. Même si cette fonction ne fera rien, elle est requise par la méthode OPTIONS pour CORS, comme indiqué dans une section ultérieure. En suivant les étapes décrites ci-dessus, créez une fonction Lambda nommée NoOp. Le code de la fonction sera le suivant :
exports.handler = function(event, context) {
    context.succeed('');
}
Au lieu de créer cette troisième fonction Lambda, vous pouvez aussi créer une méthode OPTIONS dans l’API Gateway.

Étape 3. Créer l’API Amazon API Gateway

Vous allez créer une API avec deux méthodes : l’une utilisera GET pour récupérer les informations sur l’animal de compagnie, et l’autre utilisera POST pour envoyer les informations sur l’animal de compagnie.

Méthode : GET Pet Information

Accédez à la Amazon API Gateway Console, puis cliquez sur Create API. S’il s’agit de la première fois que vous créez une API, vous verrez plutôt un écran vous invitant à cliquer sur Get Started. S’il s’agit de la première fois que vous créez une API, vous serez invité à créer une API d’exemple. Cliquez sur OK pour fermer la fenêtre contextuelle, puis sélectionnez le bouton radio New API plutôt que Example API. Nommez l’API SecurePets, puis cliquez sur Create API. Accédez à l’onglet Resources de l’API SecurePets, puis cliquez sur Create Resource. Nommez la ressource Pets, puis cliquez de nouveau sur Create Resource. Dans le volet de gauche, sélectionnez /pets, puis cliquez sur le bouton CreateMethod. Dans la liste déroulante, sélectionnez GET, puis cliquez sur le bouton de validation. Saisissez les valeurs de configuration suivantes pour la méthode GET :
  • Integration type : fonction Lambda;
  • Lambda Region : région où vous vous trouvez;
  • fonction Lambda : GetPetInfo.
Cliquez sur Save, puis sur OK lorsque la fenêtre contextuelle vous invite à accorder les autorisations à la fonction Lambda. Dans la fenêtre Method Execution qui s’affiche ensuite, cliquez sur Test. Vous devriez voir le seul animal renvoyé dans le corps de la réponse.

Méthode : POST des informations sur l’animal

La création de l’API utilisée pour POST les informations sur l’animal est semblable à celle utilisée pour GET les informations sur l’animal. Dans le volet de gauche, sélectionnez /pets, puis cliquez sur CreateMethod. Dans la liste déroulante, sélectionnez POST, puis cliquez sur le bouton de validation. Pour type d’intégration, sélectionnez Lambda Function, choisissez votre région, puis sélectionnez UpdatePetInfo pour la fonction Lambda. Cliquez sur Save, puis sur OK lorsque la fenêtre contextuelle vous invite à accorder les autorisations à la fonction Lambda. Cliquez sur Test, puis collez ce qui suit dans le corps de la requête :
{"pets": [
    {"id": 1, "type": "dog", "price": 249.99},
    {"id": 2, "type": "cat", "price": 124.99}
  ]
}
Vous devriez voir un résultat vide ({}). Retournez à la méthode GET, puis cliquez de nouveau sur Test pour constater que le corps de la réponse indique que deux animaux de compagnie sont répertoriés dans la table :
[
  {
    "id": 1,
    "price": 249.99,
    "type": "dog"
  },
  {
    "id": 2,
    "price": 124.99,
    "type": "cat"
  }
]

Méthode : OPTIONS

Au lieu de créer une fonction Lambda qui n’effectue aucune action, vous pouvez créer une méthode OPTIONS dans API Gateway. Dans le volet de gauche, sélectionnez /pets, puis cliquez sur CreateMethod. Dans la liste déroulante, sélectionnez OPTIONS, puis cliquez sur le bouton de validation. Sélectionnez Simulé comme type d’intégration. Cliquez sur Save. En laissant le corps de la réponse vide, cliquez sur Test. Vous devriez recevoir un corps de réponse indiquant no data. À ce stade, les fonctions AWS Lambda et les méthodes Amazon API Gateway sont définies sans mécanisme de sécurité.