首页 文章

将POST请求从CloudFront路由到Lambda

提问于
浏览
3

我有一个分布在CloudFront的网站,以S3为原点 . 我写了一个Lambda函数,它接受一个联系表单提交,并与SES一起发送电子邮件 . Lambda测试得很好:)

但是,在将来自CloudFront的POST请求路由到后端Lambda函数时,我很无能为力 . 我该怎么做呢?

Update: 好的,我似乎是从CloudFront调用它(或者更确切地说使用curl命令到我使用CloudFront设置的域) .

我是否需要在API网关中将我的域列为自定义域?

如果我在CloudFront行为中列出路径 /api/* ,是否必须在我的API网关设置中镜像该路径?那么,在添加特定资源之前,我的API网关是否需要以 /api 开头?

Update 2 我想我需要离开或删除API网关URL末尾的/ dev . 开发是我的舞台 .

Update 3 好的,现在感觉还有一步之遥 . 我震惊地看着我们多么复杂的桃子 . 除此之外,当我从curl或浏览器执行时,我得到MethodNotAllowed . 我是否需要向CloudFront添加IAM角色才能访问API网关?

Update 4 仍然无法正常工作 . 而现在,我又回到了我的常用404错误页面,即我的默认原点(S3) . 似乎无服务器是一个褪色的梦想 .

Update 5 尝试不同的方法,建议在这里:https://serverfault.com/a/839368想法是使用API网关's Custom Domain name features with a subdomain like api.example.com and then use a Route53 Alias record to direct subdomain traffic to API Gateway. This could work. Then CloudFront would handle traffic to example.com and www.example.com, and API Gateway would get requests to api.example.com. Now the challenging bit is that in HTML forms the action attribute will have to go to a different subdomain. Let'看看我们得到了什么样的错误和疯狂的行为:(

3 回答

  • 1

    首先,您将在Lambda函数前设置API网关,以便可以通过POST请求调用它 . 听起来你可能已经完成了那部分工作?

    然后,如果您希望POST通过CloudFront,您将在CloudFront中添加指向API网关的第二个源 .

  • 1

    这一切都是可能的,但配置起来很棘手 . 为了帮助我创建一个正确设置的open-source boilerplate app

    • 具有CloudFront和S3的静态站点

    • API网关和Lambda的API

    • 静态站点和API之间的CORS

    • 静态站点的可选OAuth 2.0和JWT cookie

    有关静态站点POST到Lambda支持的API的示例,请参阅this static JavaScript app .

  • 0

    取决于你对所有事情的看法:Invoke

    种类 - 最通用的调用 - HTTP就在那里,语言的API调用示例在doc的末尾引用 .

相关问题