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.
Configurez l'intégration du proxy Lambda pour API Gateway à l'aide du AWS CLI
Dans cette section, nous montrons comment configurer une intégration API avec le proxy Lambda à l'aide du. AWS CLI Pour obtenir des instructions détaillées sur l'utilisation de la console API Gateway afin de configurer une ressource proxy avec l'intégration du proxy Lambda, consultez. Tutoriel : Création d'une REST API intégration avec un proxy Lambda
À titre d'exemple, nous utilisons l'exemple de fonction Lambda suivant comme backend du : API
export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };
En comparant cela à la configuration d'intégration personnalisée Lambda dansConfigurer les intégrations personnalisées Lambda dans Gateway API, l'entrée de cette fonction Lambda peut être exprimée dans les paramètres et le corps de la demande. Vous avez plus de latitude pour permettre au client de transmettre les mêmes données d'entrée. Ici, le client peut transmettre le nom de l'hôte sous la forme d'une propriété de paramètre de chaîne de demande, d'en-tête ou de corps. La fonction peut également prendre en charge l'intégration personnalisée Lambda. La API configuration est plus simple. Vous ne configurez pas du tout la réponse de la méthode ou la réponse de l'intégration.
Pour configurer une intégration de proxy Lambda à l'aide du AWS CLI
-
Appelez la
create-rest-api
commande pour créer un API :aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2
Notez la
id
valeur (te6si5ach7
) API du résultat dans la réponse :{ "name": "HelloWorldProxy (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }
Vous en avez besoin API
id
tout au long de cette section. -
Appelez la commande
get-resources
pour obtenir l'id
de la ressource racine :aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2
La réponse positive est affichée comme suit :
{ "items": [ { "path": "/", "id": "krznpq9xpg" } ] }
Notez la valeur d'
id
de la ressource racine (krznpq9xpg
). Vous en aurez besoin à l'étape suivante et ultérieurement. -
Appelez
create-resource
pour créer une ressource de API passerelle de/greeting
:aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part {proxy+}
La réponse positive est semblable à ce qui suit :
{ "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }
Notez la valeur d'
id
(2jf6xt
) de la ressource{proxy+}
résultante. Vous en avez besoin pour créer une méthode dans la ressource/{proxy+}
à l'étape suivante. -
Appelez
put-method
pour créer une demande de méthodeANY
deANY /{proxy+}
:aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"
La réponse positive est semblable à ce qui suit :
{ "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }
Cette API méthode permet au client de recevoir ou d'envoyer des salutations à partir de la fonction Lambda au niveau du backend.
-
Appelez
put-integration
pour configurer l'intégration de la méthodeANY /{proxy+}
avec une fonction Lambda nomméeHelloWorld
. Cette fonction répond à la demande par un message"Hello, {name}!"
si le paramètregreeter
est précisé, ou"Hello, World!"
si le paramètre de chaîne de demande n'est pas défini.aws apigateway put-integration \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --type AWS_PROXY \ --integration-http-method POST \ --uri arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:HelloWorld/invocations \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
Important
Pour les intégrations Lambda, vous devez utiliser la HTTP méthode de
POST
pour la demande d'intégration, conformément à la spécification de l'action de service Lambda pour les invocations de fonctions. Le IAM rôle deapigAwsProxyRole
doit avoir des politiques permettant auapigateway
service d'invoquer des fonctions Lambda. Pour plus d'informations sur IAM les autorisations, consultez APIModèle d'autorisations de passerelle pour appeler un API.La sortie positive est semblable à ce qui suit :
{ "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:HelloWorld/invocations", "httpMethod": "POST", "cacheNamespace": "vvom7n", "credentials": "arn:aws:iam::1234567890:role/apigAwsProxyRole", "type": "AWS_PROXY" }
Au lieu de fournir un IAM rôle pour
credentials
, vous pouvez appeler la commande add permission pour ajouter des autorisations basées sur les ressources. C'est ce que fait la console API Gateway. -
Appelez
create-deployment
pour déployer le API sur unetest
scène :aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
-
Testez le API à l'aide des URL commandes c suivantes dans un terminal.
Appeler le API avec le paramètre de chaîne de requête suivant
?greeter=jane
:curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'
Appeler le API avec un paramètre d'en-tête de
greeter:jane
:curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'
Appeler le API avec un corps de
{"greeter":"jane"}
:curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'
Dans tous les cas, la sortie est une réponse 200 avec le corps de réponse suivant :
Hello, jane!