Memanggil fungsi Lambda menggunakan titik akhir Amazon Gateway API - AWS Lambda

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

Memanggil fungsi Lambda menggunakan titik akhir Amazon Gateway API

Anda dapat membuat web API dengan HTTP titik akhir untuk fungsi Lambda Anda dengan menggunakan Amazon API Gateway. APIGateway menyediakan alat untuk membuat dan mendokumentasikan web APIs yang merutekan HTTP permintaan ke fungsi Lambda. Anda dapat mengamankan akses ke Anda API dengan kontrol otentikasi dan otorisasi. Anda APIs dapat melayani lalu lintas melalui internet atau hanya dapat diakses di dalam AndaVPC.

Sumber daya dalam Anda API menentukan satu atau lebih metode, seperti GET atauPOST. Metode memiliki integrasi yang merutekan permintaan ke fungsi Lambda atau jenis integrasi lainnya. Anda dapat menentukan setiap sumber daya dan metode secara individual, atau menggunakan jenis sumber daya dan metode khusus untuk mencocokkan semua permintaan yang sesuai dengan suatu pola. Sumber daya proksi menangkap semua jalur di bawah sumber daya. ANYMetode ini menangkap semua HTTP metode.

Memilih API tipe

APIGateway mendukung tiga jenis fungsi Lambda APIs yang memanggil:

  • HTTPAPI: Ringan, latensi rendah RESTfulAPI.

  • RESTAPI: Dapat disesuaikan, kaya fitur. RESTful API

  • WebSocket APISebuah web API yang memelihara koneksi persisten dengan klien untuk komunikasi full-duplex.

HTTPAPIsdan REST APIs keduanya RESTful APIs memproses HTTP permintaan dan mengembalikan respons. HTTPAPIslebih baru dan dibangun dengan API Gateway versi 2API. Fitur-fitur berikut ini baru untuk HTTPAPIs:

HTTPAPIfitur
  • Deployment otomatis – Saat Anda memodifikasi rute atau integrasi, mengubah deployment secara otomatis ke tahap yang deployment otomatisnya diaktifkan.

  • Tahap default - Anda dapat membuat tahap default ($default) untuk melayani permintaan di jalur root API milik AndaURL. Untuk tahap yang diberi nama, Anda harus menyertakan nama tahap di awal jalur.

  • CORSkonfigurasi - Anda dapat mengonfigurasi API untuk menambahkan CORS header ke respons keluar, alih-alih menambahkannya secara manual dalam kode fungsi Anda.

RESTAPIsadalah klasik RESTful APIs yang didukung API Gateway sejak diluncurkan. RESTAPIssaat ini memiliki lebih banyak fitur penyesuaian, integrasi, dan manajemen.

RESTAPIfitur
  • Jenis integrasi - REST APIs mendukung integrasi Lambda kustom. Dengan integrasi kustom, Anda dapat mengirim hanya badan permintaan ke fungsi, atau menerapkan templat transformasi ke badan permintaan sebelum mengirimkannya ke fungsi.

  • Kontrol akses — REST APIs mendukung lebih banyak opsi untuk otentikasi dan otorisasi.

  • Pemantauan dan penelusuran — REST APIs mendukung opsi AWS X-Ray penelusuran dan pencatatan tambahan.

Untuk perbandingan mendetail, lihat Memilih antara HTTP APIs dan REST APIs di Panduan Pengembang API Gateway.

WebSocket APIsjuga menggunakan API Gateway versi 2 API dan mendukung set fitur serupa. Gunakan a WebSocket API untuk aplikasi yang mendapat manfaat dari koneksi persisten antara klien danAPI. WebSocket APIsmenyediakan komunikasi dupleks penuh, yang berarti bahwa klien dan API dapat mengirim pesan terus menerus tanpa menunggu tanggapan.

HTTPAPIsmendukung format acara yang disederhanakan (versi 2.0). Contoh berikut menunjukkan peristiwa dari sebuah HTTPAPI.

