如何使用 Axum Rust 处理从 api 网关到 lambda 的不同路由 URL?

问题描述 投票:0回答:1

我有一个 rust lambda 来处理从 dynamo DB 获取数据。

当 API Gateway 将代理信息传递到 lambda 时会出现问题,它还在 URL 中包含 stage。例如,这里是 aws-rust-runtime 箱给出的 api_gateway 示例 json,其中包括

stage
=
testStage
.

这意味着路由现在必须在路由开头包含

testStage
,否则什么都不会匹配。这个:

pub fn get_router() -> axum::Router {
    Router::new()
        .route("/messages/message/:message_id", get(get_message))
        .route("/messages/message", post(create_message))
        ...
}

现在必须是

pub fn get_router() -> axum::Router {
    Router::new()
        .route("/testStage/messages/message/:message_id", get(get_message))
        .route("/testStage/messages/message", post(create_message))
        ...
}

在不同阶段和不同环境中使用 IaaC 部署此功能时,这是令人烦恼和有问题的。

有没有办法处理这个问题或者将其从API网关的路由中删除?

我认为可能有一种方法可以告诉 Axum 仅关注来自网关的有效负载的某些部分,但默认情况下,axum 正在获取整个 uri,如该跟踪所示

{method=GET uri=https://gy415nuibc.execute-api.us-east-2.amazonaws.com/testStage/messages/message/okay

rust aws-lambda aws-api-gateway rust-axum cargo-lambda
1个回答
0
投票

我认为最合适的方法是通过 AWS 控制台。您可以在自定义域名部分配置您的 API 映射,并将您的阶段

testStage
添加到您的 API GTW;这样,您的舞台将被AWS GTW“吸收”,并且登陆您的应用程序的路径是
/messages...

NB:我仍在寻找我最近遇到的关于此的

repost.aws
..

© www.soinside.com 2019 - 2024. All rights reserved.