I can answer part of your question which is how to ‘store’ things when running on GameLift.
GameLift offers a fleet instance role. Basically this role can be assumed in your code to call other AWS services including data stores like DynamoDB, S3 etc.
You would need both an STS client and then access to whatever other clients you need ie
- Server knows the name of the role to assume (via config, fleet parameter etc)
- Call assumerole in code
- Plug those credentials/credential provider into the client for the service you want to call and volia.
As for your other points:
- single player mode - most likely you are going to use some local state storage for this. Its almost not worth using the ‘cloud’ here unless you want to offer networked features that require this ie:
- Leaderboards that reflect other players scores
- Allowing players to start/stop and play across devices ie I can start on my phone, get home, change to my PC.
- Daily challenges etc.
If theres nothing where people can ‘compete’ against others, then theres less incentive to cheat and so you can avoid a lot of the complexity/cost in your single player mode development path.
For mutliplayer, typically you don’t trust the client, they make requests to the server and it maintains state and decides if it should ‘honor’ the request. For storing the state a lot depends on what the state should be and what needs to persist beyond your ‘session’; think about what the worst outcome of that session failing to complete could be.
Theres are often written as two modes, but you could model your state manager as something that can be replaced dynamically ie in single player mode the state manager runs locally, in networked version it just a proxy that makes request <-> server, has local caches etc.
Hopefully though you’ll get more answers than that