通过AWS CloudFront从单个S3存储桶为SPA多租户提供服务

哈立德

出于以下考虑:

  • 包含静态前端SPA文件的单个S3存储桶。
  • 通过CloudFront为Frontend提供服务,每个租户都有自己的CloudFront分布(tenantA.domain.com,... tenantZ.domain.com)。
  • 每个租户都有自己的配置(可以从解析域的配置服务中获取)。
  • 每个CloudFront都需要在运行时将这样的配置注入到Frontend中。

考虑下图。


我正在考虑一个Lambda函数,该函数查询“配置服务”(可能缓存响应),然后设置window.config1要使用SPA的全局范围变量(例如)。通过CloudFront是否可能出现这种情况?有更通用/标准化的方法吗?

德罗普斯

是的,您可以做到,我已经做到了!(本意是撰写有关此主题的博客。我在一个多租户SAAS平台上工作,在该平台上,租户具有自己的Cognito身份提供商配置。我所做的是我有一个文件config.js,看起来像这样,其中包含许多Cognito设置:(我正在使用ReactJS)

window.TENANT_CONFIG = {
      REACT_APP_USERPOOL_REDIRECT_SIGNIN : "https://todo.somesite.com/",
      REACT_APP_USERPOOL_REDIRECT_SIGNOUT : "https://todo.somesite.com/",
      REACT_APP_WEB_CLIENT_ID : "todo",
      REACT_APP_TENANT_NAME : "todo" ....
    };

此图块作为javascript脚本包含在我的顶部 index.html

<script type="text/javascript" src="%PUBLIC_URL%/config.js"></script> 

拉姆达

您需要一个Lambda函数,us-east-1函数将在Cloudfront发行版的Edge中成为Lambda。此函数必须是唯一的128 MB,并且没有环境变量。您可以参考文档,了解如何创建Lambda函数。但一般来说,您需要构建window.TEN...您可以阅读event.Records[0].cf.request.headers['host'][0].value来确定您的呼叫是否来自一个域或另一个域,并构建适当的config.js文件。我的Lambda函数实际上是从S3存储桶读取配置的。您的会有所不同。

CloudFront

如果可以生成正确的证书,则CloudFront实际上只需要一个域。只要确保您已添加所有不同子域的CName即可。然后,你需要添加具有的路径模式的行为:config.js配置Lambda Function AssociationsViewer Request,并指定Lambda Function ARN而且你很好!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cloudfront提供通过AWS CDK Python为S3存储桶起源创建的Access拒绝响应,而无需公共访问

来自分类Dev

当源为S3存储桶时,AWS CloudFront返回http 307

来自分类Dev

通过CloudFormation的AWS Lambda S3存储桶通知

来自分类Dev

AWS CloudFront重定向到S3存储桶

来自分类Dev

AWS:无法通过s3存储桶策略授予s3访问权限

来自分类Dev

get_bucket()为我未通过Boto创建的S3存储桶提供了“错误请求”

来自分类Dev

AWS CloudFront和S3,通过单个重定向处理WWW和HTTPS

来自分类Dev

如何通过特定用户的Bearer令牌访问与S3存储桶连接的AWS CloudFront(JWT自定义身份验证)

来自分类Dev

通过PUT触发到单独账户中的s3存储桶的AWS Lambda

来自分类Dev

AWS S3无法通过PHP SDK删除存储桶中的对象

来自分类Dev

通过makeUnauthenticatedRequest进行JS AWS S3公共存储桶访问:“网络故障”?

来自分类Dev

通过makeUnauthenticatedRequest进行JS AWS S3公共存储桶访问:“网络故障”?

来自分类Dev

AWS S3存储桶问题

来自分类Dev

AWS S3 存储桶策略

来自分类Dev

如何通过k8s批注更新AWS NLB设置以将日志存储在S3存储桶中

来自分类Dev

在单个 AWS S3 存储桶中托管多个 Angular 7 应用程序

来自分类Dev

如何使用gsutil通过http链接从Google云存储下载到AWS实例或s3存储桶?

来自分类Dev

用于从S3存储桶提供静态内容的AWS API网关方法

来自分类Dev

是否可以在不提供密钥的情况下访问公共AWS S3存储桶?

来自分类Dev

通过BITS下载AWS S3

来自分类Dev

AWS S3 cp无法通过

来自分类Dev

通过BITS下载AWS S3

来自分类Dev

仅在手动将单个对象权限设置为public之后,才能访问AWS S3存储桶,上传的图像文件

来自分类Dev

通过使用分段上传API将小于5 MB的文件上传到AWS S3存储桶

来自分类Dev

将AWS S3存储桶同步到EC2服务器

来自分类Dev

为什么AWS Beanstalk服务使用S3存储桶?

来自分类Dev

每天在AWS S3存储桶上自动备份Digital Ocean服务器

来自分类Dev

无服务器-AWS S3存储桶已经存在

来自分类Dev

将AWS S3存储桶同步到EC2服务器

Related 相关文章

  1. 1

    Cloudfront提供通过AWS CDK Python为S3存储桶起源创建的Access拒绝响应,而无需公共访问

  2. 2

    当源为S3存储桶时,AWS CloudFront返回http 307

  3. 3

    通过CloudFormation的AWS Lambda S3存储桶通知

  4. 4

    AWS CloudFront重定向到S3存储桶

  5. 5

    AWS:无法通过s3存储桶策略授予s3访问权限

  6. 6

    get_bucket()为我未通过Boto创建的S3存储桶提供了“错误请求”

  7. 7

    AWS CloudFront和S3,通过单个重定向处理WWW和HTTPS

  8. 8

    如何通过特定用户的Bearer令牌访问与S3存储桶连接的AWS CloudFront(JWT自定义身份验证)

  9. 9

    通过PUT触发到单独账户中的s3存储桶的AWS Lambda

  10. 10

    AWS S3无法通过PHP SDK删除存储桶中的对象

  11. 11

    通过makeUnauthenticatedRequest进行JS AWS S3公共存储桶访问:“网络故障”?

  12. 12

    通过makeUnauthenticatedRequest进行JS AWS S3公共存储桶访问:“网络故障”?

  13. 13

    AWS S3存储桶问题

  14. 14

    AWS S3 存储桶策略

  15. 15

    如何通过k8s批注更新AWS NLB设置以将日志存储在S3存储桶中

  16. 16

    在单个 AWS S3 存储桶中托管多个 Angular 7 应用程序

  17. 17

    如何使用gsutil通过http链接从Google云存储下载到AWS实例或s3存储桶?

  18. 18

    用于从S3存储桶提供静态内容的AWS API网关方法

  19. 19

    是否可以在不提供密钥的情况下访问公共AWS S3存储桶?

  20. 20

    通过BITS下载AWS S3

  21. 21

    AWS S3 cp无法通过

  22. 22

    通过BITS下载AWS S3

  23. 23

    仅在手动将单个对象权限设置为public之后,才能访问AWS S3存储桶,上传的图像文件

  24. 24

    通过使用分段上传API将小于5 MB的文件上传到AWS S3存储桶

  25. 25

    将AWS S3存储桶同步到EC2服务器

  26. 26

    为什么AWS Beanstalk服务使用S3存储桶?

  27. 27

    每天在AWS S3存储桶上自动备份Digital Ocean服务器

  28. 28

    无服务器-AWS S3存储桶已经存在

  29. 29

    将AWS S3存储桶同步到EC2服务器

热门标签

归档