You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# AWS SDK在API Gateway非根资源创建Lambda代理集成遇阻

解决API Gateway非根路由Lambda代理集成权限与配置问题

核心问题:Lambda权限的SourceArn格式错误

你的代码中Lambda权限的SourceArn路径规则完全写反了,这会导致API Gateway无法获得正确的Lambda调用权限,进而出现"函数无法找到"的权限类错误。

AWS Execute API的ARN格式为:

arn:aws:execute-api:<region>:<account-id>:<api-id>/<stage>/<method>/<resource-path>

其中通配符*可匹配任意阶段、HTTP方法。针对你的场景:

  • 基础路由(如/auth)的SourceArn需匹配该路径下的所有请求
  • 代理路由(如/auth/{proxy+})的SourceArn需匹配基础路径后的任意子路径

修正后的Lambda.AddPermissions代码如下:

var basePermission = await c.AddPermissionAsync(new AddPermissionRequest
{
    Action = "lambda:InvokeFunction",
    FunctionName = name,
    Principal = "apigateway.amazonaws.com",
    // 匹配基础路径 /path 的所有请求
    SourceArn = $"arn:aws:execute-api:{region}:{account}:{apiId}/*/*/{path}",
    StatementId = Guid.NewGuid().ToString()
});
var proxyPermission = await c.AddPermissionAsync(new AddPermissionRequest
{
    Action = "lambda:InvokeFunction",
    FunctionName = name,
    Principal = "apigateway.amazonaws.com",
    // 匹配 /path/{proxy+} 的所有子路径请求
    SourceArn = $"arn:aws:execute-api:{region}:{account}:{apiId}/*/*/{path}/*",
    StatementId = Guid.NewGuid().ToString()
});
                
return new List<string>
{
    basePermission.Statement,
    proxyPermission.Statement
};

额外检查点

  • 确认Lambda函数ARN完整性:确保functionArn是完整的Lambda资源ARN,若使用版本或别名,需在ARN末尾添加:$LATEST或具体版本号(如:v1),否则API Gateway可能无法定位到正确的函数版本。
  • 验证集成Uri区域一致性:确保region参数与Lambda函数所在区域完全一致,避免跨区域调用导致的权限或网络问题。
  • 确认部署生效:你的代码已包含CreateDeploymentAsync调用,但需确保environment参数是正确的阶段名称,否则修改后的配置不会生效。

内容的提问来源于stack exchange,提问作者hcerim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:28