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 Gateway API
Vous pouvez créer un site Web API avec un HTTP point de terminaison pour votre fonction Lambda à l'aide d'Amazon API Gateway. APIGateway fournit des outils pour créer et documenter des sites Web APIs qui acheminent les HTTP demandes vers les fonctions Lambda. Vous pouvez sécuriser l'accès à votre compte API grâce à des contrôles d'authentification et d'autorisation. APIsVous pouvez diffuser du trafic sur Internet ou n'être accessible qu'au sein de votreVPC.
Les ressources que vous API utilisez définissent une ou plusieurs méthodes, telles que GET ouPOST. 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 attrape tous les chemins sous une ressource. La ANY
méthode capture toutes les HTTP méthodes.
Sections
Choix d'un API type
APIGateway prend en charge trois types de fonctions APIs qui invoquent des fonctions Lambda :
-
HTTPAPI: Léger et à faible latence RESTfulAPI.
-
RESTAPI: Un outil personnalisable et riche en fonctionnalités RESTfulAPI.
-
WebSocket API: un site Web API qui maintient des connexions permanentes avec les clients pour une communication en duplex intégral.
HTTPAPIset REST APIs sont à la fois RESTful APIs chargés de traiter HTTP les demandes et de renvoyer des réponses. HTTPAPIssont plus récents et sont construits avec la version 2 de API GatewayAPI. Les fonctionnalités suivantes sont nouvelles pour HTTP APIs :
HTTPAPIfonctionnalités
-
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 traiter les demandes sur le chemin racine API du vôtreURL. Pour les étapes nommées, vous devez inclure le nom de l’étape au début du chemin d’accès. -
CORSconfiguration — Vous pouvez configurer votre système API pour ajouter CORS des en-têtes aux réponses sortantes, au lieu de les ajouter manuellement dans votre code de fonction.
RESTAPIssont les classiques RESTful APIs pris en charge par API Gateway depuis son lancement. RESTAPIsdisposent actuellement de davantage de fonctionnalités de personnalisation, d'intégration et de gestion.
RESTAPIfonctionnalités
-
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 prise en charge du AWS X-Ray suivi et options de journalisation supplémentaires.
Pour une comparaison détaillée, voir Choisir entre HTTP APIs et REST APIs dans le Guide du développeur de API Gateway.
WebSocket APIsutilise également la version 2 de API Gateway API et prend en charge un ensemble de fonctionnalités similaire. Utilisez un WebSocket API pour les applications qui bénéficient d'une connexion permanente entre le client etAPI. WebSocket APIsfournissent une communication en duplex intégral, ce qui signifie que le client et le API peuvent envoyer des messages en continu sans attendre de réponse.
HTTPAPIssupporte un format d'événement simplifié (version 2.0). L'exemple suivant montre un événement issu d'un HTTPAPI.
Exemple APIÉvénement du proxy Gateway (HTTPAPI)
{
"version": "2.0",
"routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
"rawPath": "/default/nodejs-apig-function-1G3XMPLZXVXYI",
"rawQueryString": "",
"cookies": [
"s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2",
"regStatus=pre-register"
],
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
...
},
"requestContext": {
"accountId": "123456789012",
"apiId": "r3pmxmplak",
"domainName": "r3pmxmplak.execute-api.us-east-2.amazonaws.com",
"domainPrefix": "r3pmxmplak",
"http": {
"method": "GET",
"path": "/default/nodejs-apig-function-1G3XMPLZXVXYI",
"protocol": "HTTP/1.1",
"sourceIp": "205.255.255.176",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
},
"requestId": "JKJaXmPLvHcESHA=",
"routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
"stage": "default",
"time": "10/Mar/2020:05:16:23 +0000",
"timeEpoch": 1583817383220
},
"isBase64Encoded": true
}
Pour plus d'informations, voir Créer des intégrations de AWS Lambda proxy pour HTTP APIs API Gateway.
Ajout d’un point de terminaison public à votre fonction Lambda
Ajouter un point de terminaison public à votre fonction Lambda
Ouvrez la page Functions
(Fonctions) de la console Lambda. -
Choisissez une fonction.
-
Sous Function overview (Vue d'ensemble de la fonction), choisissez Add trigger (Ajouter un déclencheur).
-
Sélectionnez APIGateway.
-
Choisissez Créer un API ou Utiliser un existant API.
-
Nouveau API : Pour le APItype, sélectionnez HTTPAPI. Pour de plus amples informations, veuillez consulter Choix d'un API type.
-
Existant API : sélectionnez-le dans API la liste déroulante ou entrez l'APIID (par exemple, r3pmxmplak).
-
-
Pour Sécurité, choisissez Ouvrir.
-
Choisissez Ajouter.
Intégration de proxy
APIAPIsLes passerelles comprennent des étapes, des ressources, des méthodes et des intégrations. L’étape et la ressource déterminent le chemin du point de terminaison :
APIformat de chemin
-
/prod/
– Etapeprod
et ressource racine. -
/prod/user
– Etapeprod
et ressourceuser
. -
/dev/{proxy+}
– Routage quelconque à l’étapedev
. -
/
— (HTTPAPIs) Le stage par défaut et la ressource racine.
Une intégration Lambda fait correspondre une combinaison de chemins et de HTTP méthodes à une fonction Lambda. Vous pouvez configurer API Gateway pour transmettre le corps de la HTTP demande tel quel (intégration personnalisée) ou pour encapsuler le corps de la demande dans un document contenant 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 la section Intégrations de proxy Lambda dans Gateway. API
Format des événements
Amazon API Gateway appelle votre fonction de manière synchrone avec un événement contenant une JSON représentation de la HTTP demande. 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. L'exemple suivant montre un événement proxy provenant d'une API passerelle RESTAPI.
Exemple APIÉvénement du proxy Gateway (RESTAPI)
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"requestContext": {
"resourcePath": "/",
"httpMethod": "GET",
"path": "/Prod/",
...
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"Host": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e66d96f-7491f09xmpl79d18acf3d050",
...
},
"multiValueHeaders": {
"accept": [
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
],
"accept-encoding": [
"gzip, deflate, br"
],
...
},
"queryStringParameters": null,
"multiValueQueryStringParameters": null,
"pathParameters": null,
"stageVariables": null,
"body": null,
"isBase64Encoded": false
}
Format de la réponse
APIGateway attend une réponse de votre fonction et transmet 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 le résultat de la fonction en HTTP réponse. 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 HTTP réponse réussie contenant un JSON document.
Exemple 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}"
}
Le moteur d'exécution Lambda sérialise l'objet de réponse JSON et l'envoie au. API Il API analyse la réponse et l'utilise pour créer une HTTP réponse, qu'il envoie ensuite au client qui a fait la demande initiale.
Exemple HTTPréponse
< 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 }
Autorisations
Amazon API Gateway obtient l'autorisation d'appeler votre fonction conformément à la politique basée sur les ressources de la fonction. Vous pouvez accorder une autorisation d'appel à un ensemble API ou accorder un accès limité à une étape, une ressource ou une méthode.
Lorsque vous ajoutez un API à votre fonction à l'aide de la console Lambda, de la console API Gateway ou d'un AWS SAM modèle, la politique basée sur les ressources de la fonction est automatiquement mise à jour. Voici un exemple de politique de fonction.
Exemple 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 les autorisations relatives aux politiques fonctionnelles manuellement en effectuant les API opérations suivantes :
Pour accorder l'autorisation d'invocation à un objet existantAPI, utilisez la add-permission
commande. 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 est différente Régions AWS, l'identifiant de région dans la source ARN doit correspondre à la région de la fonction, et non à la région duAPI. API Lorsque API Gateway ARN invoque une fonction, il utilise une ressource basée sur le ARNAPI, mais modifiée pour correspondre à la région de la fonction.
ARNDans cet exemple, la source autorise une intégration sur la GET méthode de la ressource racine dans l'étape par défaut d'unAPI, avec IDmnh1xmpli7
. Vous pouvez utiliser un astérisque dans la source ARN pour accorder des autorisations à plusieurs étapes, méthodes ou ressources.
Modèles de ressources
-
mnh1xmpli7/*/GET/*
— GET méthode sur toutes les ressources à toutes les étapes. -
mnh1xmpli7/prod/ANY/user
— ANY méthode appliquée à lauser
ressource dans leprod
stage. -
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 Utilisation de IAM politiques basées sur les ressources dans Lambda.
Exemple d'application
L'exemple d'application APIGateway with Node.js