如何使用 CDK 为 CORS 正确配置 APIGateway

How to correctly configure APIGateway for CORS using the CDK

我有一个由 AWS ApiGateway 提供的 API,由 AWS Lambda 函数支持并使用 CDK 进行配置。 API 已配置默认 CORS 设置:

const api = new apiGateway.RestApi(this, "comments-api", {
  defaultCorsPreflightOptions: { allowOrigins: apiGateway.Cors.ALL_ORIGINS }
})

const comments = api.root.addResource("comments")

const comment = comments.addResource("{post_slug}")

comment.addMethod("GET", new apiGateway.LambdaIntegration(listCommentsFunction))

这似乎只为我的 API 提供了 部分 的 CORS 配置。

这使得 CDK 构造中的 CORS 配置选项 不是特别有用 - 因为对我来说忽略该设置似乎更明智 手动 配置来自我的 Lambda 的 OPTIONS 响应,方法是将其更改为:

const api = new apiGateway.RestApi(this, "comments-api")

const comments = api.root.addResource("comments")
const comment = comments.addResource("{post_slug}")

comment.addMethod("GET", new apiGateway.LambdaIntegration(listCommentsFunction))
comment.addMethod("OPTIONS", new apiGateway.LambdaIntegration(listCommentsFunction))

然后确保我的 lambda 始终以正确的 headers 响应。如果我 这样做,那么我将使用 两种 不同的机制来补充我对 CORS headers 的响应; CDK 堆栈配置和显式处理程序逻辑。这感觉像一种气味。

出于这个原因,我想知道我是否配置错误,并且有一种方法可以使用 CDK 将响应配置为正确水合。

CDK 为 OPTIONS 方法生成的代码正在使用响应覆盖 - https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html

此选项在您用于 GET 方法的 lambda 代理集成中不可用。除了在 lambda 源代码级别计算 CORS headers 之外,我确实没有找到任何其他选择。

P.S.: 我写了 https://milangatyas.com/Blog/Detail/14/setup-cors-for-amazon-api-gateway-via-aws-cdk 在那里你可以得到更详细的信息。