Memproses peristiwa HTTP dengan Rust - AWS Lambda

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

Memproses peristiwa HTTP dengan Rust

catatan

Klien runtime Rust adalah paket eksperimental. Hal ini dapat berubah dan dimaksudkan hanya untuk tujuan evaluasi.

API Amazon API Gateway, Application Load Balancers, dan URL fungsi Lambda dapat mengirim peristiwa HTTP ke Lambda. Anda dapat menggunakan peti aws_lambda_events dari crates.io untuk memproses peristiwa dari sumber-sumber ini.

contoh — Menangani permintaan proxy API Gateway

Perhatikan hal berikut:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}: Peti aws_lambda_events mencakup banyak acara Lambda. Untuk mengurangi waktu kompilasi, gunakan flag fitur untuk mengaktifkan acara yang Anda butuhkan. Contoh:aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }.

  • use http::HeaderMap: Impor ini mengharuskan Anda untuk menambahkan peti http ke dependensi Anda.

use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}; use http::HeaderMap; use lambda_runtime::{service_fn, Error, LambdaEvent}; async fn handler( _event: LambdaEvent<ApiGatewayProxyRequest>, ) -> Result<ApiGatewayProxyResponse, Error> { let mut headers = HeaderMap::new(); headers.insert("content-type", "text/html".parse().unwrap()); let resp = ApiGatewayProxyResponse { status_code: 200, multi_value_headers: headers.clone(), is_base64_encoded: false, body: Some("Hello AWS Lambda HTTP request".into()), headers, }; Ok(resp) } #[tokio::main] async fn main() -> Result<(), Error> { lambda_runtime::run(service_fn(handler)).await }

Klien runtime Rust untuk Lambda juga menyediakan abstraksi atas jenis acara ini yang memungkinkan Anda bekerja dengan tipe HTTP asli, terlepas dari layanan mana yang mengirimkan peristiwa. Kode berikut ini setara dengan contoh sebelumnya, dan berfungsi di luar kotak dengan URL fungsi Lambda, Application Load Balancers, dan API Gateway.

catatan

Peti lambda_http menggunakan peti lambda_runtime di bawahnya. Anda tidak perlu mengimpor lambda_runtime secara terpisah.

contoh — Menangani permintaan HTTP
use lambda_http::{service_fn, Error, IntoResponse, Request, RequestExt, Response}; async fn handler(event: Request) -> Result<impl IntoResponse, Error> { let resp = Response::builder() .status(200) .header("content-type", "text/html") .body("Hello AWS Lambda HTTP request") .map_err(Box::new)?; Ok(resp) } #[tokio::main] async fn main() -> Result<(), Error> { lambda_http::run(service_fn(handler)).await }

Untuk contoh lain tentang cara menggunakanlambda_http, lihat contoh kode http-axum pada repositori Labs. AWS GitHub

Contoh acara HTTP Lambda untuk Rust