单个AWS S3存储桶上有多个角度SPA?

时间:2019-12-11 06:31:59

标签: angular amazon-s3 amazon-ec2 single-page-application

我有一些SPA,这是每个客户的一些标准仪表板,他们偶尔使用它。因此,尽管我将它们移至Amazon S3存储桶。我在这方面取得了一些成功。我托管了一个应用,将CNAME添加到了存储桶路径中,而我在那里。

我遇到了一些挑战

1)默认情况下没有SSL-通过HTTP服务

2)S3无法处理Angular路线-是吗?

因此,我继续使用CloudFront,它为我的应用提供了SSL。是! SSL取得成功,但路由没有改善。

因此,我添加了Lambda @ Edge支持,以将这些404错误转换为我的应用程序索引页面,以处理这些重新路由,但再次失败。

所以我的问题分为两部分

1)我们可以在具有SSL和路由处理功能的单个AWS存储桶中使用多个SPA吗?如果是,我想念什么?

2)迁移到AWS S3托管我的SPA甚至是个好主意。如果没有,那么我将把它们托管到单个EC2实例中。

仅供参考:我现在通过应用程序服务将这些应用程序托管在Azure中,放在单个资源组中。

1 个答案:

答案 0 :(得分:0)

  

因此,我添加了Lambda @ Edge支持,以将这些404错误转换为我的应用   索引页来处理这些重新路由,但再次失败。

代替重定向,获取相关的S3 index.html并附加到Edge @ Lambda内的response.body中。

'use strict';

exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;

/**
 * This function updates the response status to 200 and generates static
 * body content to return to the viewer in the following scenario:
 * 1. The function is triggered in an origin response
 * 2. The response status from the origin server is an error status code (4xx or 5xx)
 */

if (response.status >= 400 && response.status <= 599) {
    response.status = 200;
    response.statusDescription = 'OK';
//  Fetch the particular index.html relevant to the SPA from S3 (Based on the request path) and update the response.body
    response.body = 'Body from index.html from S3';
}

// You might need to move the below callback after S3 file fetch success callback.
callback(null, response);
};

参考:Update Error Status Example

注意:重定向的问题是SPA需要知道Angular路由的完整路径才能加载该路由。但是重定向会将其替换为index.html(没有相对路径)