Несколько угловых SPA на одном ведре AWS S3? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть несколько SPA, которые являются стандартными инструментальными панелями для каждого клиента, и они время от времени используют его. Поэтому я решил перенести их в корзину Amazon S3. Я получил некоторый успех с этим. Я разместил одно приложение, добавило CNAME к пути корзины, и я был там.

Я столкнулся с несколькими проблемами

1) По умолчанию нет SSL - Обслуживание по HTTP

2) S3 не может обрабатывать угловые маршруты - да?

Так что я перешел к использованию CloudFront, обеспечивающему SSL для моего приложения. Да! успех с SSL, но без улучшения маршрутов.

Поэтому я добавил поддержку Lambda @ Edge, чтобы преобразовать эти 404 ошибки в мою индексную страницу приложений, чтобы обработать эти перенаправления, но безуспешно.

Итак, мой вопрос состоит из двух частей

1) Можем ли мы использовать Multiple SPA в одной корзине AWS с SSL и обработкой маршрутов? если да, то что мне не хватает?

2) Это даже хорошая идея, чтобы перейти на AWS S3 для размещения моего SPA. Если нет, то я перейду, чтобы разместить их в одном экземпляре EC2.

Примечание: в настоящее время я размещаю эти приложения в Azure через службу приложений в одной группе ресурсов.

1 Ответ

0 голосов
/ 11 декабря 2019

Поэтому я добавил поддержку Lambda @ Edge, чтобы преобразовать эти 404 ошибки в индексную страницу моих приложений для обработки этих перенаправлений, но безуспешно.

Вместо перенаправления извлеките соответствующий индекс S3.html и добавьте к response.body внутри Edge@Lambda.

'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);
};

Ссылка: Пример состояния ошибки обновления

Примечание: проблема с перенаправлением состоит в том, что SPA должен знать полный путь с угловым маршрутом, чтобы он мог загрузить маршрут. Но редирект заменит его на index.html (без относительных путей)

...