

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.

# Invocation d’une fonction Lambda à l’aide d’un point de terminaison Amazon API Gateway
<a name="services-apigateway"></a>

Vous pouvez créer une API web avec un point de terminaison HTTP pour votre fonction Lambda à l’aide d’Amazon API Gateway. API Gateway fournit des outils pour créer et documenter des sites Web APIs qui acheminent les requêtes HTTP vers les fonctions Lambda. Vous pouvez sécuriser l’accès à votre API avec des contrôles d’authentification et d’autorisation. APIs Vous pouvez gérer le trafic sur Internet ou n'être accessible qu'au sein de votre VPC.

**Astuce**  
Lambda propose deux méthodes pour appeler votre fonction via un point de terminaison HTTP : API Gateway et fonction Lambda. URLs Si vous ne savez pas quelle est la meilleure méthode pour votre cas d’utilisation, consultez [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](apig-http-invoke-decision.md).

Les ressources de votre API définissent une ou plusieurs méthodes, telles que GET ou POST. Les méthodes ont une intégration qui achemine les requêtes vers une fonction Lambda ou un autre type d’intégration. Vous pouvez définir chaque ressource et méthode individuellement, ou utiliser des types de ressource et de méthode spéciaux pour correspondre à toutes les demandes adaptées à un modèle. Une [ressource proxy](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) attrape tous les chemins sous une ressource. La méthode `ANY` attrape toutes les méthodes HTTP.

