我目前正在使用无服务器设计一个简单的无服务器Web应用程序。
我目前的预期筹码是;
我已经按照一些教程使用Serverless Framework构建无服务器API,Lambda和DynamoDB,我已经构建了我的单页应用程序,但是现在它们是两个独立的实体。
我现在要做的是将静态站点(nodejs)带入与我的API,Lambda和DynamoDB相同的项目中,并使用无服务器框架来控制部署,但是我很难找到指导;
任何人都可以提供任何关于这应该如何工作的见解,或者可能指出我对一些好的博客/资源的指导?
亲切的问候, 约翰
答案 0 :(得分:3)
我有一个用React编写的SPA(单页面应用程序),它与用nodejs编写的REST JSON API进行通信,并作为monolith在Heroku上托管。 我迁移到AWS Lambda并将整体块拆分为micro services内的3 + AWS Lambdas monorepo 如果您的SPA要求用户登录以便能够执行任何操作,则以下项目结构很好。 我使用了一个git存储库,每个服务都有一个文件夹:
在每个服务文件夹的内部,我有一个serverless.yml,用于定义单独AWS Lambda的部署。
每个服务仅映射到1个函数index
,它接受所有HTTP端点。我确实使用了2种环境staging
和production
。
我的AWS Lambdas的名称如下:
我使用AWS Api Gateway's Custom Domain Names将每个lambda映射到公共域:
www.example.com(服务器端呈现的目标网页)
api-staging.example.com
您可以使用serverless.yml资源或插件定义域映射,但您只需执行一次,因此我从AWS网站控制台手动完成。 我的.com域名托管在GoDaddy上,但我将其迁移到AWS Route 53 since HTTPS certificates are free。
应用服务
app服务包含一个带有单页应用程序代码的文件夹/ src。 SPA在我的计算机上本地构建为./bundles-production或./bundles-staging,基于环境。构建生成.js和.css包以及index.html。当我运行serverless deploy -v -s production
时,使用serverless-s3-deploy插件将文件夹的内容部署到S3存储桶。
我在serverless.yml中为所有端点定义了只调用了1个函数(我使用的是JSON而不是YAML):
...
"functions": {
"index": {
"handler": "handler.index",
"events": [
{ "http": "GET /" },
{ "http": "GET /{proxy+}"}
]
},
},
handler.js文件返回/ bundles-staging或/ bundles-production中定义的index.html
我使用webpack构建SPA,因为它与无服务器和serverless-webpack插件很好地集成。
api服务
我使用aws-serverless-express来定义所有REST JSON API端点。 aws-serverless-express与普通快递一样,但你不能做express.static()
和fs.sendFile()
之类的事情。
我最初尝试为每个端点使用单独的AWS Lambda函数而不是aws-serverless-express,但我很快就点击了CloudFormation mappings limit。
www服务 如果单页应用程序的大多数功能需要登录,最好将SPA放在单独的域上,并将www域用于针对SEO优化的服务器端呈现的登录页面。
奖金:
graphql服务 使用微服务架构可以轻松进行实验。我目前正在使用graphql
在apollo-server-lambda中重写REST JSON API答案 1 :(得分:2)
我做了几乎相同的架构并在s3上托管了单页应用。您可以做的是为api网关设置cloudfront,而不是将api.yourDomain.com指向该cloudfront。比你还需要在你的api上启用cors。
此插件可以为您处理域和云端的设置:
https://github.com/amplify-education/serverless-domain-manager
我不确定您的项目要求,但如果您想更快地提供静态文件,那么设置域名> cloudfront-> s3可能是明智的选择。
答案 2 :(得分:0)
关于无服务器体系结构和Azure无服务器服务,这里有一些有意义且值得阅读的内容
https://sps-cloud-architect.blogspot.com/2019/12/what-is-serverless-architecture.html