arcavios / scooze

A flexible data layer for applications working with Magic: the Gathering cards, decks, and tournaments.
Other
11 stars 1 forks source link

Epic: Scooze as a Service (Saas) #291

Open cmentzer opened 1 month ago

cmentzer commented 1 month ago

Providing Scooze as a publicly / semi-publicly available service

This ticket is just a starting point to enumerate at a high level what needs to be done to support running scooze as a hosted service (probably on AWS).

We should use IaC. SBWH (strong belief weakly held) we should use either Terraform or, if we want to be cool, Pulumi

Rough list of infrastructure requirements

CI/CD

iambroadband commented 1 month ago

I think this is a good conversation to start because the best improvements we've had to our existing code have come from outside influence. When we use our own tools to build other applications, it's helped us recognize where the value truly lies and what features need to be changed or added. I'll try to address everything in the OP point by point.

IaC

I think using Pelumi sounds cool since we are starting fresh and it sounds like you want to get your hands on it. If you think it's a reasonably good fit for the job, I see no problem going ahead with something that isn't Terraform.

Network Components

Agree on all points. re: domain, I may have already purchased one some time ago, but I forget now. If not, we can buy one for this purpose, seems worth it to me.

Compute Components

I'd like to either use ECS or EC2 here. I think EKS is overkill. Also, is there a reason we couldn't do most of our compute with API Gateway and Lambda? Do we need persistent compute?

Data Layer

I think we've agreed to stick with Mongo for now to avoid complicated backend changes. We don't expect the performance to be an issue at our scale, but if things change, of course we can revisit. Atlas it is.

Connective Tissue

This is the bit that I'm least familiar with, so I will defer to you.

CI/CD

Is there a way to publish multiple versions of a container? I don't want to publish dev as latest and we don't use a main branch that tracks only releases. Ideally we would push a docker container to latest whenever we pushed tags to our repo (cut a release in git). For situations where we merge to dev and we want a dev container, can we have a separate version for that?