Идеи для архитектуры приложений на AWS (ECR + ECS Fargate + RDS + Lambda (?))

Я новичок в этом, и я пытаюсь выяснить, какая будет лучшая архитектура и рабочий процесс для следующего варианта использования (я использую React спереди и nodejs на сервере, но это может быть неактуальным, учитывая это это вопрос по архитектуре):

Пример использования:

Пользователь попадает на мою страницу, где у меня уже есть таблица, заполненная клиентами из таблицы RDS. У пользователя есть возможность либо удалить клиента (соответствующая строка), либо отредактировать этого клиента, и все изменения, сделанные во внешнем интерфейсе, должны быть записаны в базе данных, чтобы в следующий раз, когда пользователь посещает страницу, он / она получает последнее состояние базы данных. Проблема, с которой я столкнулся, заключается в том, что мне поручено реализовать эту архитектуру с использованием таких сервисов, как ECR, ECS (я выбрал Fargate, как бессерверное решение), RDS, но я понятия не имею, как должен выглядеть рабочий процесс и какую роль будут иметь лямбды. в случае, если они необходимы (или есть?). Учитывая также, что мне нужно использовать RDS, какой вариант PostgreSQL / MySQL / Aurora лучше всего подходит для этого варианта использования?


Что я пробовал до сих пор:

Что мне удалось сделать до сих пор, так это то, что я закрепил свое приложение для реагирования (содержащее таблицу внешнего интерфейса, в которую будут переходить клиенты), поместил его в ECR, создал кластер внутри ECS с определением задачи по умолчанию, содержащим роль ecsTaskExecution. , контейнер, содержащий изображение из ECR, и службу, отвечающую за выполнение задачи. Я также добавил Application Load Balancer перед кластером ECS, чтобы мое приложение для реагирования было доступно из браузера (планируя добавить мой личный домен).


Проблема:

Я не знаю, кто должен «говорить» с кем, когда дело касается всех этих отдельных сервисов, сколько контейнеров у меня должно быть, являются лямбда-выражениями как функции, которые будут выполнять необходимое удаление и обновление, или они служат только как триггеры, которые будут оставить всю обработку задачам ECS? В основном у меня возникают проблемы с представлением всей картины рабочего процесса. Любые идеи?

Заранее спасибо. :)


person Goran Cabarkapa    schedule 28.05.2020    source источник
comment
Ваш бэкэнд может быть либо Lambda, либо ECS / Fargate. Не похоже, что вам понадобятся и то, и другое. Вы пытаетесь изучить AWS или просто настроить это приложение самым дешевым способом? Вы могли бы создать что-то, что связывает воедино все сервисы, которые вы упомянули в качестве обучающего упражнения, но ваше приложение кажется банально маленьким и, вероятно, может быть размещено практически бесплатно, если вы примете соответствующие дизайнерские решения. Вопрос о Postgres vs MySQL зависит исключительно от вас, любой из них может справиться с тем, что вы описываете, без особого труда.   -  person Mark B    schedule 28.05.2020
comment
@MarkB Просто пытаюсь изучить AWS и реализовать различные варианты использования, пытаясь узнать больше о сервисах, которые мне сейчас интересны. Так что да, в некотором смысле я пытаюсь создать что-то, что связывает воедино все сервисы, которые я ' я уже упоминал :)   -  person Goran Cabarkapa    schedule 29.05.2020


Ответы (1)


После нескольких дней экспериментов и чтения я придумал такую ​​архитектуру:

Приложение ReactJS, размещенное на S3, приложение NodeJS (сервер Express), помещенное в контейнер на докере, отправлено в ECR, а затем в ECS (я выбираю EC2 Linux + Networking для кластера ECS, а затем в соответствии с этим я выбираю EC2 для задачи, которая отвечает за запуск моего ECR контейнер), а для базы данных я выбираю MySQL внутри RDS.

В основном связь происходит между S3 -> ECS -> RDS (ReactJS -> NodeJS -> MySQL).

person Goran Cabarkapa    schedule 16.06.2020