Creating a multi-container app on multiple AWS instances

Docker Compose (the cli tool) is a single node multi container orchestrator.
Docker Swarm is a multi node multi container orchestrator.

Both share that they use the Compose file format to describe their deployments. Though, Swarm requires at least v3.x of the specification and has some swarm specific configuration items. docker stack is used to controll (deploy/remove) the stack. A stack deployment will create swarm services, which are controlled with docker service. It sill makes sense to use docker network if you need to create a network that needs to exist regardless wethere a stack is deployed or not. Typicaly reverse proxies containers are located in such externaly created networks.

Docker Compose (the cli tool) is compatible with a Compose file with the swarm specific additons, but it will completly ignore them.

I am not sure what type of input you expect here. Just write down you compose file, plan which container is ment to be deployed on which node(s). Add dedicated node labels on that nodes, add the labels to the placement constraints and during deployment swarm will schedule the containers according your constraints.

Use replicas wherer they apply: instances of a single service that should add as ONE scalled out service. By default a swarm service gets a VIP which forwards traffic to the replicas.

For Cassandra, you will want to search the forum. I do remember a thread from some weeks ago where Cassandra missbehaved on Swarm and required an extra configuration (I forget the exact problem). Update: the problem was related deploying Cassandra directly as service, instead of beeing deployed as part of a stack. The problemdoes not apply for swarm stack deployments - the drafted solution is not required with stack deployments .(see: here)