

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
<a name="rust-http-events"></a>

Amazon API Gateway APIs, Application Load Balancers, dan [fungsi Lambda URLs](urls-configuration.md) dapat mengirim peristiwa HTTP ke Lambda. Anda dapat menggunakan peti [aws\$1lambda\$1events dari crates.io untuk memproses peristiwa](https://crates.io/crates/aws_lambda_events) dari sumber-sumber ini.

**Example — Menangani permintaan proxy API Gateway**  
Perhatikan hal-hal berikut:  
+ `use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}`: Peti [aws\$1lambda\$1events mencakup banyak acara](https://crates.io/crates/aws-lambda-events) 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](https://crates.io/crates/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](https://github.com/aws/aws-lambda-rust-runtime) 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 fungsi Lambda URLs, Application Load Balancers, dan API Gateway.

**catatan**  
[Peti [lambda\$1http](https://crates.io/crates/lambda_http) menggunakan peti lambda\$1runtime di bawahnya.](https://crates.io/crates/lambda_runtime) Anda tidak perlu mengimpor `lambda_runtime` secara terpisah.

**Example — 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 menggunakan`lambda_http`, lihat [contoh kode http-axum](https://github.com/aws/aws-lambda-rust-runtime/blob/main/examples/http-axum/src/main.rs) pada repositori Labs. AWS GitHub 

**Contoh acara HTTP Lambda untuk Rust**
+ [Peristiwa HTTP Lambda](https://github.com/aws/aws-lambda-rust-runtime/tree/main/examples/http-basic-lambda): Fungsi Rust yang menangani peristiwa HTTP.
+ [Peristiwa Lambda HTTP dengan header CORS](https://github.com/aws/aws-lambda-rust-runtime/blob/main/examples/http-cors): Fungsi Rust yang menggunakan Tower untuk menyuntikkan header CORS.
+ [Peristiwa HTTP Lambda dengan sumber daya bersama](https://github.com/aws/aws-lambda-rust-runtime/tree/main/examples/basic-shared-resource): Fungsi Rust yang menggunakan sumber daya bersama yang diinisialisasi sebelum penangan fungsi dibuat.