如何在 AWS 上构建无服务器联系表单
关注
联系表单对于所有网站(无论大小)都至关重要。有许多服务可用于将联系表单嵌入到您自己的网站中,但本教程不介绍如何利用这些服务。相反,它通过专注于创建我们自己的联系表单架构的问题来学习一些Amazon
联系表单对于所有网站(无论大小)都至关重要。有许多服务可用于将联系表单嵌入到您自己的网站中,但本教程不介绍如何利用这些服务。相反,它通过专注于创建我们自己的联系表单架构的问题来学习一些 Amazon Web Services。在本指南结束时,我们将创建一个无服务器联系表单,并了解有关以下服务的更多信息:
- API 网关
- 拉姆达
- 简单电子邮件服务
{“email”: <contact-email>,“subject”: <contact-subject>,“message”: <contact-message>}此端点后面将有一个Lambda函数,它将请求正文转换为电子邮件。该电子邮件请求将发送到简单电子邮件服务(SES) 进行传递。有了这些部分,我们就可以创建一个发送消息的联系表单。
配置简单电子邮件服务以向我们发送电子邮件
在深入研究任何代码之前,我们需要配置简单电子邮件服务 (SES)。我们的 Lambda 函数将处理来自我们网站的消息并通过 SES 发送电子邮件。SES 是一款出色的电子邮件发送和接收产品。它提供高传递率、成本效益和非常可靠的电子邮件处理。在这篇文章中,我们将利用它来接收消息并将其发送到我们自己的白名单电子邮件地址。为了实现我们正在创建的项目,我们可以在 SES 沙盒环境中完成所有操作。沙盒环境具有以下限制:- 只能向SES邮箱模拟器或者您已经验证过的邮箱地址或域发送电子邮件。
- 每天限制发送 200 封电子邮件。
- 导航到 AWS 控制台中的简单电子邮件服务。
- 点击电子邮件地址
- 点击验证新电子邮件地址
- 输入您想要用于联系请求的电子邮件地址。
- 点击“验证此电子邮件地址”
- 检查您的电子邮件,查找主题为“Amazon Web Services – 电子邮件地址验证请求”的验证电子邮件
- 单击电子邮件中的链接来确认您的电子邮件地址。
设置初始 Lambda 函数以响应 API 网关触发器
您已完成 SES 设置了吗?您的电子邮件地址是经过验证的电子邮件地址,SES 可以向其发送电子邮件?那么您已经取得了巨大的进步。自 2014 年 11 月 Lambda 函数首次亮相以来,Amazon Web Services 已简化了它们的创建过程。过去,为不同的 AWS 事件配置 Lambda 既繁琐又容易出错。如今,初始设置更加简化且用户友好。这对我们来说非常好,但请注意,我们稍后必须进行一些进一步的调整。但首先,让我们从 API 网关端点设置并触发初始 Lambda。无服务器堆栈的主干是事件。事件启动计算资源的分配以完成某些操作。AWS中的触发器是将分配容器来执行 Lambda 函数中的代码的事件。在 AWS 中,Lambda 目前可以响应 17 种不同的事件。今天,我们通过 HTTP 端点利用 API 网关事件。将 HTTP 端点视为触发 Lambda 函数的事件。请求启动容器并将输入事件包含到我们的 Lambda 函数中。使用此输入,我们可以在代码中处理消息。我们如何开始并配置初始端点和 Lambda 函数:- 从 AWS 控制台导航到 Lambda。
- 单击创建函数
- 在蓝图输入中,输入“ api ”
- 单击NodeJs 6.10 中的蓝图“ microservice-http-endpoint ”。
- 对于“API 名称”,单击“输入值”,然后输入“联系人”
- 对于“部署阶段”,保留默认的“ prod ”选择。
- 对于“安全”,选择“打开”
- 单击下一步
- 输入“ ContactFormLambda ”作为您的函数名称。
- 输入有意义的描述,例如“ Process APIGW POST to /contact ”
- 选择“ Node.js 6.10 ”作为运行时。
- 现在,我们将在内联代码部分输入此样板代码:
- 在“Lambda 函数处理程序和角色”中,将处理程序保留为“ index.handler ”。角色应为“从模板创建新角色”。对于角色名称,输入“ ses-contact-form-lambda ”。对于策略模板,选择“简单微服务权限”注意:我们稍后将围绕这些领域进行更多配置。
- 单击下一步
- 单击创建函数
- 将代理 HTTP(S) 请求的 API 网关端点。
- 您的 API 网关端点触发的 Lambda 函数。
- 具有 Lambda 基本执行策略的IAM 角色“ ses-contact-form-lambda ”。
配置您的 IAM 角色以通过 SES 发送电子邮件
在开始编写 Lambda 函数之前,我们需要暂停一下并配置ses-contact-form-lambda IAM 角色。目前,该角色不允许使用SES 中的sendEmail API。为了使其非常轻量,我们将创建一个新的 IAM 策略,该策略仅包含我们需要授予访问权限的 SES 上的 API。- 从 AWS 控制台导航到 IAM。
- 点击“策略”
- 单击“创建策略”
- 选择“创建您自己的政策”
- 输入“ contact-form-send-email-policy ”作为名称。
- 配置策略文档如下:
- 单击“创建策略”
- 从 AWS 控制台导航到 IAM。
- 单击角色
- 在搜索中输入“ ses-contact-form-lambda ”
- 单击“ ses-contact-form-lambda ”角色。
- 单击附加策略
- 选择“ contact-form-send-email-policy ”
- 单击附加策略
通过 Lambda 函数通过 SES 发送电子邮件
现在,我们已经为无服务器联系流准备好了所有最终的基础设施。只需单击几下按钮,然后,我们就有了 API 网关、Lambda 函数和 IAM 角色。非常巧妙,对吧?此时,基础设施尚未准备好迎接黄金时段。我们稍后会做到这一点,但首先让我们添加通过 SES 从 Lambda 函数发送电子邮件的代码。我们的函数中没有外部依赖项。因此,我们可以内联编辑代码。如果我们要创建需要其他 NPM 模块的 Lambda 函数,则需要在 AWS 控制台之外进行开发。原因是当将 zip 文件上传到 Lambda 时,必须包含 NPM 包。但这不是本项目的重点。我们将内联编辑代码,因为我们没有外部依赖项。- 从 AWS 控制台导航到 Lambda。
- 单击“ ContactFormLambda ”函数。
- 在内联编辑器中输入以下代码:
表演时间 - 测试您的端点的时间
您已将 Lambda 函数代码更新为上述内容。您已将sesConfirmedAddress设置为已验证的 SES 电子邮件。Lambda 的 IAM 角色可以访问Simple Email Service 的sendEmail API。我们剩下的就是测试它是否有效。正如古老的谚语所说,如果你没有测试过它,那么它就不会起作用。就这个项目而言,我指的是通过使用它并观察结果来验证它是否有效。如果我们要构建一个完整的生产应用程序,我们还应该在这里进行其他级别的测试。单元测试和集成测试将是很好的补充。但对于这个简单的联系流程,我们只需确保它在我们的 API 网关中有效即可。- 从 AWS 控制台导航到 API 网关。
- 点击“联系人”API。
- 单击“ /ContactFormLambda ”资源下的ANY。
- 点击测试
- 选择“POST”作为方法。
- 在请求正文中输入以下内容:
- 单击“测试”
- 方法已完成,状态为:200 -- 太棒了,成功了!请查看您的电子邮件。
- 方法已完成,状态为:500 -- 糟糕,坏了。该检查日志了。
- 方法已完成,状态为:502 -- 配置错误。该检查日志了。
- 从 AWS 控制台导航到 CloudWatch。
- 点击日志
- 在“日志组名称前缀”中输入“ /aws/lambda/ContactFormLambda ”
- 单击“ /aws/lambda/ContactFormLambda ”
- 出现意想不到的拼写错误
- 没有将正确的 IAM 策略分配给正确的 IAM 角色
- Lambda 函数配置错误——内存分配或时间分配不正确
启用 CORS 并发布你的 API
在您的 API 准备好投入使用之前,您还需要进行最后几个调整。我们需要做的第一件事是在我们的 API 端点上启用跨源资源共享 (CORS)。这将授予端点对我们指定的域的访问权限。最后一件事是将我们的 API 发布到公共阶段。首先,让我们继续为该端点启用 CORS:- 从 AWS 控制台导航到 API 网关。
- 点击“联系人”API。
- 单击“ ContactFormLambda ”资源。
- 单击操作
- 选择“启用 CORS ”
- 在“ Access-Control-Allow-Origin ”中输入您要从中调用此端点的网站的 URL。如果您不确定,请将其保留为“*”,这将允许任何域。
- 单击<font style="vertical-
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
阅读全文

请先 登录后发表评论 ~