contoh APIAcara proxy gateway (HTTPAPI)
{ "version": "2.0", "routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI", "rawPath": "/default/nodejs-apig-function-1G3XMPLZXVXYI", "rawQueryString": "", "cookies": [ "s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2", "regStatus=pre-register" ], "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", ... }, "requestContext": { "accountId": "123456789012", "apiId": "r3pmxmplak", "domainName": "r3pmxmplak.execute-api.us-east-2.amazonaws.com", "domainPrefix": "r3pmxmplak", "http": { "method": "GET", "path": "/default/nodejs-apig-function-1G3XMPLZXVXYI", "protocol": "HTTP/1.1", "sourceIp": "205.255.255.176", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" }, "requestId": "JKJaXmPLvHcESHA=", "routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI", "stage": "default", "time": "10/Mar/2020:05:16:23 +0000", "timeEpoch": 1583817383220 }, "isBase64Encoded": true }

Untuk informasi selengkapnya, lihat Membuat integrasi AWS Lambda proxy untuk HTTP APIs di API Gateway.

Menambahkan titik akhir ke fungsi Lambda Anda

Untuk menambahkan titik akhir publik ke fungsi Lambda Anda
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsi.

  3. Di bagian Gambaran umum fungsi, pilih Tambah pemicu.

  4. Pilih APIGateway.

  5. Pilih Buat API atau Gunakan yang sudah ada API.

    1. BaruAPI: Untuk APItipe, pilih HTTPAPI. Untuk informasi selengkapnya, lihat Memilih API tipe.

    2. AdaAPI: Pilih API dari daftar dropdown atau masukkan API ID (misalnya, r3pmxmplak).

  6. Untuk Keamanan, pilih Terbuka.

  7. Pilih Tambahkan.

Integrasi proxy

APIGateway APIs terdiri dari tahapan, sumber daya, metode, dan integrasi. Tahap dan sumber daya menentukan jalur titik akhir:

APIformat jalur
  • /prod/ – Tahap prod dan sumber daya root.

  • /prod/user – Tahap prod dan sumber daya user.

  • /dev/{proxy+} – Rute mana pun di tahap dev.

  • /— (HTTPAPIs) Tahap default dan sumber daya root.

Integrasi Lambda memetakan kombinasi jalur dan HTTP metode ke fungsi Lambda. Anda dapat mengonfigurasi API Gateway untuk meneruskan isi HTTP permintaan apa adanya (integrasi kustom), atau untuk merangkum badan permintaan dalam dokumen yang mencakup semua informasi permintaan termasuk header, sumber daya, jalur, dan metode.

Untuk informasi selengkapnya, lihat Integrasi proxy Lambda di Gateway. API

Format acara

Amazon API Gateway memanggil fungsi Anda secara sinkron dengan peristiwa yang berisi JSON representasi permintaan. HTTP Untuk integrasi kustom, kejadian adalah badan dari permintaan. Untuk integrasi proksi, kejadian memiliki struktur yang telah ditentukan. Contoh berikut menunjukkan peristiwa proxy dari API Gateway RESTAPI.

contoh APIAcara proxy gateway (RESTAPI)
{ "resource": "/", "path": "/", "httpMethod": "GET", "requestContext": { "resourcePath": "/", "httpMethod": "GET", "path": "/Prod/", ... }, "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "Host": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-5e66d96f-7491f09xmpl79d18acf3d050", ... }, "multiValueHeaders": { "accept": [ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ], "accept-encoding": [ "gzip, deflate, br" ], ... }, "queryStringParameters": null, "multiValueQueryStringParameters": null, "pathParameters": null, "stageVariables": null, "body": null, "isBase64Encoded": false }

Format respons

APIGateway menunggu respons dari fungsi Anda dan menyampaikan hasilnya ke pemanggil. Untuk integrasi kustom, Anda menentukan respons integrasi dan respons metode untuk mengonversi output dari fungsi menjadi HTTP respons. Untuk integrasi proksi, fungsi harus merespons dengan representasi respons dalam format tertentu.

Contoh berikut menunjukkan objek respons dari fungsi Node.js. Objek respons mewakili HTTP respons sukses yang berisi JSON dokumen.

contoh index.mjs - Objek respons integrasi proxy (Node.js)
var response = { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "isBase64Encoded": false, "multiValueHeaders": { "X-Custom-Header": ["My value", "My other value"], }, "body": "{\n \"TotalCodeSize\": 104330022,\n \"FunctionCount\": 26\n}" }

Runtime Lambda membuat serial objek respon ke dalam JSON dan mengirimkannya ke file. API APIParsing respon dan menggunakannya untuk membuat HTTP respon, yang kemudian dikirim ke klien yang membuat permintaan asli.

contoh HTTPrespon
< HTTP/1.1 200 OK < Content-Type: application/json < Content-Length: 55 < Connection: keep-alive < x-amzn-RequestId: 32998fea-xmpl-4268-8c72-16138d629356 < X-Custom-Header: My value < X-Custom-Header: My other value < X-Amzn-Trace-Id: Root=1-5e6aa925-ccecxmplbae116148e52f036 < { "TotalCodeSize": 104330022, "FunctionCount": 26 }

Izin

Amazon API Gateway mendapatkan izin untuk menjalankan fungsi Anda dari kebijakan berbasis sumber daya fungsi. Anda dapat memberikan izin pemanggilan ke seluruhAPI, atau memberikan akses terbatas ke tahap, sumber daya, atau metode.

Saat menambahkan API ke fungsi menggunakan konsol Lambda, menggunakan konsol API Gateway, atau dalam AWS SAM templat, kebijakan berbasis sumber daya fungsi akan diperbarui secara otomatis. Berikut ini adalah contoh kebijakan fungsi.

contoh kebijakan fungsi
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "nodejs-apig-functiongetEndpointPermissionProd-BWDBXMPLXE2F", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:nodejs-apig-function-1G3MXMPLXVXYI", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:execute-api:us-east-2:111122223333:ktyvxmpls1/*/GET/" } } } ] }

