> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Tutoriel sur la passerelle API AWS – Étape 1

> Étape 1 du tutoriel sur la passerelle API Amazon

<Warning>
  Cette fonctionnalité utilise la délégation. Par défaut, la délégation est désactivée pour les locataires sans module complémentaire en cours d’utilisation depuis le 8 juin 2017. Les anciens locataires qui utilisent actuellement un module complémentaire nécessitant une délégation peuvent continuer à utiliser cette fonction. Si la fonctionnalité de délégation est modifiée ou supprimée à un moment donné, les clients qui l’utilisent seront informés à l’avance et disposeront d’un délai suffisant pour migrer. Par ailleurs, notez que la délégation ne prend pas en charge l’utilisation de domaines personnalisés, si bien que toutes les fonctionnalités qui en dépendent risquent de ne pas être pleinement fonctionnelles avec un domaine personnalisé.
</Warning>

## Étape 1 – Configurer la passerelle API Amazon

Après avoir procédé à cette étape, vous aurez :

* Configuré la passerelle API Amazon à l’aide des fonctions AWS Lambda pour exécuter votre logique de service qui stocke et récupère les animaux de compagnie à partir d’une table Amazon DynamoDB;
* Créé deux méthodes de service REST sans authentification pour obtenir et mettre à jour une liste d’animaux de compagnie.

