AWS is a collection of technologies, S3 is part of AWS. based on your description, you probably do not need to use Postgres, S3 should suffice.
Vapor and AWS have nothing to do with one another. AWS (EC2) is just a place you can run a Vapor app; you could also run a Vapor app locally. in fact this is why Docker is useful, because it lets you emulate an EC2 instance locally.
i really do not think Heroku needs to be involved at any stage of this process.
if you want to go through the march of progress yourself, start by writing a SwiftNIO server that runs locally on your laptop and then try accessing it from other devices on the same wifi.
then if you have a VPN with port forwarding, try accessing it from cellular data, which should teach you the basics about accessing things over the internet.
then realize that it’s annoying to maintain a laptop running 24/7 with a VPN, and that it would be much easier and cheaper to rent a CPU and a network connection from a large corporation that delivers this service at scale. this is what AWS EC2 is. instead of running your SwiftNIO app on your laptop, connect to an EC2 instance over SSH, transfer the app over, and run it there.
then realize that your EC2 instance does not have a lot of disk space to store all your asset files, and that it would make sense to offload some of that to a service that’s optimized for storing lots of static data. this is what AWS S3 is.
in general, you do not “learn” AWS the way you learn SwiftNIO/Vapor/Postgres. you “learn” AWS the way you “learn” GitHub, to use an analogy. if you get familiar with AWS, a lot of that knowledge will transfer over to other cloud providers (Heroku, Google, etc.), just like being familiar with GitHub would help you use GitLab, BitBucket, etc.