Got Node? AWS Latest Cloud to Offer Node.js Application Services
The Amazon Web Services (AWS) team recently added support for Node.js to its Elastic Beanstalk service, giving it an industry-leading set of supported platforms. In addition to Node.js, the AWS Elastic Beanstalk gives developers the ability to package, deploy, and manage applications written in Java, PHP, .NET, Ruby, and Python. AWS has joined a crowded field of Node.js-friendly clouds and will attempt to differentiate themselves through integration with other top AWS services.
In a blog post about the addition of Node.js to the AWS Elastic Beanstalk, AWS CTO Werner Vogels described some of the reasons for including this increasingly-popular platform.
I spent a lot of time talking to AWS developers, many working in the gaming and mobile space, and most of them have been finding Node.js well suited for their web applications. With its asynchronous, event-driven programming model, Node.js allows these developers to handle a large number of concurrent connections with low latencies. These developers typically use EC2 instances combined with one of our database services to create web services used for data retrievals or to create dynamic mobile interfaces
Jeff Barr of the AWS team pointed out some of his favorite features of Node.js on Elastic Beanstalk.
- Choose Nginx or Apache as the reverse proxy to your Node.js application. You can even choose to not use any proxy if your application requires that the client establishes a direct connection.
- Configure HTTP and TCP load balancing depending on what your application needs. If your application uses WebSockets, then TCP load balancing might be more appropriate for your workload.
- Configure the Node.js stack by using the specific version of Node.js that your application needs or by providing the command that is used to launch your Node.js application. You can also manage dependencies using npm.
- Help improve performance by configuring gzip compression and static files when using Nginx or Apache. With gzip compression, you can reduce the size of your response to the client to help create faster transfer speeds. With static files, you can let Nginx or Apache quickly serve your static assets (such as images or CSS) without having these requests take time away from the data-intensive processing that your Node.js application might be performing.
- Seamlessly integrate your app with Amazon RDS to store and retrieve data from a relational data store.
- Customize your EC2 instances or connect your app to AWS resources using Elastic Beanstalk configuration files (visit the AWS Elastic Beanstalk Developer Guide to learn more about configuration files).
- Run your Node.js application inside an Amazon Virtual Private Cloud for additional networking control.
In addition to those features listed, the Elastic Beanstalk also supports Git integration, clustering for high availability, and usage of environment-specific variables. AWS made its first foray into Node.js back in December 2012 when they launched an SDK for Node.js developers. This SDK provides access to a vast majority of the available AWS services including Amazon DynamoDB, Amazon Simple Storage Service (S3), Amazon Relational Database Service (RDS), Amazon Simple Queue Service (SQS), Amazon Elastic Compute Cloud (EC2), and more.
AWS joins many other clouds in offering Node.js application services. With the exception of the Google App Engine, nearly every major Platform-as-a-Service vendor offers a Node.js fabric including Heroku, Windows Azure, Open Shift, Engine Yard, and the many providers of Cloud Foundry. All of these vendors also compete with thought leader and dedicated Node.js platform provider Nodejitsu. So how do these vendors differentiate themselves? One way is through tooling. Werner Vogels points out how Elastic Beanstalk is tightly integrated into the development tools of many top platforms.
You can deploy and manage your applications in any AWS region (except for GovCloud). Many tools are available for you to deploy and manage your application, just choose your favorite flavor. If you’re building Java applications, you can use the AWS Toolkit for Eclipse. If you’re building .NET applications, you can use the AWS Toolkit for Visual Studio. If you prefer to work in a terminal, you can use a command line tool called ‘eb’ along with Git. Partners like eXoCloud IDE also offer integration with Elastic Beanstalk.
exoCloud, now spun off as Codenvy, provides developers a cloud-based development environment that can target the Elastic Beanstalk for Node.js deployments.
In addition to providing developers with tools to build and deploy Node.js applications, cloud providers are differentiating themselves through integration with complimentary services, and by offering solutions to the “hard” problems in application management. A compelling aspect of running Node.js on the Elastic Beanstalk is the ability to easily integrate with the many application services provided by AWS. Node.js applications that run in the AWS environment have low latency access to databases, storage, compute, queuing, caching, and much more. Clouds like Windows Azure have a similar value proposition where developers who deploy Node.js applications there also have access to diverse set of native services for databases, storage, and messaging. Providers like Heroku and Nodejitsu don’t have their own set of complimentary application services, but they maintain curated catalogs of services that can integrate with applications running on their platform.
In addition to providing complimentary services as a way to differentiate themselves, cloud providers also tout their ability to make application deployment and management easier. This means supporting web-based source control repositories – as clouds like AWS, Windows Azure, and Nodejitsu do – and offering continuous deployment services, as Nodejitsu does through TravisCI support. A high quality monitoring and response system can make capacity management much simpler for cloud developers and administrators. AWS has products for monitoring cloud usage and automatically resizing application environments and Werner Vogels explained how the Elastic Beanstalk helps provision applications with all the management capabilities included.
Elastic Beanstalk automates the provisioning, monitoring, and configuration of many underlying AWS resources such as Elastic Load Balancing, Auto Scaling, and EC2. Elastic Beanstalk also provides automation to deploy your application, rotate your logs, and customize your EC2 instances.
Keep an eye on this space as cloud providers enhance the application management capabilities of their platforms while offering native or integrated services that enhance the usefulness of applications running on their platforms.
Shane Hastie on Distributed Agile Teams, Product Ownership and the Agile Manifesto Translation Program
Shane Hastie Apr 17, 2015