Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memanggil Fungsi Peristiwa Lambda menggunakan titik akhir Amazon API Gateway
Anda dapat membuat API web dengan titik akhir HTTP untuk Fungsi Peristiwa Lambda menggunakan Amazon API Gateway. API Gateway menyediakan alat untuk membuat dan mendokumentasikan API web yang merutekan permintaan HTTP ke Fungsi Peristiwa Lambda. Anda dapat mengamankan akses ke API Anda dengan kontrol autentikasi dan otorisasi. API Anda dapat melayani lalu lintas melalui internet atau hanya dapat diakses di dalam VPC Anda.
Tip
Lambda menawarkan dua cara untuk menjalankan fungsi Anda melalui titik akhir HTTP: API Gateway dan URL fungsi Lambda. Jika Anda tidak yakin metode mana yang terbaik untuk kasus penggunaan Anda, lihatPilih metode untuk memanggil Fungsi Peristiwa Lambda Anda menggunakan permintaan HTTP.
Sumber daya di API Anda menentukan satu atau beberapa metode, seperti GET atau POST. Metode memiliki integrasi yang merutekan permintaan ke Fungsi Peristiwa 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. Metode ANY menangkap semua metode HTTP.
Memilih jenis API
API Gateway mendukung tiga jenis API yang menjalankan Fungsi Peristiwa Lambda:
-
HTTP API: RESTful API yang ringan dan latensi rendah.
-
REST API: RESTful API yang dapat disesuaikan dan kaya fitur.
-
WebSocket API: API web yang memelihara koneksi persisten dengan klien untuk komunikasi dupleks penuh.
API HTTP dan REST API adalah API RESTful yang memproses permintaan HTTP dan mengembalikan respons. API HTTP lebih baru dan dibangun dengan API dari API Gateway versi 2. Fitur berikut adalah fitur baru untuk API HTTP:
Fitur HTTP API
-
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 URL API Anda. Untuk tahap yang diberi nama, Anda harus menyertakan nama tahap di awal jalur. -
Konfigurasi CORS – Anda dapat mengonfigurasi API Anda untuk menambahkan header CORS ke respons keluar, alih-alih menambahkannya secara manual dalam kode fungsi Anda.
REST API adalah API RESTful yang didukung oleh API Gateway sejak peluncuran. REST API saat ini memiliki lebih banyak kustomisasi, integrasi, dan fitur manajemen.
Fitur REST API
-
Tipe integrasi – REST API 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 API mendukung lebih banyak opsi untuk autentikasi dan otorisasi.
-
Pemantauan dan penelusuran — REST API mendukung opsi AWS X-Ray penelusuran dan pencatatan tambahan.
Untuk perbandingan mendetail, lihat Memilih antara API HTTP dan REST API di Panduan Pengembang API Gateway.
WebSocket API juga menggunakan API Gateway API versi 2 dan mendukung set fitur serupa. Gunakan WebSocket API untuk aplikasi yang mendapat manfaat dari koneksi persisten antara klien dan API. WebSocket API menyediakan komunikasi dupleks penuh, yang berarti bahwa klien dan API dapat mengirim pesan terus menerus tanpa menunggu respons.
API HTTP mendukung format peristiwa yang disederhanakan (versi 2.0). Untuk contoh peristiwa dari API HTTP, lihat Membuat integrasi AWS Lambda proxy untuk API HTTP di API Gateway.
Untuk informasi selengkapnya, lihat Membuat integrasi AWS Lambda proxy untuk API HTTP di API Gateway.
Menambahkan titik akhir ke Fungsi Acara Lambda Anda
Untuk menambahkan titik akhir publik ke Fungsi Acara Lambda Anda
Buka halaman Fungsi Acara
konsol Lambda. -
Pilih fungsi.
-
Di bagian Gambaran umum fungsi, pilih Tambah pemicu.
-
Pilih API Gateway.
-
Pilih Buat API atau Gunakan API yang ada.
-
API Baru: Untuk jenis API, pilih HTTP API. Untuk informasi selengkapnya, lihat Memilih jenis API.
-
API yang ada: Pilih API dari daftar dropdown atau masukkan ID API (misalnya, r3pmxmplak).
-
-
Untuk Keamanan, pilih Terbuka.
-
Pilih Tambahkan.
Integrasi proxy
API dari API Gateway terdiri atas tahap, sumber daya, metode, dan integrasi. Tahap dan sumber daya menentukan jalur titik akhir:
Format jalur API
-
/prod/– Tahapproddan sumber daya root. -
/prod/user– Tahapproddan sumber dayauser. -
/dev/{proxy+}– Rute mana pun di tahapdev. -
/– (API HTTP) Tahap default dan sumber daya akar.
Integrasi Lambda memetakan jalur dan kombinasi metode HTTP ke Fungsi Peristiwa Lambda. Anda dapat mengonfigurasi API Gateway untuk mengirimkan badan permintaan HTTP sebagaimana 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 API Gateway.
Format peristiwa
Amazon API Gateway memanggil fungsi Anda secara sinkron dengan kejadian yang berisi representasi JSON permintaan HTTP. Untuk integrasi kustom, kejadian adalah badan dari permintaan. Untuk integrasi proksi, kejadian memiliki struktur yang telah ditentukan. Untuk contoh peristiwa proxy dari API REST API Gateway API, lihat Format input fungsi Lambda untuk integrasi proxy di Panduan Pengembang API Gateway.
Format respons
API Gateway menunggu respons dari fungsi Anda dan menyampaikan hasilnya kepada pemanggil. Untuk integrasi kustom, Anda menentukan respons integrasi dan respons metode untuk mengonversi output dari fungsi menjadi respons HTTP. Untuk integrasi proksi, fungsi harus merespons dengan representasi respons dalam format tertentu.
Contoh berikut menunjukkan objek respon dari Node.js fungsi. Objek respons mewakili respons HTTP yang berhasil yang berisi dokumen JSON.
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 menyusun objek respons menjadi JSON dan mengirimkannya ke API. API menguraikan respons dan menggunakannya untuk membuat respons HTTP, yang kemudian dikirimkan ke klien yang membuat permintaan asal.
contoh Respons HTTP
< 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 memanggil fungsi Anda dari kebijakan berbasis sumber daya milik fungsi tersebut. Anda dapat memberikan izin invokasi kepada seluruh API, atau memberikan akses terbatas kepada suatu tahap, sumber daya, atau metode.
Saat Anda menambahkan API ke fungsi Anda dengan menggunakan konsol Lambda, menggunakan konsol API Gateway, atau dalam templat AWS SAM , kebijakan berbasis sumber daya milik fungsi tersebut akan diperbarui secara otomatis. Berikut ini adalah contoh kebijakan fungsi.
contoh kebijakan fungsi
Anda dapat mengelola izin kebijakan fungsi secara manual dengan operasi API berikut:
Untuk memberikan izin invokasi kepada API yang sudah ada, 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 dan API Anda berbeda Wilayah AWS, pengenal Region di ARN sumber harus cocok dengan Region fungsi, bukan Region API. Saat API Gateway memanggil fungsi, ia menggunakan ARN sumber daya yang didasarkan pada ARN API, tetapi dimodifikasi agar sesuai dengan Wilayah fungsi.
ARN sumber dalam contoh ini memberikan izin ke integrasi di metode GET dari sumber daya akar di tahap default API, dengan mnh1xmpli7 ID. Anda dapat menggunakan tanda bintang di ARN sumber untuk memberikan izin untuk beberapa tahap, metode, atau sumber daya.
Pola sumber daya
-
mnh1xmpli7/*/GET/*– Metode GET di semua sumber daya di semua tahap. -
mnh1xmpli7/prod/ANY/user– Metode ANY pada sumber dayauserdi tahapprod. -
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.
Aplikasi sampel
API Gateway dengan
Penangan acara dari Powertools untuk AWS Lambda
Event handler dari Powertools for AWS Lambda toolkit menyediakan routing, middleware, konfigurasi CORS, pembuatan spesifikasi OpenAPI, validasi permintaan, penanganan kesalahan, dan fitur berguna lainnya saat menulis Lambda Event Functions yang dipanggil oleh titik akhir API Gateway (HTTP atau REST). Utilitas event handler tersedia untuk TypeScript/JavaScript Python dan. Untuk informasi selengkapnya, lihat Event Handler REST API dalam dokumentasi Powertools for AWS Lambda (Python) dan Event Handler HTTP API dalam dokumentasi Powertools for Lambda (). AWS TypeScript
Python
from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler import APIGatewayRestResolver from aws_lambda_powertools.logging import correlation_paths from aws_lambda_powertools.utilities.typing.lambda_context import LambdaContext app = APIGatewayRestResolver() logger = Logger() @app.get("/healthz") def ping(): return {"message": "health status ok"} @logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) def lambda_handler(event: dict, context: LambdaContext) -> dict: return app.resolve(event, context)
TypeScript
import { Router } from '@aws-lambda-powertools/event-handler/experimental-rest'; import { Logger } from '@aws-lambda-powertools/logger'; import { correlationPaths, search, } from '@aws-lambda-powertools/logger/correlationId'; import type { Context } from 'aws-lambda/handler'; const logger = new Logger({ correlationIdSearchFn: search, }); const app = new Router({ logger }); app.get("/healthz", async () => { return { message: "health status ok" }; }); export const handler = async (event: unknown, context: Context) => { // You can continue using other utilities just as before logger.addContext(context); logger.setCorrelationId(event, correlationPaths.API_GATEWAY_REST); return app.resolve(event, context); };