Siapkan integrasi kustom Lambda di Gateway API - APIGerbang Amazon

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 Gateway API

Untuk menunjukkan cara mengatur integrasi kustom Lambda, kami membuat API Gateway API untuk mengekspos GET /greeting?greeter={name} metode untuk memanggil fungsi Lambda. Gunakan salah satu contoh fungsi Lambda berikut untuk Anda. API

Gunakan salah satu contoh fungsi Lambda berikut:

Node.js
export const handler = function(event, context, callback) { var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; if (event.greeter==null) { callback(new Error('Missing the required greeter parameter.')); } else if (event.greeter === "") { res.body = "Hello, World"; callback(null, res); } else { res.body = "Hello, " + event.greeter +"!"; callback(null, res); } };
Python
import json def lambda_handler(event, context): print(event) res = { "statusCode": 200, "headers": { "Content-Type": "*/*" } } if event['greeter'] == "": res['body'] = "Hello, World" elif (event['greeter']): res['body'] = "Hello, " + event['greeter'] + "!" else: raise Exception('Missing the required greeter parameter.') return res

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 yang berikutARN:

arn:aws:lambda:us-east-1:123456789012:function:HelloWorld

Dengan fungsi Lambda diatur di backend, lanjutkan untuk mengatur file. API

Untuk mengatur integrasi kustom Lambda menggunakan AWS CLI
  1. Panggil create-rest-api perintah untuk membuatAPI:

    aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2

    Perhatikan id nilai (te6si5ach7) yang dihasilkan API dalam respons:

    { "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }

    Anda membutuhkan API id seluruh bagian ini.

  2. 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.

  3. 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 nilai greeting sumber daya yang dihasilkan (2jf6xt). Anda membutuhkannya untuk membuat metode pada /greeting sumber daya di langkah berikutnya.

  4. Panggilan put-method untuk membuat permintaan API metodeGET /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 } }

    APIMetode ini memungkinkan klien untuk menerima salam dari fungsi Lambda di backend. greeterParameternya opsional karena backend harus menangani penelepon anonim atau penelepon yang diidentifikasi sendiri.

  5. Panggilan put-method-response untuk mengatur 200 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

  6. Panggilan put-integration untuk mengatur integrasi GET /greeting?greeter={name} metode dengan fungsi Lambda, bernama. HelloWorld Fungsi merespons permintaan dengan pesan"Hello, {name}!", jika greeter 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 ke greeter properti payload. JSON Ini diperlukan karena input ke fungsi Lambda harus diekspresikan dalam tubuh.

    penting

    Untuk integrasi Lambda, Anda harus menggunakan HTTP metode POST untuk permintaan integrasi, sesuai dengan spesifikasi tindakan layanan Lambda untuk pemanggilan fungsi. uriParameternya 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" }

    IAMPeran apigAwsProxyRole harus memiliki kebijakan yang memungkinkan apigateway layanan untuk menjalankan fungsi Lambda. Alih-alih menyediakan IAM peran untukcredentials, Anda dapat memanggil perintah add-permission untuk menambahkan izin berbasis sumber daya. Ini adalah bagaimana konsol API Gateway menambahkan izin ini.

  7. Panggilan put-integration-response untuk mengatur respons integrasi untuk meneruskan output fungsi Lambda ke klien sebagai respons 200 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" }
  8. Panggilan create-deployment untuk menyebarkan API ke test tahap:

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  9. Uji API menggunakan URL perintah c 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'