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, kami membuat API Gateway API untuk mengekspos GET /greeting?greeter={name}
metode untuk menjalankan 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. Ia mengembalikan pesan "Hello, World!"
jika greeter
nilai adalah string kosong. Fungsi mengembalikan pesan kesalahan "Missing the required greeter
parameter."
jika parameter penyambut tidak diatur 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
-
Panggil
create-rest-api
perintah untuk membuat API:aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2
Perhatikan
id
nilai (te6si5ach7
) API yang dihasilkan dalam respons:{ "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }
Anda memerlukan API di
id
seluruh bagian ini. -
Panggil
get-resources
perintah untuk mendapatkan sumber daya rootid
:aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2
Respon yang berhasil adalah sebagai berikut:
{ "items": [ { "path": "/", "id": "krznpq9xpg" } ] }
Perhatikan
id
nilai sumber daya root (krznpq9xpg
). Anda membutuhkannya di langkah berikutnya dan nanti. -
Panggilan
create-resource
untuk membuat Sumber Daya API Gateway dari/greeting
:aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part greeting
Respons yang berhasil mirip dengan yang berikut:
{ "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }
Perhatikan
id
nilaigreeting
sumber daya yang dihasilkan (2jf6xt
). Anda membutuhkannya untuk membuat metode pada/greeting
sumber daya di langkah berikutnya. -
Panggilan
put-method
untuk membuat permintaan metode API dariGET /greeting?greeter={name}
:aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=false
Respons yang berhasil mirip dengan yang 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.
greeter
Parameternya opsional karena backend harus menangani penelepon anonim atau penelepon yang diidentifikasi sendiri. -
Panggilan
put-method-response
untuk mengatur200 OK
respons terhadap permintaan metodeGET /greeting?greeter={name}
:aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200
-
Panggilan
put-integration
untuk mengatur integrasiGET /greeting?greeter={name}
metode dengan fungsi Lambda, bernama.HelloWorld
Fungsi menanggapi permintaan dengan pesan"Hello, {name}!"
, jikagreeter
parameter disediakan, atau"Hello, World!"
, jika parameter string query tidak diatur.aws apigateway put-integration \ --region us-west-2 \ --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/apigAwsProxyRole
Template pemetaan yang disediakan di sini menerjemahkan parameter string
greeter
kueri kegreeter
properti payload JSON. Ini diperlukan karena input ke fungsi Lambda harus diekspresikan dalam tubuh.penting
Untuk integrasi Lambda, Anda harus menggunakan metode HTTP
POST
untuk permintaan integrasi, sesuai dengan spesifikasi tindakan layanan Lambda untuk pemanggilan fungsi.uri
Parameternya adalah ARN dari tindakan pemanggilan fungsi.Output yang berhasil mirip dengan yang 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
apigAwsProxyRole
harus memiliki kebijakan yang memungkinkanapigateway
layanan untuk menjalankan fungsi Lambda. Alih-alih menyediakan peran IAMcredentials
, Anda dapat memanggil perintah add-permission untuk menambahkan izin berbasis sumber daya. Beginilah cara konsol API Gateway menambahkan izin ini. -
Panggilan
put-integration-response
untuk mengatur respons integrasi untuk meneruskan output fungsi Lambda ke klien sebagai respons200 OK
metode.aws apigateway put-integration-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 \ --selection-pattern ""
Dengan mengatur pola pilihan ke string kosong,
200 OK
responsnya adalah default.Respons yang berhasil harus serupa dengan yang berikut:
{ "selectionPattern": "", "statusCode": "200" }
-
Panggilan
create-deployment
untuk menerapkan API ketest
panggung:aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
-
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'