Siapkan integrasi proxy Lambda untuk API Gateway menggunakan AWS CLI - APIGerbang Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan integrasi proxy Lambda untuk API Gateway menggunakan AWS CLI

Di bagian ini, kami menunjukkan cara mengatur API dengan integrasi proxy Lambda menggunakan. AWS CLI Untuk petunjuk terperinci tentang penggunaan konsol API Gateway untuk mengonfigurasi sumber daya proxy dengan integrasi proxy Lambda, lihat. Tutorial: Buat REST API dengan integrasi proxy Lambda

Sebagai contoh, kami menggunakan contoh fungsi Lambda berikut sebagai backend dari: 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); };

Membandingkan ini dengan pengaturan integrasi kustom Lambda diSiapkan integrasi kustom Lambda di Gateway API, input ke fungsi Lambda ini dapat dinyatakan dalam parameter permintaan dan isi. Anda memiliki lebih banyak garis lintang untuk memungkinkan klien meneruskan data input yang sama. Di sini, klien dapat meneruskan nama penyambut sebagai parameter string kueri, header, atau properti tubuh. Fungsi ini juga dapat mendukung integrasi kustom Lambda. APIPengaturannya lebih sederhana. Anda tidak mengonfigurasi respons metode atau respons integrasi sama sekali.

Untuk mengatur integrasi proxy 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": "HelloWorldProxy (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 ditunjukkan 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 {proxy+}

    Respons yang berhasil mirip dengan yang berikut:

    { "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }

    Perhatikan id nilai {proxy+} sumber daya yang dihasilkan (2jf6xt). Anda membutuhkannya untuk membuat metode pada /{proxy+} sumber daya di langkah berikutnya.

  4. Panggilan put-method untuk membuat permintaan ANY metodeANY /{proxy+}:

    aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"

    Respons yang berhasil mirip dengan yang berikut:

    { "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }

    APIMetode ini memungkinkan klien untuk menerima atau mengirim salam dari fungsi Lambda di backend.

  5. Panggilan put-integration untuk mengatur integrasi ANY /{proxy+} metode dengan fungsi Lambda, bernama. HelloWorld Fungsi ini menanggapi permintaan dengan pesan"Hello, {name}!", jika greeter parameter disediakan, atau"Hello, World!", jika parameter string kueri tidak diatur.

    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
    penting

    Untuk integrasi Lambda, Anda harus menggunakan HTTP metode POST untuk permintaan integrasi, sesuai dengan spesifikasi tindakan layanan Lambda untuk pemanggilan fungsi. IAMPeran apigAwsProxyRole harus memiliki kebijakan yang memungkinkan apigateway layanan untuk menjalankan fungsi Lambda. Untuk informasi selengkapnya tentang IAM izin, lihat APIModel izin gateway untuk memanggil API.

    Output yang berhasil mirip dengan yang berikut:

    { "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" }

    Alih-alih menyediakan IAM peran untukcredentials, Anda dapat memanggil perintah add-permission untuk menambahkan izin berbasis sumber daya. Inilah yang dilakukan konsol API Gateway.

  6. Panggilan create-deployment untuk menyebarkan API ke test tahap:

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  7. Uji API menggunakan URL perintah c berikut di terminal.

    Memanggil API dengan parameter string kueri dari?greeter=jane:

    curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'

    Memanggil API dengan parameter headergreeter:jane:

    curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'

    Memanggil API dengan tubuh{"greeter":"jane"}:

    curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'

    Dalam semua kasus, outputnya adalah respons 200 dengan badan respons berikut:

    Hello, jane!