如何使用 CDK 为 API 网关声明 $default catch-all 路由?

How can I declare the $default catch-all route using CDK for an API Gateway?

在 AWS 控制台中,可以将路由添加到值为 $default 的 API 网关。这将删除为路由输入 HTTP 方法的能力。

AWS 控制台将其描述为: “您还可以为每个 API 指定一个 $default 路由。当对 API 的请求不匹配其他路由时,将调用 $default 路由。”

我正在尝试使用 AWS CDK v2(在本例中为 C#)重新创建它,但是我没有运气。 我将我的 API 网关与基于存储在 ECR 中的图像的 Lambda 函数集成,不幸的是我无法使用 $default 路由创建我的 API 网关。

httpApi.AddRoutes(new AddRoutesOptions()
{
   Path = "$default",
   Integration = lambdaProxyIntegration
});

执行上述操作后,HTTP 方法默认为 POST。 也可以像这样指定一个 HTTP 方法:

httpApi.AddRoutes(new AddRoutesOptions()
{
   Path = "$default",
   Integration = lambdaProxyIntegration,
   Methods = new [] {HttpMethod.ANY}
});

但是没有等同于当您在 AWS 控制台中输入 $default 时的选项 & 它使下拉列表变灰为 select 一个 Http 方法。

有什么想法吗?

谢谢

问题解决了。

如此令人困惑,尽管 $default 包罗万象的路线,是一条路线。您实际上并没有使用 AddRoutes() 方法指定它。线索在于它需要一个名为 HttpMethod.

的枚举

相反,当您在 HttpApiHttpApiProps 对象上设置 DefaultIntegration 属性时,会自动应用 $default 路由。

所以在我的例子中,问题示例中的 httpApiHttpApi class.

的一个实例
var httpApi = new HttpApi(this, Constants.API_GATEWAY_ID, new HttpApiProps()
{
   ApiName = "Your API name",
   CreateDefaultStage = true,
   DefaultIntegration = lambdaProxyIntegration
});

一旦您指定 DefaultIntegration,AWS 将按预期设置 $default 路由。