Overview of Heroku
Heroku and Amazon Web Services are really two separate categories of cloud services. The former is a cloud Platform-as-a-Service (PaaS) that aims to make it simple to build, deploy, manage, and scale web applications through its dashboard, command line interface (CLI), or application programming interface (API).
Overview of AWS
AWS is much more comprehensive in nature, being a cloud service provider. There is a wide range of AWS products, including:
- Infrastructure-as-a-Service (IaaS) in the form of Amazon Elastic Compute Cloud (EC2)
- Container management services like Elastic Container Service (ECS) and Elastic Kubernetes Service (EKS)
- PaaS in the form of AWS Elastic Beanstalk
- Serverless computing with AWS Lambda
- Cloud object storage through Amazon Simple Storage Service (S3)
- SQL database management through Relational Database Service (RDS)
- MySQL managed databases through Aurora rotational database service
- Managed NoSQL databases with DynamoDB
- Managed data storing and caching with Elasticache
- Monitoring with CloudWatch
- Domain name service through Route 53
- Load balancing through Elastic Load Balancing (ELB)
Other cloud service providers include Google Cloud Platform and Microsoft Azure, which offer competing cloud technologies, all vying for market share. They offer these products through virtualization, making computing resources readily available for customers so they don't need to own and operate their own data centers and physical infrastructure.
Comparing Heroku and AWS
The AWS comparison with Heroku is a difficult one to make since Heroku is just a PaaS, one small slice of the pie that is the cloud computing market (each of the cloud service providers is a much larger slice). Furthermore, Heroku is actually built on top of AWS, but acts as an abstraction layer and is therefore much simpler than using AWS Elastic Compute Cloud (EC2) directly; users pay Heroku and Heroku pays AWS for the underlying cloud resources. Here’s a diagram depicting the differences between IaaS and PaaS and the other cloud computing service models (IaaS for example, would be Amazon EC2, one of AWS’ products):
Heroku vs AWS: Pricing
The pricing structure differs considerably between Heroku and AWS. Since its free tier was scrapped, Heroku pricing is based primarily on how many dynos (the cloud-native term is a container) and the type of dynos used. These dyno types include hobby, standard, and performance dynos, which all have different amounts of computing resources available. For example, a Performance M dyno allows for up to 2.5 GB RAM usage and costs $250 per month, while a Performance L dyno is double the price and allows for up to 14 GB RAM usage.
For AWS, the cost can differ on which of the cloud provider’s services are used. For comparison’s sake, in terms of computing resources, customers pay for EC2 instances which are available through AWS Elastic Compute Cloud. Prices vary depending on resource usage capability; t2.medium EC2 instances, allow for 2 vCPUs and 4 GiBs of RAM, costing about $33 per month, and more compute-intensive instances, like c5.2xlarge EC2 instances, which have a 1:2 ratio of CPU to RAM usage capability (specifically, 8 vCPU and 16 GiB RAM), cost around $245 per month. EC2 instances come in all shapes and sizes, allowing for far more granular choices compared to dynos. For Machine Learning (ML) workloads, for example, one can select a GPU-optimized instance type.
There are more cost-efficient options available, such as Reserved Instances (the costs mentioned above are for the On Demand pricing model). Furthermore, container management services like ECS and EKS, and AWS’ in-house PaaS, Elastic Beanstalk, are offered at no (or minimal; an EKS cluster costs about 10 cents per hour, or $72 dollars a month) additional cost over paying for the underlying resources themselves - compute and storage, or Amazon ELB volumes. AWS does provide credits that cover the cost of these resources, as well.
Heroku vs AWS: Ease of use
One of the main differences between the two is that AWS’ learning curve is much higher than Heroku’s considering the latter’s breadth of cloud computing services. But even if one is comparing managing AWS’ container services oneself and Heroku, or even using AWS Elastic Beanstalk versus Heroku, Heroku is certainly much more intuitive and easy to use.
To manage their infrastructure themselves, a company would need a DevOps engineer and for large enterprises, perhaps even a full-blown team of DevOps engineers. The benefit of a PaaS is that it automates DevOps, making cloud infrastructure less of a burden for smaller companies with engineering teams that need to dedicate the entirety of their bandwidth to app or API development, and building their product.
Pros and cons of Heroku
Pros of Heroku
Heroku provides a user-friendly interface and simplifies DevOps tasks, allowing developers to focus on application development with support for a wide variety of programming languages, features like Review Apps that make it easy to test code changes and a wide range of add-ons that support application development and management.
Cons of Heroku
Heroku's simplicity may limit control over infrastructure, which can be disadvantageous for companies with complex infrastructure or specialized configurations. Furthermore, Heroku utilizes multi-tenant cloud hosting; this can raise concerns for companies with security and compliance requirements, although Heroku offers premium options for private hosting to address these concerns. Another concern with Heroku is migrating off of the cloud platform; this can be a time-consuming ordeal.
Pros and cons of AWS
Pros of AWS
As mentioned earlier, the more apt comparison of pros and cons would be between Heroku and the options for managing infrastructure that AWS offers. This includes managing one’s own container service a la ECS or EKS, or utilizing AWS’ in-house PaaS option, Amazon Elastic Beanstalk.
One advantage of AWS as a whole over Heroku is that the former’s IaaS services allow users to host their applications inside their own virtual private cloud (VPC) by default. For example, if a user was hosting AWS Aurora in its own VPC and hosting their applications in another VPC, they could utilize VPC peering to improve both security and latency.
Pros of ECS
Being an AWS tool, ECS allows for a seamless integration with other popular services in the AWS ecosystem, like Elastic Load Balancer (ELB), AWS Identity and Access Management (IAM), and Amazon S3. ECS can also provides high availability as it distributes containers across several Availability Zones. Finally, as a container service, it lowers the burden of managing containers significantly; making it much easier to run Docker containers on a cluster.
Pros of EKS
EKS is also a container service but was developed after ECS due to the advent of Kubernetes. Kubernetes (K8s) is the industry standard for container orchestration, and this is the main benefit of EKS over ECS. Other than this, these two cloud technologies have similar benefits.
Pros of Elastic Beanstalk
AWS Elastic Beanstalk, being in Amazon’s cloud ecosystem, has some built-in advantages over Heroku. This includes the inherent flexibility and security associated with hosting in one’s own private cloud; that is, being able to configure their infrastructure when necessary and being shielded from the public internet. Beanstalk also does the job of abstracting away infrastructure, allowing users of AWS' IaaS offering to avoid building out a dedicated DevOps team.
Other cloud service providers offer PaaS services, like Google App Engine from GCP.
Cons of AWS
AWS’s products do have certain drawbacks that come with the increase in flexibility they provide over a PaaS like Heroku.
Cons of ECS
Being integrated with the rest of the AWS ecosystem is a double-edged sword, however, as concern of vendor lock-in can arise; simply put, it can be difficult to move from one cloud provider to another when your infrastructure and other tools are entrenched in one. ECS is less widely adopted than other container services, so troubleshooting any potential issues may be difficult due to a lack of resources; issues can easily arise when setting up a cluster, which can be a difficult process.
Cons of EKS
Other than the drawbacks of ECS, EKS has a larger delta when it comes to usability. While Kubernetes is the golden standard of container orchestration, it is also a more novel technology, resulting in greater complexities. Simply put, the learning curve for Kubernetes is quite high as there are many associated technologies (like Prometheus, used for monitoring purposes, and Helm, a package manager for continuous deployments) that require a fair amount of effort to learn about and become proficient in utilizing in order to leverage the benefits of K8s fully. While EKS is more widely adopted than ECS, setting up a Kubernetes cluster is also not without challenges.
Cons of Elastic Beanstalk
Elastic Beanstalk’s user interface is not as straightforward as many third-party PaaS offerings, resulting in a steeper learning curve. Furthermore, Beanstalk doesn’t handle complex microservices architectures well (one of the reasons Kubernetes was formulated was to simplify the deployment and management of distributed applications at scale, making it fantastic for microservices-based architecture; however, Beanstalk was developed before Kubernetes) and has limitations when it comes to worker processes' scalability. Loading Elastic Beanstalk with custom configurations can lead to breakdowns, and its alerting and metrics capabilities are generally considered basic.
Porter: Heroku your AWS
If you’re looking for the convenience of the Heroku platform on AWS, try Porter. Porter runs in users’ own AWS account. This means they reap all the benefits of hosting on their own private cloud: greater security, reliability, scalability, and flexibility. Plus, users have access to all of the other AWS services in the ecosystem which can result in cost savings over other PaaS providers; for example, using RDS is generally more cost-effective than Heroku Postgres. Porter also has built-in logging and monitoring capabilities, but supports add-ons such as DataDog, Mezmo, and Grafana for users that want even more robust logging abilities and longer metrics retention.
EKS and Porter
Furthermore, one of the main differences between Porter and other PaaS solutions is that Porter runs on top of users’ EKS clusters; users receive all of the benefits of K8s but don’t actually have to learn anything about the container orchestrator as it is abstracted away from them; like any quality PaaS, the details regarding cloud infrastructure do not have to be users’ concern. All users do is plug in an access ID and grant the correct permissions and Porter provisions both the EKS cluster and the ECR instance inside users’ own AWS account. However, for DevOps-savvy engineers, Porter gives them the freedom to go under the hood and configure their infrastructure as they please. In terms of cost optimization, Porter allows for horizontal autoscaling by increasing or decreasing the number of running Kubernetes replicas.
Porter doesn’t just run on EKS, however. Since applications deployed on Porter are containerized through Docker, they are cloud agnostic and can be ported from AWS to GCP or another cloud provider and vice versa.
More akin to AWS than Heroku, Porter’s pricing is based on resource usage; users pay their chosen cloud provider for the underlying resources and Porter for the resources the platform manages. Through Kubernetes, resource utilization can be figured on Porter down to 1MB RAM and 0.01 vCPU and is prorated to the minute - users truly pay only for what they use.