Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurare l'integrazione del proxy Lambda per API Gateway utilizzando AWS CLI
In questa sezione, mostriamo come configurare un'integrazione API con il proxy Lambda utilizzando il. AWS CLI Per istruzioni dettagliate sull'utilizzo della console API Gateway per configurare una risorsa proxy con l'integrazione del proxy Lambda, vedere. Tutorial: Creare un'integrazione REST API con un proxy Lambda
Ad esempio, utilizziamo la seguente funzione Lambda di esempio come backend di: 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); };
Rispetto alla configurazione di integrazione personalizzata Lambda inConfigura integrazioni personalizzate Lambda in Gateway API, l'input di questa funzione Lambda può essere espresso nei parametri e nel corpo della richiesta. Avrai maggiore libertà per permettere al client di passare gli stessi dati di input. Qui il client può passare il nome del mittente della formula di saluto come parametro della stringa di query, intestazione o proprietà del corpo. La funzione può anche supportare l'integrazione personalizzata Lambda. La API configurazione è più semplice. Non devi configurare la risposta del metodo o la risposta di integrazione.
Per configurare un'integrazione con proxy Lambda utilizzando AWS CLI
-
Chiama il
create-rest-api
comando per creare unAPI:aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2
Nota il
id
valore risultante API (te6si5ach7
) nella risposta:{ "name": "HelloWorldProxy (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }
Hai bisogno di API
id
tutta questa sezione. -
Chiama il comando
get-resources
per ottenere il valore diid
della risorsa root:aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2
La risposta di esito positivo sarà simile alla seguente:
{ "items": [ { "path": "/", "id": "krznpq9xpg" } ] }
Prendi nota del valore di
id
(krznpq9xpg
) della risorsa root. Ti servirà nella prossima fase e successivamente. -
Chiama
create-resource
per creare una risorsa API gateway di/greeting
:aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part {proxy+}
La risposta con esito positivo è simile a quella riportata di seguito.
{ "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }
Prendi nota del valore
{proxy+}
della risorsaid
(2jf6xt
). Ti servirà per creare un metodo nella risorsa/{proxy+}
nella prossima fase. -
Chiama
put-method
per creare una richiesta del metodoANY
ANY /{proxy+}
:aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"
La risposta con esito positivo è simile a quella riportata di seguito.
{ "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }
Questo API metodo consente al client di ricevere o inviare saluti dalla funzione Lambda nel backend.
-
Chiama
put-integration
per configurare l'integrazione del metodoANY /{proxy+}
con una funzione Lambda, denominataHelloWorld
. Questa funzione risponde alla richiesta con un messaggio"Hello, {name}!"
se è specificato il parametrogreeter
, altrimenti con un messaggio"Hello, World!"
se il parametro della stringa di query non è impostato.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
Importante
Per le integrazioni Lambda, è necessario utilizzare il HTTP metodo di
POST
per la richiesta di integrazione, in base alla specifica dell'azione del servizio Lambda per le chiamate di funzioni. Il IAM ruolo delle politicheapigAwsProxyRole
indispensabili che consentono alapigateway
servizio di richiamare le funzioni Lambda. Per ulteriori informazioni sulle IAM autorizzazioni, consulta. APIModello di autorizzazioni Gateway per richiamare un APIL'output corretto sarà simile al seguente:
{ "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" }
Invece di fornire un IAM ruolo per
credentials
, puoi chiamare il comando add-permission per aggiungere autorizzazioni basate sulle risorse. Questo è ciò che fa la console Gateway. API -
Chiama
create-deployment
per API implementarlo su unatest
fase:aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
-
Prova l'APIutilizzo dei seguenti URL comandi c in un terminale.
Chiamando il API con il parametro della stringa di query di
?greeter=jane
:curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'
Chiamando il API con un parametro di
greeter:jane
intestazione pari a:curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'
Chiamando il API con un corpo di
{"greeter":"jane"}
:curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'
In tutti i casi, l'output è una risposta 200 con il corpo seguente:
Hello, jane!