Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

`AWS_LAMBDA_HTTP_IGNORE_STAGE_IN_PATH` does not ignore stage in API Gateway V2 (HTTP)

未关闭
#919 7 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 11 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
aws, rust
领域
api, backend

调研方向

首先,在启用 AWS_LAMBDA_HTTP_IGNORE_STAGE_IN_PATH 的情况下运行所提供的 Axum 和 API Gateway V2 复现,然后跟踪对 RequestContext::ApiGatewayV2 和环境变量的处理。完成的标准是 /v1/not-staged 请求能够到达 /not-staged 路由,同时带 stage 的路由仍能正常工作。

由索引模型根据 Issue 内容生成。

描述

The AWS_LAMBDA_HTTP_IGNORE_STAGE_IN_PATH env variable doesn't seem to work on API Gateway V2 (HTTP).

Example:

use axum::{response::Json, routing::get, Router};
use lambda_http::request::RequestContext::ApiGatewayV2;
use lambda_http::{run, tracing, Error};
use serde_json::{json, Value};

// Sample middleware that logs the request id
async fn mw_sample(
    req: axum::extract::Request,
    next: axum::middleware::Next,
) -> impl axum::response::IntoResponse {
    let context = req
        .extensions()
        .get::<lambda_http::request::RequestContext>();
    if let Some(ApiGatewayV2(ctx)) = context {
        tracing::info!("RequestId = {:?}", ctx);
    }
    next.run(req).await
}

async fn handler_sample() -> Json<Value> {
    Json(json!({ "echo":  "hello" }))
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    std::env::set_var("AWS_LAMBDA_HTTP_IGNORE_STAGE_IN_PATH", "true"); // ignore stages in routing

    tracing::init_default_subscriber();

    let app = Router::new()
        .route("/not-staged", get(handler_sample)) // stage not specified, not working
        .route("/v1/staged", get(handler_sample)) // stage specified, working
        .layer(axum::middleware::from_fn(mw_sample));

    run(app).await
}

Cargo.toml:

[package]
name = "test"
version = "0.1.0"
edition = "2021"

[dependencies]
axum = "0.7.5"
lambda_http = "0.13.0"
serde = "1.0.209"
serde_json = "1.0.127"
tokio = { version = "1", features = ["macros"] }

I will attach my Terraform code as well:

module "api_lambda_function" {
  source = "terraform-aws-modules/lambda/aws"

  function_name = "some-api"

  runtime       = "provided.al2023"
  architectures = ["arm64"]
  timeout       = 15

  create_package         = false
  // Change path to your bin
  local_existing_package = "../../../target/lambda/simple2/bootstrap.zip"
  handler                = "bootstrap"

  create_current_version_allowed_triggers = false
  allowed_triggers = {
    AllowExecutionFromAPIGateway = {
      service    = "apigateway"
      source_arn = "${aws_apigatewayv2_api.main.execution_arn}/*"
    }
  }
}

resource "aws_apigatewayv2_api" "main" {
  name          = "${local.name_prefix}-api"
  protocol_type = "HTTP"
}

resource "aws_apigatewayv2_stage" "v1" {
  api_id      = aws_apigatewayv2_api.main.id
  name        = "v1"
  auto_deploy = true
}

resource "aws_apigatewayv2_integration" "api_lambda" {
  api_id                 = aws_apigatewayv2_api.main.id
  integration_type       = "AWS_PROXY"
  integration_method     = "POST"
  integration_uri        = module.api_lambda_function.lambda_function_arn
  payload_format_version = "2.0"
  depends_on             = [module.api_lambda_function.lambda_function_arn]
}

resource "aws_apigatewayv2_route" "get_1" {
  api_id    = aws_apigatewayv2_api.main.id
  route_key = "GET /not-staged"
  target    = "integrations/${aws_apigatewayv2_integration.api_lambda.id}"
}

resource "aws_apigatewayv2_route" "get_2" {
  api_id    = aws_apigatewayv2_api.main.id
  route_key = "GET /staged"
  target    = "integrations/${aws_apigatewayv2_integration.api_lambda.id}"
}

Build with:

cargo lambda build --release --arm64 --output-format zip

And then apply Terraform.

When calling a /v1/staged route, response is returned:
image

But not for /v1/not-staged - response is 404:
image

Am I doing something wrong?
Can someone please suggest how to debug this issue?

主要语言
Rust
星标
3.6k
派生
398
平均合并
7 天 4 小时
30 天内合并 PR
3

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

aws/aws-lambda-rust-runtime 的其他 Issue

查看 aws/aws-lambda-rust-runtime 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。