无服务器Express

2020-05-28 10:56:38

TLDR-将现有的Express.js应用程序轻松托管到AWS Lambda和AWS HTTP API with Serverless Express上的廉价、可自动扩展的无服务器基础设施上。它打包了大量可投入生产的功能,如自定义域、SSL证书、金丝雀部署,每个请求的费用约为0.000003美元。

如果您只是想托管一个常见的Express.js Node.js应用程序,让它自动扩展到数十亿个请求,并且只在使用时才向您收费,我们为您准备了一些特别的东西……。

宣布推出无服务器Express,这是一款无服务器框架产品,使您能够在AWS Lambda和新的AWS HTTP API上轻松托管和管理Express.js应用程序,其速度比最初的API Gateway产品快60%,成本低71%。

无服务器Expess是一种纯粹的Express.js体验,对于那些想要专注于应用程序而不是基础设施复杂性的人来说,它是完美的。

实时日志记录-使用CLI中的实时日志和错误在云上快速开发。

自定义域+SSL-使用免费的AWS ACM SSL证书自动配置自定义域。

以下是如何开始并交付基于无服务器Express.js的API,该API具有自定义域、免费SSL证书等等!您还可以查看我们的无服务器全栈应用程序样板,其中包括真实示例中的无服务器Express,该示例以数据库、使用React的网站等为特色。

Serverless Express是一个无服务器框架组件(即针对流行的无服务器用例的高级体验),您需要安装Node.js和无服务器框架CLI才能使用它。

最后,无服务器Express部署到您自己的Amazon Web Services帐户,因此您需要访问您拥有的AWS帐户的访问密钥。请按照本指南进行创建。

创建AWS访问密钥后,您可以将其直接添加到您安装的模板根目录下的.env文件中,或引用.env文件中的AWS配置文件。

如果您不包含.env文件,无服务器框架将自动在您计算机的根文件夹中查找默认的AWS配置文件。

此外,无服务器框架有一个内置的阶段概念。如果您更改了阶段,它将部署一个完全独立的无服务器应用程序副本。

更棒的是,只需使用以下约定,您就可以为每个阶段使用不同的.env文件:

最后一个经常被忽略的步骤是通过在模板中运行npmi来安装Express.js依赖项。

现在,您可以进行部署了。模板应该开箱即用,因此运行此命令以启动并运行.。

无服务器快递将调配所有基础设施,并在几秒钟内将您的代码上传到其中。尽管如此,第一次部署总是比其他部署花费更长的时间。

大多数人喜欢在本地运行Express应用程序,您完全可以像往常一样在本地启动Express应用程序。

然而,本地模拟与在真正的无服务器基础设施上运行完全不同,当您将其推向生产时,会导致令人惊讶的错误。

此外,您很可能最终会通过Express.js API使用其他云资源,并且您希望确保一切都能很好地协同工作。

因此,我们衷心建议您在真实的云环境(AWS Lambda)上进行开发-无服务器Express提供了一些强大的功能,可以通过外观和感觉上的本地化体验来帮助您做到这一点。

无服务器Express可实现快速部署,并可从您的实时AWS Lambda进行实时日志记录。要开始,只需运行:

现在,您每次保存时,您的无服务器Express都会将您的更改快速推送到云中。此外,如果所有API请求、日志语句和错误都将流入您的终端。应该如下所示:

无服务器快递可能很简单,但这并不意味着它不强大或不能自定义。它的特点是最好的默认设置,但当您准备好接受更多的默认设置时,就会有大量的可能性。

本教程是使用Serverless Express版本1.0.8编写的,在撰写本文时,该版本支持以下所有配置选项。

[email protected]#(必填)组件的名称。那样的话,那是快递的。Express-API#(必需)Express组件实例的名称。开发人员#(可选)无服务器仪表板阶段。默认值为dev。./#(可选)源文件夹的路径。默认是hello world应用程序。512#(可选)λ内存大小。10#(可选)λ超时。My Express App#(可选)lambda&;API网关描述。#(可选)env变量。EXPRESS:*&##此EXPRESS特定环境变量将打印EXPRESS调试日志。MY-CUSTOM-ROLE-NAME#(可选)用于设置自定义权限的自定义AWS IAM角色名称。0.2#(可选)要应用于此部署的流量百分比。#(可选)要附加到lambda函数的lambda层Arn列表。-arn:aws:first:layer-arn:aws:Second:layer api.serverless.com#(可选)如果域名是通过AWS Route53在您要部署到的帐户上注册的,它将自动使用您的Express应用程序的API网关以及免费的AWS ACM SSL证书进行设置。要部署到的美国-东部-2#(可选)AWS区域。默认值为US-EAST-1。

