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 API Gateway
Anda dapat membuat API web dengan titik akhir HTTP untuk fungsi Lambda Anda dengan menggunakan Amazon API Gateway. API Gateway menyediakan alat untuk membuat dan mendokumentasikan API web yang merutekan permintaan HTTP ke fungsi 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 memanggil 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 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 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 tipe API yang memanggil fungsi Lambda:
-
HTTP API: API RESTful yang ringan dan latensi rendah.
-
REST API: API RESTful yang dapat disesuaikan dan kaya fitur.
-
WebSocket API: API web yang mempertahankan 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 pelac akan — REST API mendukung AWS X-Ray penelusuran dan opsi pencatatan tambahan.
Untuk perbandingan terperinci, lihat Memilih antara API HTTP dan REST API di Panduan Pengembang API Gateway.
WebSocket API juga menggunakan API Gateway versi 2 API 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 tanggapan.
API HTTP mendukung format peristiwa yang disederhanakan (versi 2.0). Untuk contoh peristiwa dari HTTP API, 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 Lambda Anda
Untuk menambahkan titik akhir publik ke fungsi Lambda Anda
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi.
-
Di bagian Gambaran umum fungsi, pilih Tambah pemicu.
-
Pilih API Gateway.
-
Pilih Buat API atau Gunakan API yang sudah ada.
-
API Baru: Untuk tipe 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 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, 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 respons dari suatu 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 Wilayah di ARN sumber harus cocok dengan Wilayah fungsi, bukan Wilayah API. Ketika API Gateway memanggil fungsi, ia menggunakan ARN sumber daya yang didasarkan pada ARN API, tetapi dimodifikasi agar sesuai dengan Region 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 Melihat kebijakan IAM berbasis sumber daya di Lambda.
Aplikasi sampel
API Gateway dengan aplikasi Node.js
Penangan acara dari Powertools untuk AWS Lambda
Event handler dari toolkit Powertools for AWS Lambda menyediakan routing, middleware, konfigurasi CORS, pembuatan spesifikasi OpenAPI, validasi permintaan, penanganan kesalahan, dan fitur berguna lainnya saat menulis fungsi Lambda yang dipanggil oleh titik akhir API Gateway (HTTP atau REST). Utilitas event handler tersedia untuk Python dan TypeScript/JavaScript. Untuk informasi selengkapnya, lihat Event Handler REST API dalam dokumentasi Powertools for AWS Lambda (Python) dan Event Handler HTTP API di dokumentasi Powertools for AWS Lambda (). 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); };