如何使用 AWS CloudFront S3 Lambda 部署 Angular Universal App 而不是运行 EC2 服务器?

Aak*_*ash 7 angular-universal angular

直到今天,我有一个简单的、主要是静态的 Angular 9 应用程序,它将使用 CloudFront/S3 和一些 Lambda 函数提供服务。它运行良好,但没有服务器端渲染。今天我升级到 Angular 10 并按照说明添加了 angular 通用https://angular.io/guide/universal。我找到了 @ng-toolkit/universal 和 @ng-toolkit/serverless 选项,但这不适用于 Angular 10。https ://medium.com/better-programming/getting-started-with-serverless-angular-universal- on-aws-lambda-8754bcc4dc19。这告诉我 Lambda 是一个选项,但不确定哪一段 (server.ts) 代码应该是 lambda?

在本地主机上添加 Universal 后,TLDR 一切正常。通常,对于这个项目的 CI/CD,我有一个 AWS Codepipeline 跟踪 repo 的 master 分支,一旦我将代码合并到 master,它就会拉取和构建并将 dist 文件夹复制到 S3 和 S3 存储桶作为 CloudFront 的源发行版。在 S3 存储桶 dist 文件夹更新后,CodePipeline 自动使我的分配无效,并且新的更改在 CloudFront 上生效。

由于我添加了 Universal,我必须重新设计 CI/CD,问题是是否在 EC2 和 Lambda 上部署 SSR。

当我运行npm run build:ssrAngular 时ng build --prod && ng run proj:server:production,一切准备就绪。如果我不使用 EC2 节点/快速服务器,究竟需要将什么部署为 Lambda?

如果我必须使用 EC2 而 Lambda 不是一个选项,我打算按照以下步骤操作:

  1. Auto Scaling 组的 Node/Express EC2 部分
  2. 为这些服务器创建目标组并与 Application Load Balancer 关联。
  3. 使用 AWS CodeDeploy 更新蓝/绿部署上这些服务器上的 Angular 应用程序
  4. AfterInstall 挂钩运行,npm run build:ssr(可能是 pm2 或其他保持活动状态的东西)或其他一些命令?
  5. 让负载均衡器将端口 443 的流量重定向到节点/快速服务器上的 4000
  6. 现在将 S3 存储桶作为 CloudFront 的源,添加 ALB 作为 CloudFront 的源。我是否还需要使用 dist 更新 S3 存储桶?

任何帮助确定这个 Angular Universal 部署部分都会非常有帮助,特别是如果我可以使用 Lambda 进行无服务器 SSR,那么持续的头痛就会少很多。

小智 0

您可以尝试在 Cloudfront 中的 Lambda@Edge 上运行 SSR,但之前请检查您的用例的限制/限制和配额。

您必须将快速代码包装在 lambda-wrapper 中:https://www.npmjs.com/package/aws-serverless-express-edge