下面介绍如何在AWS Route53上轻松设置自定义域和SSL证书。您还可以按照下一节添加在AWS Route53外部注册的自定义域。

要设置在AWS Route53上购买的自定义域名,请确保您的域名处于已注册状态,并且位于运行Express.js应用程序的同一AWS账户中。

一旦此域的状态从";挂起";变为";已注册";,只需将以下配置添加到您的serverless.yml.。

然后,Serverless Express会将您的自定义域添加到您的API中,并自动设置一个通过它认证的SSL,这样您就可以拥有一个可投入生产的Express.js API。

不要忘记在不同的阶段使用.env文件,以便在不同的环境中使用不同的域。

如果您的域不在AWS Route53上,则必须手动设置,因为该组件无权访问您的注册商。以下是涉及的一般步骤:

为您的域创建AWS ACM证书。确保将";Additional Names";字段也设置为*.youdomain.com,以包括所有子域。

创建证书后,它应该处于PENDING_VALIDATION状态。现在您需要验证域。我们建议您遵循DNS步骤,通过您的注册商控制面板将您在AWS控制台上看到的验证CNAME记录添加到您的域中。

添加验证记录后,可能需要一段时间,但最终证书的状态应该更改为“已颁发”。通常需要5分钟左右。

如上所述,将您的域添加到serverless.yml文件并进行部署。这一步很重要,因为它会将您的域添加到API网关。

请注意作为输出返回的区域URL。复制此URL,返回给您的注册商,并添加另一个CNAME记录,其中包含您的域名或子域名以及此区域url的值。这可确保您的域指向该CloudFront URL。

大约20分钟后,您的SSL证书和域应该都可以正常工作并指向您的URL。请记住,如果您更改serverless.yml中的名称、阶段、应用程序或组织属性,这将导致使用新的CloudFront url创建一个全新的实例。这允许您为每个阶段或实例设置不同的域。

通过减少代码大小,您的Express应用程序实际上会在AWS Lambda环境中执行得更好,从而实现更快的API。减少代码大小的一个很好的方法是将其与webpack、Parcel或其他公司捆绑在一起。

为此,您可以修改src输入以在部署之前运行挂钩脚本,如下所示:

在规模上,当您想要将更改推送给一小部分用户时,Serverless Express提供了轻松的金丝雀部署!

这使您可以推出您的应用程序的一个版本(包含您认为有风险的代码更改),该版本只服务于您指定的一定百分比的流量(0-99%)。这允许您以很小的风险测试较大的更改。

这告诉Serverless Express为50%的API请求提供新的(可能有风险的)代码,为其他50%的请求提供旧的(稳定的)代码。

运行无服务器部署。部署完成后,新的实验代码将随机处理您50%的请求。

如果事情不起作用,请将您的代码恢复为旧代码,删除流量配置选项,然后进行部署。

如果一切正常,请保留新代码,删除流量配置选项,然后进行部署。

我们的目标是提供尽可能好的无服务器Express.js体验。我们在无服务器Express中积累了多年的无服务器经验,因此您和您的团队不必配置、管理和自动化底层基础架构,而且我们几乎没有涉及到无服务器Express提供的强大功能。

一如既往,您应该专注于您的应用程序,而不是基础设施。这就是无服务器的方式!

Serverless Express-这是无服务器Express的Repo,它包含许多附加文档。

无服务器组件--您很可能希望在您的Express.js应用程序中包含数据库、自定义权限角色、网站等。无服务器基础设施的组成是组件的全部内容,因此请查看您可以通过组件文档执行的所有巧妙操作。

无服务器全栈应用--这里是一个真实的例子,展示了如何在全栈应用的上下文中使用无服务器Express,该全栈应用具有数据库、网站、身份验证、授权等功能。这是一个很好的起点。

奥斯汀·柯林斯(Austen Collins)是无服务器公司(Serverless,Inc.)的创始人兼首席执行官。以及无服务器框架的创建者。