I'd love to compare more notes with everyone about deploying to ECS.
If you want to play with an ECS cluster, `convox install` is a free and open source tool that sets everything up in minutes. Little to no AWS knowledge required. https://convox.com/docs/overview/
I would love to hear what advantages ECS has over Kubernetes. I've found that Kubernetes solves all seven of those challenges (and more – service discovery is a challenge, too!) pretty handily, and is cloud provider independent on top of that (but can have provider-dependent tie-ins where desired).
1. Cluster set up on AWS/GCP is fairly automatic. On vanilla machines it's straightforward, but involved, to install.
2. Kubernetes relies on etcd, which uses Raft, to run. It does depend on one master node to provide an API server to control the instances, though.
3. Pods have health checks, and deployments will halt if new instances fail their health checks.
4. Deployments handle rolling updates within the cluster
5. The scheduler can cordon off or drain nodes before destroying them, and new nodes can easily be added to the cluster
6. fluentd is often run in a DaemonSet for this purpose
7. kubectl makes deployment feel like playing with legos – interacting with a bunch of objects in a predictable and documented manner. In the case you laid out, for example, many rapid deployment version changes are handled gracefully by the deployment object, scaling down the old two versions and scaling up the new version.
AWS ecosystem. Everyone is already running stuff here, or wants to.
Particularly data. If I have important stuff in RDS or Redshift I want to run my apps in a VPC next to that.
Managed service. I don't want to be responsible for etcd. I manage 150 clusters and counting. I couldn't do this without ECS and DynamoDB and their excellent SLAs.
I am aware GKE does this. When I use Kubernetes that's what I'll use.
We had so much trouble deploying on ECS. Everything from its unhelpful debug/troubleshooting tools to its unhelpful log/event messages (yes, thanks for letting me know that you tried running a task 10 times and it failed; or that you had I/O issues pulling from the AWS Docker Registry) were road blocks that when we finally got it working it still needed a lot of tuning. Even getting images from the AWS Docker Registry to work on ECS was a piece of work, and required a custom IAM policy configuration for which they hid on the marketing page of the AWS Docker Registry FAQ. Did I mention the documentation was bad?
In the end, we just opted to use GCE Kubernetes/GKE, a really developed and thought-out product. Aside from being open-source and portable, we are still kicking ourselves for having devoted so much time on ECS (which EC2 is more expensive than GCE too!). We only spent a few hours getting it setup compared to the few all nighters we spent tuning AWS.
Plus, when container pods died, Kubernetes would automatically spin up a new pod (this sometimes happened on ECS), and for bonus points, everything from standard output/error in a container went to Google's Stackdriver logging service without configuration. Google's docs were actually quite good; much better than the unhelpful AWS docs.
I'd love to compare more notes with everyone about deploying to ECS.
If you want to play with an ECS cluster, `convox install` is a free and open source tool that sets everything up in minutes. Little to no AWS knowledge required. https://convox.com/docs/overview/