**Topics**
+ [Choix d’un type d’API](#services-apigateway-apitypes)
+ [Ajout d’un point de terminaison public à votre fonction Lambda](#apigateway-add)
+ [Intégration de proxy](#apigateway-proxy)
+ [Format des événements](#apigateway-example-event)
+ [Format de la réponse](#apigateway-types-transforms)
+ [Permissions](#apigateway-permissions)
+ [Exemple d’application](#services-apigateway-samples)
+ [Le gestionnaire d'événements de Powertools pour Lambda AWS](#services-apigateway-powertools)
+ [Didacticiel : Utiliser Lambda avec Amazon API Gateway](services-apigateway-tutorial.md)
+ [Gestion des erreurs Lambda avec une API Gateway](services-apigateway-errors.md)
+ [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](apig-http-invoke-decision.md)

## Choix d’un type d’API
<a name="services-apigateway-apitypes"></a>

API Gateway prend en charge trois types de fonctions APIs qui invoquent des fonctions Lambda :
+ [API HTTP : API](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html) légère à faible latence RESTful .
+ [API REST : API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html) personnalisable et riche en fonctionnalités RESTful .
+ [WebSocket API : API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html) Web qui maintient des connexions persistantes avec les clients pour une communication en duplex intégral.

HTTP APIs et REST APIs traitent RESTful APIs les requêtes HTTP et renvoient des réponses. APIs Les protocoles HTTP sont plus récents et sont créés avec l'API API Gateway version 2. Les fonctionnalités suivantes sont nouvelles pour le protocole HTTP APIs :

**Fonctionnalités de l’API HTTP**
+ **Déploiements automatiques** – Lorsque vous modifiez des routages ou des intégrations, les modifications se déploient automatiquement sur des étapes pour lesquelles le déploiement automatique est activé.
+ **Étape par défaut** – Vous pouvez créer une étape par défaut (`$default`) pour servir les demandes au chemin d’accès racine de l’URL de votre API. Pour les étapes nommées, vous devez inclure le nom de l’étape au début du chemin d’accès.
+ **Configuration CORS** – Vous pouvez configurer votre API pour ajouter des en-têtes CORS aux réponses sortantes, au lieu de les ajouter manuellement dans votre code de fonction.

 APIs Les REST sont RESTful APIs les classiques pris en charge par API Gateway depuis son lancement. REST propose APIs actuellement davantage de fonctionnalités de personnalisation, d'intégration et de gestion.

**Fonctionnalités de l’API REST**
+ **Types d'intégration** : REST APIs prend en charge les intégrations Lambda personnalisées. Avec une intégration personnalisée, vous pouvez envoyer uniquement le corps de la requête à la fonction, ou appliquer un modèle de transformation au corps de requête avant de l’envoyer à la fonction.
+ **Contrôle d'accès** : REST APIs prend en charge davantage d'options d'authentification et d'autorisation.
+ **Surveillance et suivi** : REST APIs prend en charge le AWS X-Ray suivi et des options de journalisation supplémentaires.

Pour une comparaison détaillée, consultez [Choisir entre HTTP APIs et REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html) dans le *guide du développeur d'API Gateway*.

WebSocket APIs utilise également l'API API Gateway version 2 et prend en charge un ensemble de fonctionnalités similaires. Utilisez une WebSocket API pour les applications qui bénéficient d'une connexion permanente entre le client et l'API. WebSocket APIs fournissent une communication en duplex intégral, ce qui signifie que le client et l'API peuvent envoyer des messages en continu sans attendre de réponse.

Le protocole HTTP APIs prend en charge un format d'événement simplifié (version 2.0). Pour un exemple d'événement provenant d'une API HTTP, voir [Créer des intégrations de AWS Lambda proxy pour HTTP APIs dans API Gateway](https://docs.aws.amazon.com//apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).

Pour plus d'informations, consultez la section [Création d'intégrations de AWS Lambda proxy pour HTTP APIs dans API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).

## Ajout d’un point de terminaison public à votre fonction Lambda
<a name="apigateway-add"></a>

**Ajouter un point de terminaison public à votre fonction Lambda**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez une fonction.

1. Sous **Function overview (Vue d’ensemble de la fonction)**, choisissez **Add trigger (Ajouter un déclencheur)**.

1. Sélectionnez **API Gateway**.

1. Choisissez **Créer une API** ou **Utiliser une API existante**.

   1. **Nouvelle API :** pour **Type d’API**, choisissez **API HTTP**. Pour de plus amples informations, veuillez consulter [Choix d’un type d’API](#services-apigateway-apitypes).

   1. **API existante :** Sélectionnez l’API dans la liste déroulante ou entrez l’ID de l’API (par exemple, r3pmxmplak).

1. Pour **Sécurité**, choisissez **Ouvrir**.

1. Choisissez **Ajouter**.

## Intégration de proxy
<a name="apigateway-proxy"></a>

API Gateway comprend APIs des étapes, des ressources, des méthodes et des intégrations. L’étape et la ressource déterminent le chemin du point de terminaison :

**Format du chemin d’accès de l’API**
+ `/prod/` – Etape `prod` et ressource racine.
+ `/prod/user` – Etape `prod` et ressource `user`.
+ `/dev/{proxy+}` – Routage quelconque à l’étape `dev`.
+ `/`— (HTTP APIs) Le stage par défaut et la ressource racine.

Une intégration Lambda mappe une combinaison de chemin d’accès et de méthode HTTP à une fonction Lambda. Vous pouvez configurer API Gateway pour transmettre le corps de la demande HTTP tel quel (intégration personnalisée) ou pour encapsuler le corps de requête dans un document qui inclut toutes les informations de la demande, y compris les en-têtes, la ressource, le chemin et la méthode.

Pour plus d’informations, consultez [Lambda proxy integrations in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html).

## Format des événements
<a name="apigateway-example-event"></a>

Amazon API Gateway appelle votre fonction [de manière synchrone](invocation-sync.md) avec un événement contenant une représentation JSON de la requête HTTP. Pour une intégration personnalisée, l’événement est le corps de la requête. Pour une intégration par proxy, l’événement a une structure définie. Pour obtenir un exemple d’événement de proxy à partir d’une API REST API Gateway, consultez la rubrique [Input format of a Lambda function for proxy integration](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format) du *guide du développeur API Gateway*.

## Format de la réponse
<a name="apigateway-types-transforms"></a>

API Gateway attend une réponse de votre fonction et relaie le résultat à l’appelant. Pour une intégration personnalisée, vous définissez une réponse d’intégration et une réponse de méthode pour convertir la sortie de la fonction en réponse HTTP. Pour une intégration par proxy, la fonction doit répondre avec une représentation de la réponse dans un format spécifique.

L’exemple suivant montre un objet de réponse d’une fonction Node.js. L’objet de réponse représente une réponse HTTP réussie qui contient un document JSON.

**Example index.js : objet de réponse d’intégration de proxy (Node.js)**  

```
var response = {
      "statusCode": 200,
      "headers": {
        "Content-Type": "application/json"
      },
      "isBase64Encoded": false,
      "multiValueHeaders": { 
        "X-Custom-Header": ["My value", "My other value"],
      },
      "body": "{\n  \"TotalCodeSize\": 104330022,\n  \"FunctionCount\": 26\n}"
    }
```

L’environnement d’exécution Lambda sérialise l’objet réponse dans JSON et l’envoie à l’API. L’API analyse la réponse et l’utilise pour créer une réponse HTTP, qu’elle envoie ensuite au client qui a fait la demande d’origine.

**Example Réponse HTTP**  

```
< HTTP/1.1 200 OK
  < Content-Type: application/json
  < Content-Length: 55
  < Connection: keep-alive
  < x-amzn-RequestId: 32998fea-xmpl-4268-8c72-16138d629356
  < X-Custom-Header: My value
  < X-Custom-Header: My other value
  < X-Amzn-Trace-Id: Root=1-5e6aa925-ccecxmplbae116148e52f036
  <
  {
    "TotalCodeSize": 104330022,
    "FunctionCount": 26
  }
```

## Permissions
<a name="apigateway-permissions"></a>

Amazon API Gateway obtient l’autorisation d’appeler votre fonction à partir de la [politique basée sur une ressource](access-control-resource-based.md) de la fonction. Vous pouvez accorder l’autorisation d’appel à toute une API ou accorder un accès limité à une étape, à une ressource ou à une méthode.

Lorsque vous ajoutez une API à votre fonction à l’aide de la console Lambda, de la console API Gateway ou d’un modèle AWS SAM , la politique basée sur une ressource de la fonction est mise à jour automatiquement. Voici un exemple de politique de fonction.

**Example stratégie de fonction**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "default",
  "Statement": [
    {
      "Sid": "nodejs-apig-functiongetEndpointPermissionProd-BWDBXMPLXE2F",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-2:111122223333:function:nodejs-apig-function-1G3MXMPLXVXYI",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:execute-api:us-east-2:111122223333:ktyvxmpls1/*/GET/"
        }
      }
    }
  ]
}
```

Vous pouvez gérer manuellement les autorisations de politique de fonction à l’aide des opérations d’API suivantes :
+ [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html)
+ [RemovePermission](https://docs.aws.amazon.com/lambda/latest/api/API_RemovePermission.html)
+ [GetPolicy](https://docs.aws.amazon.com/lambda/latest/api/API_GetPolicy.html)

Pour accorder l’autorisation d’invocation à une API existante, utilisez la commande `add-permission`. Exemple :

```
aws lambda add-permission \
  --function-name my-function \
  --statement-id apigateway-get --action lambda:InvokeFunction \
  --principal apigateway.amazonaws.com \
  --source-arn "arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET/"
```

Vous devriez voir la sortie suivante :

```
{
    "Statement": "{\"Sid\":\"apigateway-test-2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET\"}}}"
}
```

**Note**  
Si votre fonction et votre API sont différentes Régions AWS, l'identifiant de région dans l'ARN source doit correspondre à la région de la fonction, et non à la région de l'API. Quand API Gateway appelle une fonction, elle utilise un ARN de ressource basé sur l’ARN de l’API, mais modifié pour correspondre à la Région de la fonction.

L’ARN source dans cet exemple accorde l’autorisation à une intégration sur la méthode GET de la ressource racine au cours de l’étape par défaut d’une API, avec l’ID `mnh1xmpli7`. Vous pouvez utiliser un astérisque dans l’ARN source pour accorder des autorisations à plusieurs étapes, méthodes ou ressources.

**Modèles de ressources**
+ `mnh1xmpli7/*/GET/*` – Méthode GET sur toutes les ressources à toutes les étapes.
+ `mnh1xmpli7/prod/ANY/user` – Méthode ANY sur la ressource `user` à l’étape `prod`.
+ `mnh1xmpli7/*/*/*` – Toute méthode sur toutes les ressources à toutes les étapes.

Pour de plus amples informations sur l’affichage de la politique et la suppression des instructions, veuillez consulter [Voir les politiques IAM basées sur les ressources dans Lambda](access-control-resource-based.md).

## Exemple d’application
<a name="services-apigateway-samples"></a>

L'exemple d'application [API Gateway with Node.js](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/nodejs-apig) inclut une fonction avec un AWS SAM modèle qui crée une API REST dont le AWS X-Ray suivi est activé. Il inclut également des scripts pour le déploiement, l’invocation de la fonction, le test de l’API et le nettoyage.

## Le gestionnaire d'événements de Powertools pour Lambda AWS
<a name="services-apigateway-powertools"></a>

Le gestionnaire d'événements du kit d'outils Powertools for AWS Lambda fournit le routage, le middleware, la configuration CORS, la génération de spécifications OpenAPI, la validation des demandes, la gestion des erreurs et d'autres fonctionnalités utiles lors de l'écriture de fonctions Lambda invoquées par un point de terminaison API Gateway (HTTP ou REST). L'utilitaire de gestion d'événements est disponible pour Python et TypeScript/JavaScript. Pour plus d'informations, consultez l'[API REST du gestionnaire d'événements](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/api_gateway/) dans la documentation de *Powertools pour AWS Lambda (Python)* [et l'API HTTP du gestionnaire d'événements](https://docs.aws.amazon.com/powertools/typescript/latest/features/event-handler/http/) dans la documentation de *Powertools pour AWS * Lambda (). TypeScript

### Python
<a name="services-apigateway-powertools-python"></a>

```
from aws_lambda_powertools import Logger
from aws_lambda_powertools.event_handler import APIGatewayRestResolver
from aws_lambda_powertools.logging import correlation_paths
from aws_lambda_powertools.utilities.typing.lambda_context import LambdaContext

app = APIGatewayRestResolver()
logger = Logger()

@app.get("/healthz")
def ping():
    return {"message": "health status ok"}

@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST)  
def lambda_handler(event: dict, context: LambdaContext) -> dict:
    return app.resolve(event, context)
```

### TypeScript
<a name="services-apigateway-powertools-typescript"></a>

```
import { Router } from '@aws-lambda-powertools/event-handler/experimental-rest';
import { Logger } from '@aws-lambda-powertools/logger';
import {
  correlationPaths,
  search,
} from '@aws-lambda-powertools/logger/correlationId';
import type { Context } from 'aws-lambda/handler';

const logger = new Logger({
  correlationIdSearchFn: search,
});

const app = new Router({ logger });

app.get("/healthz", async () => {
  return { message: "health status ok" };
});

export const handler = async (event: unknown, context: Context) => {
  // You can continue using other utilities just as before
  logger.addContext(context);
  logger.setCorrelationId(event, correlationPaths.API_GATEWAY_REST);
  return app.resolve(event, context);
};
```

# Didacticiel : Utiliser Lambda avec Amazon API Gateway
<a name="services-apigateway-tutorial"></a>

Dans ce tutoriel, vous créez une API REST par laquelle vous invoquez une fonction Lambda à l’aide d’une demande HTTP. Votre fonction Lambda effectuera des opérations de création, lecture, mise à jour et suppression (CRUD) sur une table DynamoDB. Cette fonction est fournie ici à titre de démonstration, mais vous apprendrez à configurer une API REST API Gateway qui peut invoquer n’importe quelle fonction Lambda.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/APIG_tut_resources.png)


L’utilisation d’API Gateway fournit aux utilisateurs un point de terminaison HTTP sécurisé pour invoquer votre fonction Lambda et peut aider à gérer de gros volumes d’appels à votre fonction en limitant le trafic et en validant et autorisant automatiquement les appels d’API. API Gateway fournit également des contrôles de sécurité flexibles à l'aide de Gestion des identités et des accès AWS (IAM) et d'Amazon Cognito. Ceci est utile pour les cas d’utilisation où une autorisation préalable est requise pour les appels à votre application.

**Astuce**  
Lambda propose deux méthodes pour appeler votre fonction via un point de terminaison HTTP : API Gateway et fonction Lambda. URLs Si vous ne savez pas quelle est la meilleure méthode pour votre cas d’utilisation, consultez [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](apig-http-invoke-decision.md).

Pour réaliser ce tutoriel, vous passerez par les étapes suivantes :

1. Créer et configurer une fonction Lambda en Python ou Node.js pour effectuer des opérations sur une table DynamoDB.

1. Créer une API REST dans API Gateway pour se connecter à votre fonction Lambda.

1. Créer une table DynamoDB et la tester avec votre fonction Lambda dans la console.

1. Déployer votre API et tester la configuration complète en utilisant curl dans un terminal.

En suivant ces étapes, vous apprendrez à utiliser API Gateway pour créer un point de terminaison HTTP capable d’invoquer en toute sécurité une fonction Lambda à n’importe quelle échelle. Vous apprendrez également à déployer votre API, et à la tester dans la console et en envoyant une demande HTTP à l’aide d’un terminal.

## Création d’une stratégie d’autorisations
<a name="services-apigateway-tutorial-policy"></a>

Avant de créer un [rôle d'exécution](lambda-intro-execution-role.md) pour votre fonction Lambda, vous devez d'abord créer une politique d'autorisation pour autoriser votre fonction à accéder aux ressources requises AWS . Pour ce didacticiel, la politique permet à Lambda d'effectuer des opérations CRUD sur une table DynamoDB et d'écrire sur Amazon Logs. CloudWatch 

**Pour créer la politique**

1. Ouvrez la [page stratégies](https://console.aws.amazon.com/iam/home#/policies) de la console IAM.

1. Choisissez **Créer une stratégie**.

1. Choisissez l’onglet **JSON**, puis collez la stratégie personnalisée suivante dans l’éditeur JSON.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "Stmt1428341300017",
         "Action": [
           "dynamodb:DeleteItem",
           "dynamodb:GetItem",
           "dynamodb:PutItem",
           "dynamodb:Query",
           "dynamodb:Scan",
           "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": "*"
       },
       {
         "Sid": "",
         "Resource": "*",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents"
         ],
         "Effect": "Allow"
       }
     ]
   }
   ```

------

1. Choisissez **Suivant : Balises**.

1. Choisissez **Suivant : Vérification**.

1. Sous **Examiner une stratégie**, pour le **Nom** de la stratégie, saisissez **lambda-apigateway-policy**.

1. Choisissez **Créer une stratégie**.

## Créer un rôle d’exécution
<a name="services-apigateway-tutorial-role"></a>

Un [rôle d'exécution](lambda-intro-execution-role.md) est un rôle Gestion des identités et des accès AWS (IAM) qui accorde à une fonction Lambda l'autorisation d' Services AWS accès et de ressources. Pour permettre à votre fonction d’effectuer des opérations sur une table DynamoDB, vous attachez la politique d’autorisation que vous avez créée à l’étape précédente.

**Pour créer un rôle d’exécution et attacher votre politique d’autorisations personnalisée**

1. Ouvrez la [page Rôles](https://console.aws.amazon.com/iam/home#/roles) de la console IAM.

1. Sélectionnez **Créer un rôle**.

1. Pour le type d’entité de confiance, choisissez **Service AWS **, puis pour le cas d’utilisation, choisissez **Lambda**.

1. Choisissez **Suivant**.

1. Dans la zone de recherche de stratégie, entrez **lambda-apigateway-policy**.

1. Dans les résultats de la recherche, sélectionnez la stratégie que vous avez créée (`lambda-apigateway-policy`), puis choisissez **Suivant**.

1. Sous **Role details** (Détails du rôle), pour **Role name** (Nom du rôle), saisissez **lambda-apigateway-role**, puis sélectionnez **Create role** (Créer un rôle).

## Créer la fonction Lambda
<a name="services-apigateway-tutorial-function"></a>

1. Ouvrez la [page Fonctions](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda et choisissez **Créer une fonction**.

1. Choisissez **Créer à partir de zéro**.

1. Sous **Nom de la fonction**, saisissez `LambdaFunctionOverHttps`.

1. Pour **Exécution**, choisissez le dernier environnement d’exécution Node.js ou Python.

1. Sous **Permissions** (Autorisations), développez **Change default execution role** (Modifier le rôle d’exécution par défaut).

1. Sélectionnez **Utiliser un rôle existant**, sélectionnez le rôle **lambda-apigateway-role** que vous avez créé précédemment.

1. Choisissez **Créer une fonction**.

1. Dans le volet **Source du code**, remplacez le code par défaut par le code Node.js ou Python suivant.

------
#### [ Node.js ]

   Le `region` paramètre doit correspondre à l' Région AWS endroit où vous déployez la fonction et [créez la table DynamoDB](#services-apigateway-tutorial-table).

**Example index.mjs**  

   ```
   import { DynamoDBDocumentClient, PutCommand, GetCommand, 
            UpdateCommand, DeleteCommand} from "@aws-sdk/lib-dynamodb";
   import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
   
   const ddbClient = new DynamoDBClient({ region: "us-east-2" });
   const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);
   
   // Define the name of the DDB table to perform the CRUD operations on
   const tablename = "lambda-apigateway";
   
   /**
    * Provide an event that contains the following keys:
    *
    *   - operation: one of 'create,' 'read,' 'update,' 'delete,' or 'echo'
    *   - payload: a JSON object containing the parameters for the table item
    *     to perform the operation on
    */
   export const handler = async (event, context) => {
      
        const operation = event.operation;
      
        if (operation == 'echo'){
             return(event.payload);
        }
        
       else { 
           event.payload.TableName = tablename;
           let response;
           
           switch (operation) {
             case 'create':
                  response = await ddbDocClient.send(new PutCommand(event.payload));
                  break;
             case 'read':
                  response = await ddbDocClient.send(new GetCommand(event.payload));
                  break;
             case 'update':
                  response = ddbDocClient.send(new UpdateCommand(event.payload));
                  break;
             case 'delete':
                  response = ddbDocClient.send(new DeleteCommand(event.payload));
                  break;
             default:
               response = 'Unknown operation: ${operation}';
             }
           console.log(response);
           return response;
       }
   };
   ```

------
#### [ Python ]

**Example lambda\$1function.py**  

   ```
   import boto3
   
   # Define the DynamoDB table that Lambda will connect to
   table_name = "lambda-apigateway"
   
   # Create the DynamoDB resource
   dynamo = boto3.resource('dynamodb').Table(table_name)
   
   # Define some functions to perform the CRUD operations
   def create(payload):
       return dynamo.put_item(Item=payload['Item'])
   
   def read(payload):
       return dynamo.get_item(Key=payload['Key'])
   
   def update(payload):
       return dynamo.update_item(**{k: payload[k] for k in ['Key', 'UpdateExpression', 
       'ExpressionAttributeNames', 'ExpressionAttributeValues'] if k in payload})
   
   def delete(payload):
       return dynamo.delete_item(Key=payload['Key'])
   
   def echo(payload):
       return payload
   
   operations = {
       'create': create,
       'read': read,
       'update': update,
       'delete': delete,
       'echo': echo,
   }
   
   def lambda_handler(event, context):
       '''Provide an event that contains the following keys:
         - operation: one of the operations in the operations dict below
         - payload: a JSON object containing parameters to pass to the 
           operation being performed
       '''
       
       operation = event['operation']
       payload = event['payload']
       
       if operation in operations:
           return operations[operation](payload)
           
       else:
           raise ValueError(f'Unrecognized operation "{operation}"')
   ```

------
**Note**  
Dans cet exemple, le nom de la table DynamoDB est défini comme une variable dans le code de votre fonction. Dans une application réelle, passer ce paramètre comme une variable d’environnement et éviter de coder en dur le nom de la table constitue une bonne pratique. Pour plus d'informations, voir [Utilisation de variables d' AWS Lambda environnement](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html).

1. Dans la section **DÉPLOYER**, choisissez **Déployer** pour mettre à jour le code de votre fonction :  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

## Tester la fonction
<a name="services-apigateway-tutorial-test-function"></a>

Avant d’intégrer votre fonction à API Gateway, confirmez que vous avez déployé la fonction avec succès. Utilisez la console Lambda pour envoyer un événement de test à votre fonction.

1. Dans la page de votre fonction de la console Lambda, choisissez l’onglet **Tester**.  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/test-tab.png)

1. Défilez jusqu’à la section **JSON d’événement** et remplacez l’événement par défaut par ce qui suit. Cet événement correspond à la structure attendue par la fonction Lambda.

   ```
   {
       "operation": "echo",
       "payload": {
           "somekey1": "somevalue1",
           "somekey2": "somevalue2"
       }
   }
   ```

1. Sélectionnez **Tester)**.

1. Sous **Exécution de la fonction : succès**, développez **Détails**. Vous devriez voir la réponse suivante :

   ```
   {
     "somekey1": "somevalue1",
     "somekey2": "somevalue2"
   }
   ```

## Créer une API REST avec API Gateway
<a name="services-apigateway-tutorial-api"></a>

Dans cette étape, vous créez l’API REST API Gateway que vous utiliserez pour invoquer votre fonction Lambda.

**Pour créer l’API**

1. Ouvrez la [console API Gateway](https://console.aws.amazon.com/apigateway).

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

1. Dans la boîte de dialogue **API REST**, choisissez **Créer**.

1. Sous **Détails de l’API**, laissez **Nouvelle API** sélectionnée et pour **Nom de l’API**, saisissez **DynamoDBOperations**.

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

## Créez une ressource sur votre API REST
<a name="services-apigateway-tutorial-resource"></a>

Pour ajouter une méthode HTTP à votre API, vous devez d’abord créer une ressource pour que cette méthode puisse fonctionner. Ici, vous créez la ressource pour gérer votre table DynamoDB.

**Pour créer la ressource**

1. Dans la [console API Gateway](https://console.aws.amazon.com/apigateway), sur la page **Ressources** de votre API, choisissez **Créer une ressource**.

1. Dans **Détails de la ressource**, pour **Nom de la ressource** saisissez **DynamoDBManager**.

1. Choisissez **Create Resource**.

## Création d’une méthode HTTP POST
<a name="services-apigateway-tutorial-method"></a>

Dans cette étape, vous créez une méthode (`POST`) pour votre ressource `DynamoDBManager`. Vous liez cette méthode `POST` à votre fonction Lambda de sorte que lorsque la méthode reçoit une demande HTTP, API Gateway invoque votre fonction Lambda.

**Note**  
 Dans le cadre de ce tutoriel, une méthode HTTP (`POST`) est utilisée pour invoquer une seule fonction Lambda qui exécute toutes les opérations sur votre table DynamoDB. Dans une application réelle, l’utilisation d’une fonction Lambda et d’une méthode HTTP différentes pour chaque opération constitue une bonne pratique. Pour plus d’informations, consultez [Le monolithe Lambda](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/monolith) dans Serverless Land. 

**Pour créer la méthode POST**

1. Sur la page **Ressources** de votre API, assurez-vous que la ressource `/DynamoDBManager` est surlignée. Ensuite, dans le volet **Méthodes**, choisissez **Créer une méthode**.

1. Pour **Type de méthode**, sélectionnez **POST**.

1. Pour **Type d’intégration**, laissez la **Fonction Lambda** sélectionnée.

1. Pour la **Fonction Lambda**, choisissez l’Amazon Resource Name (ARN) pour votre fonction (`LambdaFunctionOverHttps`).

1. Choisissez **Créer une méthode**.

## Créez une table DynamoDB
<a name="services-apigateway-tutorial-table"></a>

Créez une table DynamoDB vide sur laquelle votre fonction Lambda effectuera des opérations CRUD.

**Créer le tableau DynamoDB**

1. Ouvrez la [page Tables (Tables)](https://console.aws.amazon.com/dynamodbv2#tables) de la console DynamoDB.

1. Choisissez **Créer un tableau**.

1. Sous **Détails du tableau**, procédez comme suit :

   1. Sous **Nom du tableau**, saisissez **lambda-apigateway**.

   1. Pour **Clé de partition**, saisissez **id**, et conservez le type de données défini comme **Chaîne**.

1. Sous **Table settings** (Paramètres de la table), conservez les **Default settings** (Paramètres par défaut).

1. Choisissez **Créer un tableau**.

## Test de l’intégration d’API Gateway, Lambda et DynamoDB
<a name="services-apigateway-tutorial-test-setup"></a>

Vous êtes maintenant prêt à tester l’intégration de votre méthode API Gateway avec votre fonction Lambda et votre table DynamoDB. À l’aide de la console API Gateway, vous envoyez des demandes directement à votre méthode `POST` en utilisant la fonction de test de la console. Dans cette étape, vous utilisez d’abord une opération `create` pour ajouter un nouvel élément à votre table DynamoDB, puis vous utilisez une opération `update` pour modifier l’élément.

**Test 1 : Pour créer un nouvel élément dans votre table DynamoDB**

1. Dans la [console API Gateway](https://console.aws.amazon.com/apigateway), choisissez votre API (`DynamoDBOperations`).

1. Choisissez la méthode **POST** sous la ressource `DynamoDBManager`.

1. Choisissez l’onglet **Test**. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.

1. Sous **Méthode de test**, laissez les **Chaînes de requête** et les **En-têtes** vides. Pour **Corps de requête**, collez l’élément JSON suivant :

   ```
   {
     "operation": "create",
     "payload": {
       "Item": {
         "id": "1234ABCD",
         "number": 5
       }
     }
   }
   ```

1. Sélectionnez **Tester)**.

   Les résultats qui s’affichent à la fin du test doivent indiquer le statut `200`. Ce code d’état indique que l’opération `create` a réussi.

    Pour confirmer, vérifiez que votre table DynamoDB contient maintenant le nouvel élément.

1. Ouvrez la [page Tables](https://console.aws.amazon.com/dynamodbv2#tables) de la console DynamoDB et choisissez la table `lambda-apigateway`.

1. Choisissez **Explore table items** (Explorer les éléments de la table). Dans le volet **Items returned** (Éléments retournés), vous devriez voir un élément avec l’**id** `1234ABCD` et le **numéro** `5`. Exemple :  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/items-returned.png)

**Test 2 : Pour mettre à jour l’élément dans votre table DynamoDB**

1. Dans la [Console API Gateway](https://console.aws.amazon.com/apigateway), revenez à l’onglet **Test** votre méthode POST.

1. Sous **Méthode de test**, laissez les **Chaînes de requête** et les **En-têtes** vides. Pour **Corps de requête**, collez l’élément JSON suivant :

   ```
   {
       "operation": "update",
       "payload": {
           "Key": {
               "id": "1234ABCD"
           },
           "UpdateExpression": "SET #num = :newNum",
           "ExpressionAttributeNames": {
               "#num": "number"
           },
           "ExpressionAttributeValues": {
               ":newNum": 10
           }
       }
   }
   ```

1. Sélectionnez **Tester)**.

   Les résultats qui s’affichent à la fin du test devraient montrer l’état `200`. Ce code d’état indique que l’opération `update` a réussi.

    Pour confirmer, vérifiez que l’élément dans votre table DynamoDB a été modifié.

1. Ouvrez la [page Tables](https://console.aws.amazon.com/dynamodbv2#tables) de la console DynamoDB et choisissez la table `lambda-apigateway`.

1. Choisissez **Explore table items** (Explorer les éléments de la table). Dans le volet **Items returned** (Éléments retournés), vous devriez voir un élément avec l’**id** `1234ABCD` et le **numéro** `10`.  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/items-returned-2.png)

## Déploiement de l’API
<a name="services-apigateway-tutorial-deploy-api"></a>

Pour qu’un client puisse appeler l’API, vous devez créer un déploiement et une étape associée. Une étape représente un instantané de votre API, y compris ses méthodes et intégrations.

**Pour déployer l’API**

1. Ouvrez la **APIs**page de la [console API Gateway](https://console.aws.amazon.com/apigateway) et choisissez l'`DynamoDBOperations`API.

1. Sur la page **Ressources** de votre API, choisissez **Deploy API** (Déployer l’API).

1. Pour **Stage** (Étape), choisissez **\$1New stage\$1** (Nouvelle étape), puis pour **Stage name** (Nom de l’étape), saisissez **test**.

1. Choisissez **Déployer**.

1. Dans le volet **Stage details** (Détails de l’étape), copiez **Invoke URL** (URL d’invocation). Vous l’utiliserez à l’étape suivante pour invoquer votre fonction à l’aide d’une demande HTTP.

## Utilisez curl pour invoquer votre fonction à l’aide de demandes HTTP
<a name="services-apigateway-tutorial-invoke-function"></a>

Vous pouvez maintenant invoquer votre fonction Lambda en émettant une demande HTTP vers votre API. Dans cette étape, vous allez créer un nouvel élément dans votre table DynamoDB, puis effectuer des oéprations de lecture, de mise à jour et de suppression sur cet élément.

**Pour créer un élément dans votre table DynamoDB à l’aide de curl**

1. Ouvrez un terminal ou une invite de commande sur votre machine locale et exécutez la commande `curl` suivante en utilisant l’URL d’invocation que vous avez copiée à l’étape précédente. Cette commande utilise les options suivantes :
   + `-H` : ajoute un en-tête personnalisé à la demande. Ici, le paramètre spécifie le type de contenu comme étant du JSON.
   + `-d` : envoie des données dans le corps de la demande. Cette option utilise une méthode HTTP POST par défaut.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "create", "payload": {"Item": {"id": "5678EFGH", "number": 15}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"create\", \"payload\": {\"Item\": {\"id\": \"5678EFGH\", \"number\": 15}}}'
   ```

------

   Si l’opération a réussi, vous devriez voir une réponse renvoyée avec un code d’état HTTP de 200.

1. Vous pouvez également utiliser la console DynamoDB pour vérifier que le nouvel élément figure dans votre table en procédant comme suit :

   1. Ouvrez la [page Tables](https://console.aws.amazon.com/dynamodbv2#tables) de la console DynamoDB et choisissez la table `lambda-apigateway`.

   1. Sélectionnez **Explore table items** (Explorer les éléments de la table). Dans le volet **Items returned** (Éléments retournés), vous devriez voir un élément avec l’**id** `5678EFGH` et le **numéro** `15`.

**Pour lire l’élément dans votre table DynamoDB à l’aide de curl**
+ Dans votre terminal ou invite de commande, exécutez la commande `curl` suivante pour lire la valeur l’élément que vous venez de créer. Utilisez votre propre URL invoquée.

------
#### [ Linux/macOS ]

  ```
  curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
  -H "Content-Type: application/json" \
  -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
  ```

------
#### [ PowerShell ]

  ```
  curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"read\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
  ```

------

  Vous devriez obtenir un résultat semblable à l’un des suivants selon que vous avez choisi le code de fonction Node.js ou Python :

------
#### [ Node.js ]

  ```
  {"$metadata":{"httpStatusCode":200,"requestId":"7BP3G5Q0C0O1E50FBQI9NS099JVV4KQNSO5AEMVJF66Q9ASUAAJG",
  "attempts":1,"totalRetryDelay":0},"Item":{"id":"5678EFGH","number":15}}
  ```

------
#### [ Python ]

  ```
  {"Item":{"id":"5678EFGH","number":15},"ResponseMetadata":{"RequestId":"QNDJICE52E86B82VETR6RKBE5BVV4KQNSO5AEMVJF66Q9ASUAAJG",
  "HTTPStatusCode":200,"HTTPHeaders":{"server":"Server","date":"Wed, 31 Jul 2024 00:37:01 GMT","content-type":"application/x-amz-json-1.0",
  "content-length":"52","connection":"keep-alive","x-amzn-requestid":"QNDJICE52E86B82VETR6RKBE5BVV4KQNSO5AEMVJF66Q9ASUAAJG","x-amz-crc32":"2589610852"},
  "RetryAttempts":0}}
  ```

------

**Pour mettre à jour l’élément dans votre table DynamoDB à l’aide de curl**

1. Dans votre terminal ou invite de commande, exécutez la commande `curl` suivante pour mettre à jour l’élément que vous venez de créer en modifiant la valeur `number`. Utilisez votre propre URL invoquée.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "update", "payload": {"Key": {"id": "5678EFGH"}, "UpdateExpression": "SET #num = :new_value", "ExpressionAttributeNames": {"#num": "number"}, "ExpressionAttributeValues": {":new_value": 42}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"update\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}, \"UpdateExpression\": \"SET #num = :new_value\", \"ExpressionAttributeNames\": {\"#num\": \"number\"}, \"ExpressionAttributeValues\": {\":new_value\": 42}}}'
   ```

------

1. Pour confirmer que la valeur de `number` de l’élément a été mise à jour, exécutez une autre commande de lecture :

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"read\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
   ```

------

**Pour supprimer l’élément dans votre table DynamoDB à l’aide de curl**

1. Dans votre terminal ou invite de commande, exécutez la commande `curl` suivante pour supprimer l’élément que vous venez de créer. Utilisez votre propre URL invoquée.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "delete", "payload": {"Key": {"id": "5678EFGH"}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"delete\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
   ```

------

1. Confirmez que l’opération de suppression a réussi. Dans le volet **Items returned** (Éléments retournés) de la page **Explore items** (Explorer les éléments) de la console DynamoDB, vérifiez que l’élément avec l’**id** `5678EFGH` n’est plus dans la table.

## Nettoyer vos ressources (facultatif)
<a name="cleanup"></a>

Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles pour votre Compte AWS.

**Pour supprimer la fonction Lambda**

1. Ouvrez la [page Functions (Fonctions)](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

1. Sélectionnez la fonction que vous avez créée.

1. Sélectionnez **Actions**, **Supprimer**.

1. Saisissez **confirm** dans la zone de saisie de texte et choisissez **Delete** (Supprimer).

**Pour supprimer le rôle d’exécution**

1. Ouvrez la [page Roles (Rôles)](https://console.aws.amazon.com/iam/home#/roles) de la console IAM.

1. Sélectionnez le rôle d’exécution que vous avez créé.

1. Sélectionnez **Delete (Supprimer)**.

1. Saisissez le nom du rôle dans le champ de saisie de texte et choisissez **Delete** (Supprimer).

**Pour supprimer l’API**

1. Ouvrez la [APIs page](https://console.aws.amazon.com/apigateway/main/apis) de la console API Gateway.

1. Sélectionnez l’API que vous avez créée.

1. Sélectionnez **Actions**, **Supprimer**.

1. Sélectionnez **Supprimer**.

**Pour supprimer la table DynamoDB**

1. Ouvrez la [page Tables (Tables)](https://console.aws.amazon.com//dynamodb/home#tables:) de la console DynamoDB.

1. Sélectionnez la table que vous avez créée.

1. Choisissez **Supprimer**.

1. Saisissez **delete** dans la zone de texte.

1. Choisissez **Supprimer la table**.

# Gestion des erreurs Lambda avec une API Gateway
<a name="services-apigateway-errors"></a>

API Gateway traite toutes les erreurs d’invocation et de fonction comme des erreurs internes. Si l’API Lambda rejette la demande d’invocation, API Gateway renvoie un code d’erreur 500. Si la fonction s’exécute mais renvoie une erreur ou une réponse dans un format inadéquat, API Gateway renvoie un code d’erreur 502. Dans les deux cas, le corps de la réponse d’API Gateway est `{"message": "Internal server error"}`.

**Note**  
API Gateway ne fait aucune nouvelle tentative d’appel Lambda. Si Lambda renvoie une erreur, API Gateway renvoie une réponse d’erreur au client.

L’exemple suivant montre une cartographie de suivi X-Ray pour une demande qui a entraîné une erreur de fonction et un message d’erreur 502 d’API Gateway. Le client reçoit le message d’erreur générique.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/tracemap-apig-502.png)


Pour personnaliser la réponse d’erreur, vous devez attraper les erreurs dans votre code et formater une réponse dans le format requis.

**Example [index.js](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/nodejs-apig/function/index.mjs) : formatage des erreurs**  

```
var formatError = function(error){
  var response = {
    "statusCode": error.statusCode,
    "headers": {
      "Content-Type": "text/plain",
      "x-amzn-ErrorType": error.code
    },
    "isBase64Encoded": false,
    "body": error.code + ": " + error.message
  }
  return response
}
```

API Gateway convertit cette réponse en une erreur HTTP avec un code d’état et un corps personnalisés. Dans la carte de trace, le nœud de fonction est vert car il a géré l’erreur.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/tracemap-apig-404.png)


# Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP
<a name="apig-http-invoke-decision"></a>

De nombreux cas d’utilisation courants de Lambda impliquent d’invoquer votre fonction à l’aide d’une requête HTTP. Vous pourriez souhaiter qu’une application Web invoque votre fonction par le biais d’une demande de navigateur. Les fonctions Lambda peuvent également être utilisées pour créer un REST complet APIs, gérer les interactions des utilisateurs à partir d'applications mobiles, traiter des données provenant de services externes via des appels HTTP ou créer des webhooks personnalisés.

Les sections suivantes expliquent quels sont vos choix pour invoquer Lambda via HTTP et fournissent des informations qui vous aideront à prendre la bonne décision pour votre cas d’utilisation particulier.

## Options proposées lors de la sélection d’une méthode d’appel HTTP
<a name="w2aad101c29c46b9"></a>

Lambda propose deux méthodes principales pour appeler une fonction à l'aide d'une requête HTTP : [function URLs](urls-configuration.md) et [API](services-apigateway.md) Gateway. Les principales différences entre ces deux options sont les suivantes :
+ **La fonction Lambda URLs** fournit un point de terminaison HTTP simple et direct pour une fonction Lambda. Elles sont optimisées pour la simplicité et la rentabilité et constituent le moyen le plus rapide d’exposer une fonction Lambda via HTTP.
+ **API Gateway** est un service plus avancé permettant de créer des fonctionnalités complètes APIs. API Gateway est optimisé pour créer et gérer des productions APIs à grande échelle et fournit des outils complets pour la sécurité, la surveillance et la gestion du trafic.

## Recommandations si vous connaissez déjà vos besoins
<a name="w2aad101c29c46c11"></a>

Si vous connaissez déjà bien vos besoins, voici nos recommandations de base :

Nous recommandons cette **[fonction URLs](urls-configuration.md)** pour les applications simples ou le prototypage où vous n'avez besoin que de méthodes d'authentification et de request/response manipulation de base et où vous souhaitez réduire les coûts et la complexité au minimum.

**[API Gateway](services-apigateway.md)** est un meilleur choix pour les applications de production à grande échelle ou pour les cas où vous avez besoin de fonctionnalités plus avancées telles que la prise en charge d'[OpenAPI Description](https://www.openapis.org/), un choix d'options d'authentification, des noms de domaine personnalisés ou une request/response gestion riche, notamment la régulation, la mise en cache et la transformation. request/response 

## Éléments à prendre en compte lors de la sélection d’une méthode pour invoquer votre fonction Lambda
<a name="w2aad101c29c46c13"></a>

Lorsque vous choisissez entre function URLs et API Gateway, vous devez prendre en compte les facteurs suivants :
+ Vos besoins en matière d'authentification, par exemple si vous avez besoin OAuth d'Amazon Cognito pour authentifier les utilisateurs
+ Vos exigences en matière de mise à l’échelle et la complexité de l’API que vous souhaitez implémenter
+ Si vous avez besoin de fonctionnalités avancées telles que la validation et le request/response formatage des demandes
+ Vos besoins en matière de surveillance
+ Vos objectifs en matière de coûts

La compréhension de ces facteurs vous permettra de choisir l’option qui répond le mieux à vos exigences en matière de sécurité, de complexité et de coût.

Le tableau suivant résume les différences entre les deux options.

### Authentification
<a name="w2aad101c29c46c13c11b1"></a>
+ **La fonction URLs** fournit des options d'authentification de base via Gestion des identités et des accès AWS (IAM). Vous pouvez configurer vos points de terminaison pour qu’ils soient publics (aucune authentification) ou pour qu’ils nécessitent une authentification IAM. Avec l'authentification IAM, vous pouvez utiliser des AWS informations d'identification standard ou des rôles IAM pour contrôler l'accès. Bien que simple à configurer, cette approche offre des options limitées par rapport aux autres méthodes d’authentification.
+ **API Gateway** donne accès à une gamme plus complète d’options d’authentification. Outre l'authentification IAM, vous pouvez utiliser des autorisateurs [Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (logique d'authentification personnalisée), des groupes d'utilisateurs Amazon [Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) et des flux .0. OAuth2 Cette flexibilité vous permet de mettre en œuvre des schémas d’authentification complexes, notamment des fournisseurs d’authentification tiers, une authentification basée sur des jetons et une authentification multifactorielle.

### Traitement des requêtes et réponses
<a name="w2aad101c29c46c13c11b3"></a>
+ **La fonction URLs** fournit une gestion de base des requêtes et des réponses HTTP. Elles prennent en charge les méthodes HTTP standard et créent une prise en charge intégrée du partage des ressources entre origines (CORS, cross-origin resource sharing). Bien qu’elles puissent gérer naturellement les charges utiles JSON et les paramètres de requête, elles n’offrent pas de fonctionnalités de transformation ou de validation des requêtes. La gestion des réponses est tout aussi simple : le client reçoit la réponse de votre fonction Lambda exactement telle que Lambda la renvoie.
+ **API Gateway** fournit des fonctionnalités sophistiquées de gestion des requêtes et des réponses. Vous pouvez définir des validateurs de demandes, transformer les demandes et les réponses à l'aide de modèles de mappage, configurer request/response des en-têtes et implémenter la mise en cache des réponses. API Gateway prend également en charge les charges utiles binaires et les noms de domaine personnalisés et peut modifier les réponses avant qu’elles n’atteignent le client. Vous pouvez configurer des modèles pour la request/response validation et la transformation à l'aide du schéma JSON.

### Mise à l’échelle
<a name="w2aad101c29c46c13c11b5"></a>
+ Les **fonctions** s' URLsadaptent directement aux limites de simultanéité de votre fonction Lambda et gérez les pics de trafic en augmentant la taille de votre fonction jusqu'à sa limite de simultanéité maximale configurée. Une fois cette limite atteinte, Lambda répond aux requêtes supplémentaires avec des réponses HTTP 429. Il n’existe aucun mécanisme de mise en file d’attente intégré. La gestion de la mise à l’échelle dépend donc entièrement de la configuration de votre fonction Lambda. Par défaut, les fonctions Lambda sont limitées à 1 000 exécutions simultanées par fonction. Région AWS
+ **API Gateway** fournit des fonctionnalités de dimensionnement supplémentaires en plus de la propre mise à l’échelle de Lambda. Il inclut des commandes intégrées de mise en file d’attente et de limitation des requêtes, ce qui vous permet de gérer les pics de trafic de manière plus élégante. API Gateway peut traiter jusqu’à 10 000 requêtes par seconde et par région par défaut, avec une capacité de débordement de 5 000 requêtes par seconde. Il fournit également des outils pour limiter les requêtes à différents niveaux (API, étape ou méthode) afin de protéger votre dorsal.

### Contrôle
<a name="w2aad101c29c46c13c11b7"></a>
+ Les **fonctions URLs** offrent une surveillance de base via CloudWatch les métriques Amazon, notamment le nombre de demandes, la latence et les taux d'erreur. Vous avez accès aux métriques et aux journaux Lambda standard, qui indiquent les requêtes brutes entrant dans votre fonction. Bien que cela fournisse une visibilité opérationnelle essentielle, les métriques se concentrent principalement sur l’exécution des fonctions.
+ **API Gateway** fournit des fonctionnalités de surveillance complètes, notamment des métriques détaillées, des options de journalisation et de suivi. Vous pouvez surveiller les appels d'API, la latence, les taux d'erreur et hit/miss les taux de cache via CloudWatch. API Gateway s'intègre également au AWS X-Ray traçage distribué et fournit des formats de journalisation personnalisables.

### Cost
<a name="w2aad101c29c46c13c11b9"></a>
+ Les **fonctions URLs** suivent le modèle de tarification Lambda standard : vous ne payez que pour les appels de fonctions et le temps de calcul. Il n’y a pas de frais supplémentaires pour le point de terminaison de l’URL lui-même. Cela en fait un choix rentable pour les applications simples APIs ou à faible trafic si vous n'avez pas besoin des fonctionnalités supplémentaires d'API Gateway.
+ **API Gateway** propose un [niveau gratuit](https://aws.amazon.com/api-gateway/pricing/#Free_Tier) qui inclut un million d'appels d'API reçus pour REST APIs et un million d'appels d'API reçus pour HTTP APIs. Ensuite, API Gateway facture les appels d’API, le transfert de données et la mise en cache (si activée). Reportez-vous à la [page de tarification](https://aws.amazon.com/api-gateway/pricing/) d’API Gateway pour connaître les coûts associés à votre propre cas d’utilisation.

### Autres fonctions
<a name="w2aad101c29c46c13c11c11"></a>
+  URLsLes **fonctions** sont conçues pour la simplicité et l'intégration directe de Lambda. Ils prennent en charge les points de terminaison HTTP et HTTPS, offrent un support CORS intégré et fournissent des points de terminaison à double pile (IPv4 et IPv6). Bien qu’elles ne disposent d’aucune fonctionnalité avancée, elles excellent dans les scénarios où vous avez besoin d’un moyen rapide et simple d’exposer les fonctions Lambda via HTTP.
+ **API Gateway** inclut de nombreuses fonctionnalités supplémentaires telles que la gestion des versions des API, la gestion des étapes, les clés d'API pour les plans d'utilisation, la documentation des API via Swagger/OpenAPI, le mode WebSocket APIs privé au sein d' APIs un VPC et l'intégration WAF pour une sécurité accrue. Il prend également en charge les déploiements Canary, les intégrations fictives à des fins de test et l'intégration avec d'autres solutions que Services AWS Lambda.

## Sélection d’une méthode pour invoquer votre fonction Lambda
<a name="w2aad101c29c46c15"></a>

Maintenant que vous avez pris connaissance des critères de sélection entre la fonction Lambda URLs et API Gateway et des principales différences entre les deux, vous pouvez sélectionner l'option qui répond le mieux à vos besoins et utiliser les ressources suivantes pour vous aider à commencer à l'utiliser.

------
#### [ Function URLs ]

**Commencez à utiliser Function URLs grâce aux ressources suivantes**
+ Suivre le tutoriel [Création d’une fonction Lambda avec une URL de fonction](urls-webhook-tutorial.md)
+ Pour en savoir plus sur URLs les fonctions, consultez le [Création et gestion de la fonction Lambda URLs](urls-configuration.md) chapitre de ce guide
+ Essayez le tutoriel guidé intégré à la console **Créer une application Web simple** en procédant comme suit :

1. Ouvrez la [page Fonctions](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

1. Ouvrez le panneau d’aide en cliquant sur l’icône dans le coin supérieur droit de l’écran.  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/console_help_screenshot.png)

1. Sélectionnez **Tutoriels**.

1. Dans **Créer une application Web simple**, choisissez **Démarrer le tutoriel**.

------
#### [ API Gateway ]

**Mise en route avec Lambda et API Gateway grâce aux ressources suivantes**
+ Suivez le tutoriel [Utilisation de Lambda avec API Gateway](services-apigateway-tutorial.md) pour créer une API REST intégrée à une fonction Lambda principale.
+ Pour en savoir plus sur les différents types d’API proposés par API Gateway, consultez les sections suivantes du *Guide du développeur Amazon API Gateway* :
  + [API Gateway REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html)
  + [API Gateway HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)
  + [API Gateway WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)
+ Essayez un ou plusieurs des exemples de la section [Tutoriels et ateliers](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-tutorials.html) du manuel *Guide du développeur Amazon API Gateway*.

------