

 Le [guide de référence de l'API AWS SDK pour JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) décrit en détail toutes les opérations de l'API pour la AWS SDK pour JavaScript version 3 (V3). 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Invoquer Lambda avec API Gateway
<a name="api-gateway-invoking-lambda-example"></a>

Vous pouvez appeler une fonction Lambda à l'aide d'Amazon API Gateway, qui est un AWS service de création, de publication, de maintenance, de surveillance et de sécurisation des protocoles REST, HTTP et WebSocket APIs à grande échelle. Les développeurs d'API peuvent créer APIs cet accès AWS ou d'autres services Web, ainsi que des données stockées dans le AWS cloud. En tant que développeur d'API Gateway, vous pouvez créer des applications APIs pour les utiliser dans vos propres applications clientes. Pour plus d'informations, consultez [Qu'est-ce qu'Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ? 

AWS Lambda est un service de calcul qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs. Vous pouvez créer des fonctions Lambda dans différents langages de programmation. Pour plus d'informations AWS Lambda, voir [Qu'est-ce que AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).

Dans cet exemple, vous créez une fonction Lambda à l'aide de l'API d'exécution JavaScript Lambda. Cet exemple fait appel à différents AWS services pour réaliser un cas d'utilisation spécifique. Supposons, par exemple, qu'une organisation envoie un message texte mobile à ses employés pour les féliciter à la date du premier anniversaire, comme le montre cette illustration.

![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picPhone.png)


La réalisation de l'exemple devrait prendre environ 20 minutes.

Cet exemple montre comment utiliser la JavaScript logique pour créer une solution qui exécute ce cas d'utilisation. Par exemple, vous apprendrez à lire une base de données pour déterminer quels employés ont atteint le premier anniversaire, à traiter les données et à envoyer un message texte à l'aide d'une fonction Lambda. Vous apprendrez ensuite à utiliser API Gateway pour appeler cette AWS Lambda fonction à l'aide d'un point de terminaison Rest. Par exemple, vous pouvez appeler la fonction Lambda à l'aide de cette commande curl :

```
curl -XGET "https://xxxxqjko1o3.execute-api.us-east-1.amazonaws.com/cronstage/employee" 
```

Ce AWS didacticiel utilise une table Amazon DynamoDB nommée Employee qui contient ces champs.
+ **id** - la clé primaire de la table.
+ **FirstName : prénom** de l'employé.
+ **téléphone - numéro** de téléphone de l'employé.
+ Date de **début : date** de début de l'employé.

![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/pic00.png)


**Important**  
Coût de réalisation : Les AWS services inclus dans ce document sont inclus dans le niveau AWS gratuit. Veillez toutefois à désactiver toutes les ressources une fois que vous aurez terminé cet exemple afin de ne pas être débité.

**Pour créer l'application, procédez comme suit :**

1. [Compléter les prérequis](#api-gateway-invoking-lambda-provision-resources)

1. [Créez les AWS ressources](#api-gateway-invoking-lambda-provision-resources)

1. [Préparez le script du navigateur](#api-gateway-invoking-lambda-browser-script)

1. [Création et téléchargement de la fonction Lambda](#api-gateway-invoking-lambda-browser-script)

1. [Déployer la fonction Lambda](#api-gateway-invoking-lambda-deploy-function)

1. [Exécutez l'application](#api-gateway-invoking-lambda-run)

1. [Supprimer les ressources](#api-gateway-invoking-lambda-destroy)

## Tâches préalables
<a name="api-gateway-invoking-lambda-prerequisites"></a>

Pour configurer et exécuter cet exemple, vous devez d'abord :
+ Configurez l'environnement du projet pour exécuter ces TypeScript exemples de nœuds et installez les modules requis AWS SDK pour JavaScript et tiers. Suivez les instructions figurant sur [ GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/cross-services/lambda-api-gateway/README.md).
+ Créez un fichier de configurations partagé avec vos informations d'identification utilisateur. Pour plus d'informations sur la fourniture d'un fichier d'informations d'identification [partagé, consultez la section Fichiers de configuration et d'informations d'identification](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) partagés dans le *guide de référence AWS SDKs et Tools*.

## Créez les AWS ressources
<a name="api-gateway-invoking-lambda-provision-resources"></a>

Ce didacticiel nécessite les ressources suivantes :
+ Une table Amazon DynamoDB `Employee` nommée avec une clé `Id` nommée et les champs illustrés dans l'illustration précédente. Assurez-vous de saisir les données correctes, y compris un téléphone portable valide avec lequel vous souhaitez tester ce cas d'utilisation. Pour plus d'informations, consultez la section [Création d'une table](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html).
+ Rôle IAM associé à des autorisations permettant d'exécuter des fonctions Lambda.
+ Un compartiment Amazon S3 pour héberger la fonction Lambda.

Vous pouvez créer ces ressources manuellement, mais nous vous recommandons de les approvisionner à l'aide de la méthode CloudFormation décrite dans ce didacticiel.

### Créez les AWS ressources à l'aide de CloudFormation
<a name="api-gateway-invoking-lambda-resources-cli"></a>

CloudFormation vous permet de créer et de provisionner des déploiements AWS d'infrastructure de manière prévisible et répétée. Pour plus d'informations CloudFormation, consultez le [guide de AWS CloudFormation l'utilisateur](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/).

Pour créer la CloudFormation pile à l'aide de AWS CLI :

1. Installez et configurez en AWS CLI suivant les instructions du [guide de l'AWS CLI utilisateur](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).

1. Créez un fichier nommé `setup.yaml` dans le répertoire racine du dossier de votre projet et [ GitHubcopiez-y le](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/setup.yaml) contenu.
**Note**  
Le CloudFormation modèle a été généré à l'aide du modèle AWS CDK [disponible ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/resources/cdk/lambda_using_api_gateway). Pour plus d'informations à ce sujet AWS CDK, consultez le [guide du AWS Cloud Development Kit (AWS CDK) développeur](https://docs.aws.amazon.com/cdk/latest/guide/).

1. Exécutez la commande suivante depuis la ligne de commande, en la *STACK\$1NAME* remplaçant par un nom unique pour la pile.
**Important**  
Le nom de la pile doit être unique au sein d'une AWS région et d'un AWS compte. Vous pouvez spécifier jusqu'à 128 caractères. Les chiffres et les tirets sont autorisés.

   ```
   aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM
   ```

   Pour plus d'informations sur les paramètres de `create-stack` commande, consultez le [guide de référence des AWS CLI commandes](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) et le [guide de CloudFormation l'utilisateur](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html).

1. Ensuite, renseignez le tableau en suivant la procédure[Remplissage du tableau](#api-gateway-invoking-lambda-resources-create-table).

### Remplissage du tableau
<a name="api-gateway-invoking-lambda-resources-create-table"></a>

Pour remplir le tableau, créez d'abord un répertoire nommé`libs`, puis créez un fichier nommé`dynamoClient.js`, puis collez-y le contenu ci-dessous. 

```
const { DynamoDBClient } = require ( "@aws-sdk/client-dynamodb" );
// Set the AWS Region.
const REGION = "REGION"; // e.g. "us-east-1"
 // Create an Amazon Lambda service client object.
const dynamoClient = new DynamoDBClient({region:REGION});
module.exports = { dynamoClient };
```

 Ce code est disponible [ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/libs/dynamoClient.js).

Créez ensuite un fichier nommé `populate-table.js` dans le répertoire racine du dossier de votre projet et [ GitHubcopiez-y le](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/helper-functions/populate-table.js) contenu. Pour l'un des articles, remplacez la valeur de la `phone` propriété par un numéro de téléphone portable valide au format E.164, et la valeur `startDate` par la date du jour.

Exécutez la commande suivante depuis la ligne de commande.

```
node populate-table.js
```

```
const { BatchWriteItemCommand } = require ( "aws-sdk/client-dynamodb" );
const {dynamoClient} = require ( "./libs/dynamoClient" );

// Set the parameters.
export const params = {
  RequestItems: {
    Employees: [
      {
        PutRequest: {
          Item: {
            id: { N: "1" },
            firstName: { S: "Bob" },
            phone: { N: "155555555555654" },
            startDate: { S: "2019-12-20" },
          },
        },
      },
      {
        PutRequest: {
          Item: {
            id: { N: "2" },
            firstName: { S: "Xing" },
            phone: { N: "155555555555653" },
            startDate: { S: "2019-12-17" },
          },
        },
      },
      {
        PutRequest: {
          Item: {
            id: { N: "55" },
            firstName: { S: "Harriette" },
            phone: { N: "155555555555652" },
            startDate: { S: "2019-12-19" },
          },
        },
      },
    ],
  },
};

export const run = async () => {
  try {
    const data = await dbclient.send(new BatchWriteItemCommand(params));
    console.log("Success", data);
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

 Ce code est disponible [ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/helper-functions/populate-table.js).

## Création de la AWS Lambda fonction
<a name="api-gateway-invoking-lambda-browser-script"></a>

### Configuration du kit SDK
<a name="api-gateway-invoking-lambda-configure-sdk"></a>

Dans le `libs` répertoire, créez des fichiers nommés `snsClient.js` et`lambdaClient.js`, puis collez le contenu ci-dessous dans ces fichiers, respectivement. 

```
const { SNSClient } = require("@aws-sdk/client-sns");
// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create an Amazon SNS service client object.
const snsClient = new SNSClient({ region: REGION });
module.exports = { snsClient };
```

 Remplacez *REGION* par la AWS région. Ce code est disponible [ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/libs/snsClient.js).

```
const { LambdaClient } = require("@aws-sdk/client-lambda");
// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create an Amazon Lambda service client object.
const lambdaClient = new LambdaClient({ region: REGION });
module.exports = { lambdaClient };
```

Remplacez *REGION* par la AWS région. Ce code est disponible [ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/libs/lambdaClient.js).

Importez d'abord les modules et commandes requis AWS SDK pour JavaScript (v3). Calculez ensuite la date du jour et attribuez-la à un paramètre. Troisièmement, créez les paramètres pour`ScanCommand`. *TABLE\$1NAME*Remplacez-le par le nom de la table que vous avez créée dans la [Créez les AWS ressources](#api-gateway-invoking-lambda-provision-resources) section de cet exemple.

L'extrait de code suivant illustre cette étape. (Pour obtenir l'exemple complet, consultez [Regroupement de la fonction Lambda](#api-gateway-invoking-lambda-full).)

```
const { ScanCommand } = require("@aws-sdk/client-dynamodb");
const { PublishCommand } = require("@aws-sdk/client-sns");
const { snsClient } = require("./libs/snsClient");
const { dynamoClient } = require("./libs/dynamoClient");

// Get today's date.
const today = new Date();
const dd = String(today.getDate()).padStart(2, "0");
const mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0!
const yyyy = today.getFullYear();
const date = `${yyyy}-${mm}-${dd}`;

// Set the parameters for the ScanCommand method.
const params = {
  // Specify which items in the results are returned.
  FilterExpression: "startDate = :topic",
  // Define the expression attribute value, which are substitutes for the values you want to compare.
  ExpressionAttributeValues: {
    ":topic": { S: date },
  },
  // Set the projection expression, which are the attributes that you want.
  ProjectionExpression: "firstName, phone",
  TableName: "Employees",
};
```

### Analyse de la table DynamoDB
<a name="api-gateway-invoking-lambda-scan-table"></a>

Tout d'abord, créez une async/await fonction appelée `sendText` pour publier un message texte à l'aide d'Amazon SNS`PublishCommand`. Ajoutez ensuite un schéma de `try` blocs qui analyse la table DynamoDB à la recherche des employés à l'occasion de leur anniversaire de travail aujourd'hui, puis appelle `sendText` la fonction pour envoyer un message texte à ces employés. En cas d'erreur, le `catch` bloc est appelé.

L'extrait de code suivant illustre cette étape. (Pour obtenir l'exemple complet, consultez [Regroupement de la fonction Lambda](#api-gateway-invoking-lambda-full).)

```
// Helper function to send message using Amazon SNS.
exports.handler = async () => {
  // Helper function to send message using Amazon SNS.
  async function sendText(textParams) {
    try {
      await snsClient.send(new PublishCommand(textParams));
      console.log("Message sent");
    } catch (err) {
      console.log("Error, message not sent ", err);
    }
  }
  try {
    // Scan the table to identify employees with work anniversary today.
    const data = await dynamoClient.send(new ScanCommand(params));
    for (const element of data.Items) {
      const textParams = {
        PhoneNumber: element.phone.N,
        Message: `Hi ${element.firstName.S}; congratulations on your work anniversary!`,
      };
      // Send message using Amazon SNS.
      sendText(textParams);
    }
  } catch (err) {
    console.log("Error, could not scan table ", err);
  }
};
```

### Regroupement de la fonction Lambda
<a name="api-gateway-invoking-lambda-full"></a>

Cette rubrique décrit comment regrouper `mylambdafunction.ts` les AWS SDK pour JavaScript modules requis pour cet exemple dans un fichier groupé appelé`index.js`. 

1. Si ce n'est pas déjà fait, suivez cet exemple [Tâches préalables](#api-gateway-invoking-lambda-prerequisites) pour installer le webpack. 
**Note**  
Pour plus d'informations sur *Webpack*, consultez[Regroupez des applications avec Webpack](webpack.md).

1. Exécutez ce qui suit dans la ligne de commande JavaScript pour regrouper les informations de cet exemple dans un fichier appelé `<index.js>` :

   ```
   webpack mylambdafunction.ts --mode development --target node --devtool false --output-library-target umd -o index.js
   ```
**Important**  
Notez que la sortie est nommée`index.js`. Cela est dû au fait que les fonctions Lambda doivent avoir un `index.js` gestionnaire pour fonctionner.

1. Compressez le fichier de sortie groupé`index.js`,, dans un fichier ZIP nommé`mylambdafunction.zip`.

1. `mylambdafunction.zip`Téléchargez-le dans le compartiment Amazon S3 que vous avez créé dans la [Créez les AWS ressources](#api-gateway-invoking-lambda-provision-resources) rubrique de ce didacticiel. 

## Déployez la fonction Lambda.
<a name="api-gateway-invoking-lambda-deploy-function"></a>

À la racine de votre projet, créez un `lambda-function-setup.ts` fichier et collez-y le contenu ci-dessous.

*BUCKET\$1NAME*Remplacez-le par le nom du compartiment Amazon S3 dans lequel vous avez chargé la version ZIP de votre fonction Lambda. Remplacez *ZIP\$1FILE\$1NAME* par le nom la version ZIP de votre fonction Lambda. *ROLE*Remplacez-le par le numéro de ressource Amazon (ARN) du rôle IAM que vous avez créé dans le [Créez les AWS ressources](#api-gateway-invoking-lambda-provision-resources) sujet de ce didacticiel. Remplacez *LAMBDA\$1FUNCTION\$1NAME* par le nom de la fonction Lambda.

```
// Load the required Lambda client and commands.
const {
  CreateFunctionCommand
} = require ( "@aws-sdk/client-lambda" );
const { lambdaClient} = require ( "./libs/lambdaClient.js );

// Set the parameters.
const params = {
  Code: {
    S3Bucket: "BUCKET_NAME", // BUCKET_NAME
    S3Key: "ZIP_FILE_NAME", // ZIP_FILE_NAME
  },
  FunctionName: "LAMBDA_FUNCTION_NAME",
  Handler: "index.handler",
  Role: "IAM_ROLE_ARN", // IAM_ROLE_ARN; e.g., arn:aws:iam::650138640062:role/v3-lambda-tutorial-lambda-role
  Runtime: "nodejs12.x",
  Description:
    "Scans a DynamoDB table of employee details and using Amazon Simple Notification Services (Amazon SNS) to " +
    "send employees an email on each anniversary of their start-date.",
};

const run = async () => {
  try {
    const data = await lambdaClient.send(new CreateFunctionCommand(params));
    console.log("Success", data); // successful response
  } catch (err) {
    console.log("Error", err); // an error occurred
  }
};
run();
```

Entrez ce qui suit sur la ligne de commande pour déployer la fonction Lambda.

```
node lambda-function-setup.ts
```

Cet exemple de code est disponible [ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/cross-services/lambda-api-gateway/src/helper-functions/lambda-function-setup.js).

## Configurer API Gateway pour appeler la fonction Lambda
<a name="api-gateway-invoking-lambda-run"></a>

**Pour créer l'application, procédez comme suit :**

1. [Création de l'API Rest](#api-gateway-invoking-lambda-run-create)

1. [Testez la méthode API Gateway](#api-gateway-invoking-lambda-run-test)

1. [Déployer la méthode API Gateway](#api-gateway-invoking-lambda-run-deploy)

### Création de l'API Rest
<a name="api-gateway-invoking-lambda-run-create"></a>

Vous pouvez utiliser la console API Gateway pour créer un point de terminaison REST pour la fonction Lambda. Une fois cela fait, vous pouvez invoquer la fonction Lambda à l'aide d'un appel RESTful.



1. Connectez-vous à la [console Amazon API Gateway](https://console.aws.amazon.com/apigateway).

1. Sous Rest API, choisissez **Build**.

1. Sélectionnez **Nouvelle API**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/PicNewAPI.png)

1. Spécifiez **Employee** comme nom d'API et fournissez une description.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picEmployeeAPI.png)

1. Sélectionnez **Create API** (Créer une API).

1. Choisissez **Ressources** dans la section **Employé**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picResources.png)

1. Dans le champ du nom, spécifiez **les employés**.

1. Choisissez **Create Resources (Créer des ressources)**.

1. Dans le menu déroulant **Actions**, choisissez **Create Resources**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picCreateResources.png)

1. Choisissez **/employees**, sélectionnez **Create Method** dans les **Actions**, puis sélectionnez **GET** dans le menu déroulant situé sous **/employees**. Choisissez l'icône représentant une coche.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picGet.png)

1. Choisissez **fonction Lambda** et entrez **mylambdafunction comme nom de la fonction** Lambda. Choisissez **Enregistrer**.

### Testez la méthode API Gateway
<a name="api-gateway-invoking-lambda-run-test"></a>

À ce stade du didacticiel, vous pouvez tester la méthode API Gateway qui appelle la fonction **Lambda mylambdafunction**. Pour tester la méthode, choisissez **Test**, comme indiqué dans l'illustration suivante.

![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picTest.png)


Une fois que la fonction Lambda est invoquée, vous pouvez consulter le fichier journal pour voir s'il s'agit d'un message de réussite.

### Déployer la méthode API Gateway
<a name="api-gateway-invoking-lambda-run-deploy"></a>

Une fois le test réussi, vous pouvez déployer la méthode depuis la [console Amazon API Gateway](https://console.aws.amazon.com/apigateway).

1. Choisissez **Get**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picGetDeploy.png)

1. Dans le menu déroulant **Actions**, sélectionnez **Déployer l'API**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picDeployMethod.png)

1. Remplissez le formulaire **Deploy API** et choisissez **Deploy**.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picDeployMethod.png)

1.  Choisissez **Save Changes (Enregistrer les modifications)**.

1.  Choisissez à nouveau **Obtenir** et remarquez que l'URL change. Il s'agit de l'URL d'appel que vous pouvez utiliser pour appeler la fonction Lambda.  
![\[Tableau DynamoDB\]](http://docs.aws.amazon.com/fr_fr/sdk-for-javascript/v3/developer-guide/images/apigateway_example/picURL2.png)

## Supprimer les ressources
<a name="api-gateway-invoking-lambda-destroy"></a>

Félicitations \$1 Vous avez invoqué une fonction Lambda via Amazon API Gateway à l'aide du. AWS SDK pour JavaScript Comme indiqué au début de ce didacticiel, veillez à désactiver toutes les ressources que vous créez pendant que vous suivez ce didacticiel pour vous assurer que vous n'êtes pas débité. Pour ce faire, supprimez la CloudFormation pile que vous avez créée dans la [Créez les AWS ressources](#api-gateway-invoking-lambda-provision-resources) rubrique de ce didacticiel, comme suit :

1. Ouvrez le [CloudFormation dans la console AWS de gestion]( https://console.aws.amazon.com/cloudformation/home).

1. Ouvrez la page **Stacks**, puis sélectionnez la pile.

1. Sélectionnez **Supprimer**.