Avant de commencer, veuillez installer [Node.js](https://nodejs.org/).

### 1. Création de la table Amazon DynamoDB

Dans la [console Amazon DynamoDB](https://console.aws.amazon.com/dynamodb), cliquez sur **Créer une table**.

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/M4OX-dUcWfCOjXvH/docs/images/fr-ca/cdy7uua7fh8z/2ZPhi7Ddx4TznSXEEhUSDK/52a06412f7c5e6d0ef0d13c6ffe17611/dynamodb-create-table.png?fit=max&auto=format&n=M4OX-dUcWfCOjXvH&q=85&s=a5a3bd1426a061afdfe5ec18952371ca" alt="DynamoDB Console - Create Table" width="750" height="579" data-path="docs/images/fr-ca/cdy7uua7fh8z/2ZPhi7Ddx4TznSXEEhUSDK/52a06412f7c5e6d0ef0d13c6ffe17611/dynamodb-create-table.png" />
</Frame>

Configurez les variables associées à la table :

* **Nom de la table** : animaux de compagnie
* **Clé primaire** : nom d’utilisateur
* **Type de clé primaire** : chaîne
* **Utiliser les paramètres par défaut** : case décochée
* **Unités de capacité de lecture** : 3
* **Unités de capacité d’écriture** : 3

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/mxRp7IkiVukPESZw/docs/images/fr-ca/cdy7uua7fh8z/6MYJV97Xa3DxajG8DYj2dx/e428ab2ce137176d7771c61a9c528f7c/configure-newly-created-table.png?fit=max&auto=format&n=mxRp7IkiVukPESZw&q=85&s=9ab676f9aa0891986384499984f55cb6" alt="DynamoDB Console - Configure Newly Created Table" width="750" height="579" data-path="docs/images/fr-ca/cdy7uua7fh8z/6MYJV97Xa3DxajG8DYj2dx/e428ab2ce137176d7771c61a9c528f7c/configure-newly-created-table.png" />
</Frame>

Cliquez sur **Créer** pour créer la table avec les paramètres fournis.

Pendant la création de la table, prenez note du nom de la ressource Amazon affichée sur la ligne Amazon Resource Name (ARN) dans la section Détails de la table. Vous aurez en effet besoin de l’ARN de la table à l’étape suivante.

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/6JN7GvC_uhcSr-i5/docs/images/fr-ca/cdy7uua7fh8z/4ZFemddtUD8tRi0NUvzXJ2/38abd951974cad385ef7417f48adf359/table-arn.png?fit=max&auto=format&n=6JN7GvC_uhcSr-i5&q=85&s=3370cde5c1b44291c99e0d7ddaca0b6a" alt="DynamoDB Console - Table Details - Amazon Resource Name" width="750" height="579" data-path="docs/images/fr-ca/cdy7uua7fh8z/4ZFemddtUD8tRi0NUvzXJ2/38abd951974cad385ef7417f48adf359/table-arn.png" />
</Frame>

### 2. Création de la politique qui accorde aux fonctions AWS Lambda l’accès à la table DynamoDB Animaux de compagnie

Accédez à la [console AWS IAM](https://console.aws.amazon.com/iam).

Cliquez sur **Rôles** dans le menu de gauche, puis cliquez sur le bouton **Créer un nouveau rôle**.

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/6JN7GvC_uhcSr-i5/docs/images/fr-ca/cdy7uua7fh8z/4mgCTXLpycHLA8RbYoEFim/5d9eb81be979355aa9cd10d476ead515/roles.png?fit=max&auto=format&n=6JN7GvC_uhcSr-i5&q=85&s=08dae361dd1095c7988be42914dede23" alt="IAM Console - Roles - Create New Roles" width="750" height="579" data-path="docs/images/fr-ca/cdy7uua7fh8z/4mgCTXLpycHLA8RbYoEFim/5d9eb81be979355aa9cd10d476ead515/roles.png" />
</Frame>

Nommez le rôle `APIGatewayLambdaExecRole`, puis cliquez sur **Étape suivante**.

Sélectionnez le type de rôle. Sous la section Rôles de service AWS, sélectionnez AWS Lambda.

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/M4OX-dUcWfCOjXvH/docs/images/fr-ca/cdy7uua7fh8z/326kKGbahlvIwVFTi61Gfw/026d1fc0c8c6e3a489ec4fb840f551da/select-role-type.png?fit=max&auto=format&n=M4OX-dUcWfCOjXvH&q=85&s=d7354eebe341c6b2838e13d625d58e15" alt="IAM Console - Select the Role Type - Service Roles - AWS Lambda" width="750" height="579" data-path="docs/images/fr-ca/cdy7uua7fh8z/326kKGbahlvIwVFTi61Gfw/026d1fc0c8c6e3a489ec4fb840f551da/select-role-type.png" />
</Frame>

L’écran Joindre une politique s’affiche. Ignorez cette étape en cliquant sur **Étape suivante**. Passez maintenant en revue les informations que vous avez fournies. Si tout semble correct, cliquez sur **Créer le rôle**. Lorsque vous avez terminé, vous devriez voir votre rôle répertorié sur la page d’accueil IAM.

Sélectionnez le rôle **APIGatewayLambdaExecRole** que vous venez de créer. Cliquez sur la flèche vers le bas pour vous rendre à la section Politiques en ligne et cliquez sur le lien **Cliquez ici**.

Sélectionnez Politique personnalisée, puis cliquez sur **Sélectionner**. Nommez la politique `LogAndDynamoDBAccess` et ajoutez le code suivant comme document de politique (assurez-vous d’abord de mettre à jour le nom de la ressource Amazon (ARN) pour votre table DynamoDB). Cliquez sur **Appliquer la politique**.

```json lines theme={null}
{
  "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"]
    }
   ]
}
```

### 2. Création des 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éation de la fonction Lambda pour GetPetInfo

Dans la [console AWS Lambda](https://console.aws.amazon.com/lambda), sélectionnez **Créer une fonction Lambda** (si vous n’avez pas encore créé de fonction AWS Lambda, cliquez sur **Commencer maintenant**).

L’écran Sélectionner le modèle s’affiche. Cliquez sur **Fonction vierge**.

Vous serez alors invité à configurer les déclencheurs. Cliquez sur **Suivant** pour continuer. Vous n’avez pas besoin de faire quoi que ce soit pour le moment.

Vous serez enfin invité à configurer la fonction.

Remplissez les champs appropriés avec les informations suivantes :

* **Nom** : `GetPetInfo`
* **Temps d’exécution** : Node.js 6.10

Collez le code suivant pour lire les informations des animaux de compagnie dans la table DynamoDB dans la zone du **code de la fonction Lambda**.

```javascript lines theme={null}
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 la section Rôle, sélectionnez **Choisir un rôle existant**. Ensuite, choisissez **APIGatewayLambdaExecRole** comme rôle existant dans la section Rôle existant. Laissez tous les autres paramètres sur leurs valeurs par défaut.

Cliquez sur **Suivant** pour consulter les informations que vous avez fournies. Si tout semble correct, cliquez sur **Créer une fonction**.

Cliquez sur **Tester**, en laissant l’événement de test d’entrée à sa valeur par défaut (qui utilise le modèle Hello World). Lorsque le test est terminé, vous devriez voir une sortie vide (`{}`) dans la section Résultat de l’exécution. La table est vide.

#### Création de la fonction Lambda pour UpdatePetInfo

Répétez les instructions suivies pour créer la fonction `GetPetInfo`, mais utilisez plutôt les éléments suivants comme code de fonction :

```javascript lines theme={null}
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);
};
```

Pour tester la fonction, cliquez sur la liste déroulante Actions et choisissez **Configurer l’exemple d’événement**. Entrez le code ci-dessous pour ajouter des exemples de données, puis cliquez sur **Soumettre** :

```json lines theme={null}
{
  "pets": [{
    "id": 1,
    "type": "dog",
    "price": 249.99
  }]
}
```

Vous devriez voir un résultat de retour vide (`{}`).

Revenez à votre fonction Lambda `GetPetInfo` et cliquez à nouveau sur **Tester**. Vous devriez maintenant voir un seul animal de compagnie.

#### Création de la troisième fonction lambda

Vous allez créer une fonction Lambda supplémentaire. Bien que cette fonction ne fasse rien, elle est requise par la méthode OPTIONS pour CORS comme décrit 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 :

```js lines theme={null}
exports.handler = function(event, context) {
    context.succeed('');
}
```

Au lieu de créer cette troisième fonction Lambda, vous pouvez choisir de [créer une méthode OPTIONS](#method-options) sur la passerelle API.

### 3. Création de l’API de la passerelle API Amazon

Vous créerez une API selon deux méthodes : l’une, `GET`, obtiendra des informations sur les animaux de compagnie et l’autre, `POST`, publiera des informations sur les animaux de compagnie.

#### Méthode : GET pour obtenir des informations sur les animaux de compagnie

Allez sur la [console de passerelle API Amazon](https://console.aws.amazon.com/apigateway), puis cliquez sur **Créer une API**. Si c’est la première fois que vous créez une API, vous verrez un écran **Commencer** à la place.

Si c’est la première fois que vous créez une API, vous serez invité à créer un exemple d’API. Cliquez sur **OK** pour quitter la notification contextuelle et choisissez le bouton radio **Nouvelle API** au lieu du bouton **Exemple d’API**.

Nommez l’API `SecurePets` et cliquez sur **Créer une API**.

Accédez à l’onglet Ressources de l’API `SecurePets` et cliquez sur l’action **Créer une ressource**.

Nommez la ressource `Pets` et cliquez à nouveau sur **Créer une ressource**.

Dans le volet de gauche, sélectionnez `/pets`, puis cliquez sur le bouton **Créer méthode**.

Dans le menu déroulant, sélectionnez GET et cliquez sur la coche. Fournissez les valeurs de configuration suivantes pour la méthode `GET` :

* **Type d’intégration** : Fonction Lambda;
* **Région Lambda** : région dans laquelle vous vous trouvez;
* **Fonction Lambda** : GetPetInfo.

Cliquez sur **Enregistrer**, puis sur **OK** lorsque vous êtes invité dans la fenêtre contextuelle à accorder des autorisations à la fonction Lambda.

Dans la fenêtre Exécution de la méthode qui s’affiche ensuite, cliquez sur **Tester**.

Vous devriez voir le seul animal de compagnie retourné dans le corps de la réponse.

#### Méthode : POST pour obtenir des informations sur les animaux de compagnie

La création de l’API utilisée pour la méthode `POST` qui sert à publier des informations sur les animaux de compagnie est similaire à la création de celle utilisée pour la méthode `GET` pour obtenir des informations sur les animaux de compagnie.

Dans le volet de gauche, sélectionnez `/pets`, puis cliquez sur **Créer méthode**.

Dans le menu déroulant, sélectionnez POST et cliquez sur la coche.

Dans Type d’intégration, sélectionnez Fonction Lambda et sélectionnez la région dans laquelle vous vous trouvez dans Fonction Lambda, sélectionnez UpdatePetInfo.

Cliquez sur **Enregistrer**, puis sur **OK** lorsque vous êtes invité dans la fenêtre contextuelle à accorder des autorisations à la fonction Lambda.

Cliquez sur **Tester** et collez le code ci-dessous dans le corps de la demande :

```json lines theme={null}
{"pets": [
    {"id": 1, "type": "dog", "price": 249.99},
    {"id": 2, "type": "cat", "price": 124.99}
  ]
}
```

Vous devriez voir un résultat de retour vide (`{}`).

Retournez à la méthode GET et cliquez à nouveau sur **Tester** pour voir si le corps de la réponse indique maintenant qu’il y a deux animaux de compagnie répertoriés dans la table :

```json lines theme={null}
[
  {
    "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` sur la passerelle API.

Dans le volet de gauche, sélectionnez `/pets`, puis cliquez sur **Créer méthode**. Dans le menu déroulant sélectionnez OPTIONS et cliquez sur la coche. Dans Type d’intégration, sélectionnez Simuler. Cliquez sur **Enregistrer**.

Laissez le corps de la réponse vide, puis cliquez sur **Tester**. Vous devriez voir un corps de réponse affichant `no data`.

À ce stade, les fonctions AWS Lambda et les méthodes de l’API de la passerelle API Amazon sont définies sans aucune sécurité.
