【发布时间】:2019-07-03 21:24:31
【问题描述】:
我目前有一个 Lambda 函数,在我测试它时可以工作(它是一个用于订阅用户列表的 Mailchimp 集成)。
See my lambda function here on Github
我通过 lambda 使用 API 网关创建了一个 API 端点。
但是,当我在我的应用程序上测试它时(当前通过 localhost:3000,我收到来自 API 网关的 CORS 错误:
Access to XMLHttpRequest at 'https://MY_API.execute-api.us-west-2.amazonaws.com/default/mailchimp-lambda' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我尝试了多种方法:
- 按照https://serverless.com/blog/cors-api-gateway-survival-guide/ 的建议添加 npm 包 middy
- 在 lambda 中使用回调并按照此问题的建议添加 CORS:Configure CORS response headers on AWS Lambda?
谁能解释如何访问 lambda 函数?
【问题讨论】:
-
看起来你没有启用 cors。这可能会对您有所帮助:docs.aws.amazon.com/apigateway/latest/developerguide/…
-
我通过 API Gateway 控制台启用了 CORS:✔ 创建 OPTIONS 方法✔ 向 OPTIONS 方法添加具有空响应模型的 200 方法响应✔ 向 OPTIONS 方法添加模拟集成✔ 向 OPTIONS 方法添加 200 集成响应✔ 添加Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control-Allow-Origin 方法 OPTIONS 方法的响应标头 ✔ 添加 Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control -Allow-Origin 集成响应标头映射到 OPTIONS 方法
-
那之后你重新部署了api网关吗?
-
@deosha 是的,我重新部署了,我还在声明中添加了一个资源策略,包括“Principal”:“*”,但无济于事。另外,我正在查看 CloudWatch 日志,我正在控制台记录事件,并且 event.body 来自我的浏览器时为空,但它是通过 Postman 定义的。它说 httpMethod 是 OPTIONS 这很奇怪,我认为 lambda 函数不会在自动 OPTIONS 请求期间运行。
-
你在 API Gateway 配置->Gateway Responses-> Default 4XX 中的配置是什么?可以在那边加上 Access-Control-Allow-Origin: '* 重新部署再检查一下吗?
标签: cors aws-lambda aws-api-gateway