Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Siapkan integrasi kustom Lambda di API Gateway
Untuk menunjukkan cara mengatur integrasi kustom Lambda, atau non-proxy, kami membuat API Gateway API untuk mengekspos GET /greeting?greeter={name} metode untuk memanggil fungsi Lambda. Gunakan salah satu contoh fungsi Lambda berikut untuk API Anda.
Gunakan salah satu contoh fungsi Lambda berikut:
Fungsi merespons dengan pesan "Hello, {name}!" jika nilai greeter parameter adalah string yang tidak kosong. Ini mengembalikan pesan "Hello, World!" jika nil greeter ainya adalah string kosong. Fungsi mengembalikan pesan kesalahan "Missing the required greeter
parameter." jika parameter salam tidak disetel dalam permintaan masuk. Kami menamai fungsinyaHelloWorld.
Anda dapat membuatnya di konsol Lambda atau dengan menggunakan. AWS CLI Pada bagian ini, kami mereferensikan fungsi ini menggunakan ARN berikut:
arn:aws:lambda:us-east-1:123456789012:function:HelloWorld
Dengan fungsi Lambda diatur di backend, lanjutkan untuk mengatur API.
Untuk mengatur integrasi kustom Lambda menggunakan AWS CLI
-
Gunakan perintah create-rest-api berikut untuk membuat API:
aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'Outputnya akan terlihat seperti berikut:
{ "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "rootResourceId" : "krznpq9xpg", "createdDate": 1508461860 }Anda menggunakan API
id(te6si5ach7) danrootResourceId(krznpq9xpg) di seluruh contoh ini. -
Gunakan perintah create-resource berikut untuk membuat Sumber Daya Gateway API dari:
/greetingaws apigateway create-resource \ --rest-api-id te6si5ach7 \ --parent-id krznpq9xpg \ --path-part greetingOutputnya akan terlihat seperti berikut:
{ "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }Anda menggunakan
idnilaigreetingsumber daya (2jf6xt) untuk membuat metode pada/greetingsumber daya pada langkah berikutnya. -
Gunakan perintah put-method berikut untuk membuat permintaan metode API:
GET /greeting?greeter={name}aws apigateway put-method --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=falseOutputnya akan terlihat seperti berikut:
{ "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.querystring.greeter": false } }Metode API ini memungkinkan klien untuk menerima salam dari fungsi Lambda di backend.
greeterParameter ini opsional karena backend harus menangani penelepon anonim atau penelepon yang diidentifikasi sendiri. -
Gunakan perintah put-method-response berikut untuk mengatur
200 OKrespons terhadap permintaan metode:GET /greeting?greeter={name}aws apigateway put-method-response \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 -
Gunakan perintah put-integration berikut untuk mengatur integrasi
GET /greeting?greeter={name}metode dengan fungsi Lambda, bernama.HelloWorldFungsi menanggapi permintaan dengan pesan"Hello, {name}!", jikagreeterparameter disediakan, atau"Hello, World!", jika parameter string kueri tidak disetel.aws apigateway put-integration \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --type AWS \ --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations \ --request-templates '{"application/json":"{\"greeter\":\"$input.params('greeter')\"}"}' \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRoleTemplate pemetaan yang disediakan di sini menerjemahkan parameter string
greeterkueri kegreeterproperti muatan JSON. Ini diperlukan karena input ke fungsi Lambda harus dinyatakan dalam tubuh.penting
Untuk integrasi Lambda, Anda harus menggunakan metode HTTP
POSTuntuk permintaan integrasi, sesuai dengan spesifikasi tindakan layanan Lambda untuk pemanggilan fungsi.uriParameter adalah ARN dari tindakan pemanggilan fungsi.Outputnya akan terlihat seperti berikut:
{ "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations", "httpMethod": "POST", "requestTemplates": { "application/json": "{\"greeter\":\"$input.params('greeter')\"}" }, "cacheNamespace": "krznpq9xpg", "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole", "type": "AWS" }Peran IAM
apigAwsProxyRoleharus memiliki kebijakan yang memungkinkanapigatewaylayanan untuk memanggil fungsi Lambda. Alih-alih menyediakan peran IAM untukcredentials, Anda dapat memanggil perintah add-permissions untuk menambahkan izin berbasis sumber daya. Beginilah cara konsol API Gateway menambahkan izin ini. -
Gunakan perintah put-integration-response berikut untuk mengatur respons integrasi untuk meneruskan output fungsi Lambda ke klien sebagai respons metode:
200 OKaws apigateway put-integration-response \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 \ --selection-pattern ""Dengan mengatur pola seleksi ke string kosong,
200 OKresponsnya adalah default.Outputnya akan terlihat seperti berikut:
{ "selectionPattern": "", "statusCode": "200" } -
Gunakan perintah create-deployment berikut untuk menyebarkan API ke tahap:
testaws apigateway create-deployment \ --rest-api-id te6si5ach7 \ --stage-name test -
Uji API menggunakan perintah cURL berikut di terminal:
curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=me' \ -H 'authorization: AWS4-HMAC-SHA256 Credential={access_key}/20171020/us-west-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=f327...5751'