Anda dapat mengelola izin kebijakan fungsi secara manual dengan API operasi berikut:

Untuk memberikan izin pemanggilan ke yang sudah adaAPI, gunakan perintah. add-permission Contoh:

aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-get --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET/"

Anda akan melihat output berikut:

{ "Statement": "{\"Sid\":\"apigateway-test-2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET\"}}}" }
catatan

Jika fungsi API Anda dan berbeda Wilayah AWS, pengenal Wilayah di sumber ARN harus cocok dengan Wilayah fungsi, bukan Wilayah fungsi. API Ketika API Gateway memanggil fungsi, ia menggunakan sumber daya ARN yang didasarkan pada ARN fungsiAPI, tetapi dimodifikasi agar sesuai dengan Wilayah fungsi.

Sumber ARN dalam contoh ini memberikan izin untuk integrasi pada GET metode sumber daya root di tahap defaultAPI, dengan IDmnh1xmpli7. Anda dapat menggunakan tanda bintang di sumber ARN untuk memberikan izin ke beberapa tahapan, metode, atau sumber daya.

Pola sumber daya
  • mnh1xmpli7/*/GET/*— GET metode pada semua sumber daya di semua tahap.

  • mnh1xmpli7/prod/ANY/user— ANY metode pada user sumber daya di prod panggung.

  • mnh1xmpli7/*/*/* – Metode apa pun pada semua sumber daya di semua tahap.

Untuk perincian tentang melihat kebijakan dan menghapus pernyataan, lihat Bekerja dengan kebijakan berbasis sumber daya di Lambda IAM.

Aplikasi sampel

Aplikasi sampel APIGateway dengan Node.js menyertakan fungsi dengan AWS SAM templat yang membuat REST API yang mengaktifkan AWS X-Ray penelusuran. Ini juga mencakup skrip untuk menyebarkan, menjalankan fungsi, menguji, dan membersihkanAPI.