Есть тонна людей, которые помещают все это в один AMI, раскручивая их за ELB и запуская в производство.
Это советуют? Не совсем.
Проблема с этим в значительной степени та, о которой вы говорили, у каждого есть переменные требования к ресурсам (кроме NodeJS), и вы будете быстро перегружать экземпляры EC2 при любом типе нагрузки; когда они не видят нагрузку, вы будете сжигать $$$, имея достаточно мощный экземпляр (для ожидаемой нагрузки), работающий 24/7.
В терминах близкого, но немного лучшего варианта, каждый эти каркасы внутри их собственного контейнера Docker позволяют им работать рядом друг с другом в одном и том же экземпляре, но отдельно. Как только они окажутся в Docker, вы также можете запустить их в ECS или EKS на Fargate. * hat, я бы порекомендовал это:
NodeJS
помещен в S3 с CloudFront перед ним. Python(Django)
перемещен в Lambda или Lambda EDGE. PostgreSQL
перенесен в RDS, а еще лучше - в DynamoDB.
Преимуществом этого является стоимость и масштабируемость. S3 масштабируется бесконечно и очень доступен и очень дешев. Лямбда основана на событиях, поэтому вам нужна «оплата за использование», а не «оплата за час». RDS - это приемник $, но он заботится о резервном копировании и делает работу с БД простой задачей. DynamoDB - это услуга «оплата за использование», которая значительно удешевит весь ваш стек, если вы сможете его использовать.