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

> Étape 1 du tutoriel Amazon API Gateway

# Étape 1 du tutoriel AWS API Gateway

<Warning>
  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é.
</Warning>

<div id="step-1-set-up-the-amazon-api-gateway">
  ## Étape 1 - Configurer Amazon API Gateway
</div>

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](https://nodejs.org/) est installé.

<div id="step-1-create-the-amazon-dynamodb-table">
  ### Étape 1. Créez la table Amazon DynamoDB
</div>

Dans la [console Amazon DynamoDB](https://console.aws.amazon.com/dynamodb), cliquez sur **Create Table**.

<Frame>
  <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2ZPhi7Ddx4TznSXEEhUSDK/52a06412f7c5e6d0ef0d13c6ffe17611/dynamodb-create-table.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=643f89a15f3cf6cac0ae04774466ed0e" alt="Console DynamoDB - Créer une table" width="750" height="579" data-path="docs/images/cdy7uua7fh8z/2ZPhi7Ddx4TznSXEEhUSDK/52a06412f7c5e6d0ef0d13c6ffe17611/dynamodb-create-table.png" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6MYJV97Xa3DxajG8DYj2dx/e428ab2ce137176d7771c61a9c528f7c/configure-newly-created-table.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=baf9b40373cd0537223be38a54d49a20" alt="Console DynamoDB - Configurer la table nouvellement créée" width="750" height="579" data-path="docs/images/cdy7uua7fh8z/6MYJV97Xa3DxajG8DYj2dx/e428ab2ce137176d7771c61a9c528f7c/configure-newly-created-table.png" />
</Frame>

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.

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4ZFemddtUD8tRi0NUvzXJ2/38abd951974cad385ef7417f48adf359/table-arn.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=24bcfbd52797659d29f8dea427662a87" alt="Console DynamoDB - Détails de la table - Amazon Resource Name" width="750" height="579" data-path="docs/images/cdy7uua7fh8z/4ZFemddtUD8tRi0NUvzXJ2/38abd951974cad385ef7417f48adf359/table-arn.png" />
</Frame>

<div id="step-2-create-the-policy-that-grants-aws-lambda-functions-access-to-the-dynamodb-pets-table">
  ### Étape 2. Créez la stratégie qui accorde aux fonctions AWS Lambda l’accès à la table Pets de DynamoDB
</div>

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

Cliquez sur **Roles** dans le menu de gauche, puis sur le bouton **Create New Role**.

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4mgCTXLpycHLA8RbYoEFim/5d9eb81be979355aa9cd10d476ead515/roles.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=0d513d49c01b6a37861cee6ee2b626d4" alt="Console IAM - Roles - Create New Roles" width="750" height="579" data-path="docs/images/cdy7uua7fh8z/4mgCTXLpycHLA8RbYoEFim/5d9eb81be979355aa9cd10d476ead515/roles.png" />
</Frame>

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.

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

À 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**.

```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"]
    }
   ]
}
```

<div id="step-2-create-the-aws-lambda-functions">
  ### Étape 2. Créer les fonctions AWS Lambda
</div>

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.

<div id="create-the-lambda-function-for-getpetinfo">
  #### Créer la fonction Lambda pour GetPetInfo
</div>

Dans la [console AWS Lambda](https://console.aws.amazon.com/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.

```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 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.

<div id="create-the-lambda-function-for-updatepetinfo">
  #### Créez la fonction Lambda pour UpdatePetInfo
</div>

Répétez les étapes utilisées pour créer la fonction `GetPetInfo`, mais utilisez plutôt le code de fonction suivant :

```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);
};
```

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** :

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

<div id="create-the-third-lambda-function">
  #### Créer la troisième fonction Lambda
</div>

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 :

```js lines theme={null}
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](#method-options) dans l’API Gateway.

<div id="step-3-create-the-amazon-api-gateway-api">
  ### Étape 3. Créer l’API Amazon API Gateway
</div>

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.

<div id="method-get-pet-information">
  #### Méthode : GET Pet Information
</div>

Accédez à la [Amazon API Gateway Console](https://console.aws.amazon.com/apigateway), 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.

<div id="method-post-pet-information">
  #### Méthode : POST des informations sur l’animal
</div>

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 :

```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 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 :

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

<div id="method-options">
  #### Méthode : OPTIONS
</div>

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é.
