When you think of the cloud, the first name that probably comes to your mind is Amazon Web Services. Rightly so, as it's a dominant player in the cloud market today with a market share of about 40 percent in both the IaaS and PaaS markets.
AWS comes with a wide range of products in every cloud category. In fact, it has more than a hundred products spanning across the areas of computation, content delivery, databases, networking, developer tools, management, security, analytics, IoT, game development, mobile services, application services, enterprise services, and sales. With such an impressive list, Amazon has created its own ecosystem where one product interacts and works well with others.
That said, AWS may not be suitable in all situations simply because it's too big and complex. Let's take a practical situation here. Say you're a freelancer Ruby on Rails developer and you want to host a portfolio page for a client who is a lawyer. This application is a fairly simple one with a homepage, an about me page, a contact page, and a portfolio page that lists all the important lawsuits this client has won.
To host such a simple application, you don't need AWS, as the time and effort needed to set it up and manage is way more than is necessary. In such cases, a simpler hosting platform like Heroku would work.
If you've never heard of Heroku, it's a platform as a service (PaaS) product that allows companies to build, deploy, monitor, and scale their apps. This web deployment tool works across many programming languages like Node.js, Java, Ruby, Scala, PHP, Python, and more.
This above example is one scenario where Heroku works better than AWS, but that's not the final verdict.
Let's take a deep dive into both these cloud deployment platforms to see which is best in a given situation.
Heroku versus AWS
In many ways, people see Heroku and AWS as intense competitors in the area of application deployment, as both allow you to deploy and manage web apps in the Amazon Cloud. Regardless of which you choose, you don't have to worry about the underlying infrastructure as that's taken care of by AWS Cloud.
As far as deployment is concerned, the platform choice depends on a host of factors such as the size of your application, your financial constraints, availability of resources, and the level of customization you need.
Let's compare both platforms to help you decide which is ideal for the application you want to deploy.
Probably one of the biggest advantages of AWS is its price. The current base price plan starts at $0.013 per hour, and that's one of the lowest in the industry. This is also one area where AWS scores over Heroku in a big way.
Heroku, on the other hand, costs $0.05 per hour and can quickly add up for you. Therefore, if you have financial constraints and are working with a small budget, AWS may be a better option. However, remember these rates are subject to change given the intense cloud pricing wars that are happening today.
While considering costs, it's important to note not just the hosting costs, but also the salaries you'll be paying for DevOps engineers who'll be needed to manage your AWS hosting service.
While setting up AWS, you need one or more dedicated DevOps engineers who can take care of provisioning EC2 instances, controlling the process of application deployment, and deciding the interactions of EC2 instances by orchestrating the infrastructure.
In the case of Heroku, you don't need a DevOps engineer as everything can be managed right from the command-line itself.
The next aspect you have to consider is the computational demands of your application. When you want to deploy a large and complex application like a banking platform, AWS is the hands-down choice. The many tools and resources you have to manage your application is virtually unlimited.
Some of the tools you'll have access to in AWS ecosystem are:
- Disaster recovery
- Load balancing
- Vertical Scaling
- Block Storage
None of these features are available in Heroku. In this sense, Heroku is ideal for small applications that don't require a ton of computational resources except simple auto and horizontal scaling, both of which are handled by the underlying AWS infrastructure.
One area that Heroku scores over AWS in a big way is rapid deployment. Heroku gives you a ready-to-use environment in which you can simply push your code and make a few configuration changes to get your application running. It's really that simple.
Also, the fact that it is not as open-ended as AWS means you can migrate and start your apps much faster than doing it on AWS.
Such a fast deployment process makes Heroku ideal for applications that need to be changed or improved based on users' feedback. You're never going to get this same level of speed on AWS.
Easy to use
Heroku is easy to use and its web interface is fairly intuitive. The CLI client works well, and it's even easy to add any service you want through add-ons. Overall, the tools offered by Heroku are sophisticated and serve their purpose well.
AWS is not so easy to setup and manage simply because it's huge and complex.
Though Heroku allows you to deploy quickly, it can also lock you into its own proprietary system, and this means you'll have to choose only from its 140 and odd add-ons when you want to implement things like analytics, database monitoring, caching, mailing, and more. These apps severely restrict what you can do with the platform.
Though some Heroku enthusiasts opine that there are hacks to help you run unsupported platforms on Heroku, the fact that you have to use a hack for something that should be straightforward is a cause for worry.
AWS is automatically compliant with many existing standards such as FedRAMP, HIPAA, SOC 2, and FIPS 140-2, so you don't have to take extra steps to make your application or its underlying platform compliant with these standards.
Heroku, on the other hand, is only compliant with PCI and ISO 270001. This lack of compliance means you have more work on hand if you choose to deploy large applications in the sectors of banking, finance, e-commerce, healthcare, and government.
This is one aspect where AWS and Heroku are equal, and the choice truly depends on what you need.
AWS is compatible with:
- Windows operating system
- Amazon Linux
- .NET framework
- Middleware like Tomcat, Lis, HTTPD, and Passenger.
- Databases like Microsoft SQL and Oracle DB.
On the other hand, Heroku is compatible with
- Google Cloud SQL
- Google Cloud storage
- Google Cloud Datastore
- A ton of add-ons like Adept, papertrail, Redis Cloud, Sendgrid, Mongolab, Logentries, Treasure Data, and more.
Thus, the choice is really what you want to use in your application.
Another minor drawback with Heroku is that it's mostly available only in select countries such as the U.S, Europe, Canada, Australia, Japan, China, India, and some parts of Latin America and Middle-east while AWS is international and has a presence in almost all countries around the world.
Here's a concise chart of the differences we spoke about.
|Cost||$0.013 per hour||$0.05 per hour|
|Need DevOps engineers||Must||Not at all|
|Computational demands of your app||High||Low|
|Advanced features like disaster recovery and load balancing||Yes||No|
|Auto and horizontal scaling||Yes||Yes|
|Nature of ecosystem||Open-ended||Proprietary|
|Compliance with standards||Yes||No, except PCI and ISO 27001|
|Areas of operation||International||U.S, Europe, Canada, Australia, Japan, China, India, and some parts of Latin America and Middle-east|
|Support services||Phone, forums, Live chat, 24/7 support||Phone and self-serve resources only|
Overall, we can say that Heroku and AWS are both good choices for deploying your application, though the choice depends on the nature of your application.
In general, Heroku is ideal for small applications that don't need a lot of computational resources, but need quick deployment. However, all large applications that need to be compliant with existing standards, and need interactions and flexibility to communicate with different components are better off in AWS.