new aws development services

Originally I had planned to attend re:Invent this year with one of the members of my team. Due to unforseen circumstances, I was unable to make it, however I have reviewed some of the services that were added and wanted to make some quick notes.

AWS CodeDeploy

AWS CodeDeploy is a service that automates code deployments to Amazon EC2 instances. AWS CodeDeploy makes it easier for you to rapidly release new features, helps you avoid downtime during deployment, and handles the complexity of updating your applications. You can use AWS CodeDeploy to automate deployments, eliminating the need for error-prone manual operations, and the service scales with your infrastructure so you can easily deploy to one EC2 instance or thousands.

AWS CodePipeline

AWS CodePipeline is a continuous delivery and release automation service that aids smooth deployments. You can design your development workflow for checking in code, building the code, deploying your application into staging, testing it, and releasing it to production. You can integrate 3rd party tools into any step of your release process or you can use CodePipeline as an end-to-end solution. CodePipeline enables you to rapidly deliver features and updates with high quality through the automation of your build, test, and release process. CodePipeline will be available in early 2015.

So even though they didn't use the buzzwords, this is a Continuous Deployment (CD) tool tied into their infrastructure with an ansible-like orchestrator-type tool to handle managing configuration, scaled deployments and minimal downtime. You can easily do these tasks with any number of CI/CD tools, in-house like Jenkins, or online like Wercker, either way, they get the job done. I can't see using one without the other, and as both are not available yet, I will be revisiting this next year.

AWS CodeCommit

AWS CodeCommit is a secure, highly scalable, managed source control service that hosts private Git repositories. CodeCommit eliminates the need for you to operate your own source control system or worry about scaling its infrastructure. You can use CodeCommit to store anything from code to binaries, and it supports the standard functionality of Git allowing it to work seamlessly with your existing Git-based tools. Your team can also use CodeCommit’s online code tools to browse, edit, and collaborate on projects. CodeCommit will be available in early 2015.

As this one is not yet available, I can't say what it will be, however, more choices in the hosted git arena can only be a good thing. Google added something similar to GCE earlier this year and this seems like it is just a case of maintaining parity and integration with the other new tools.

When making a decision regarding hosting of your git, the real question comes down to in-house or external. If you have requirements that prevent you from using external, then this won't help you. Either take a look at indefero, gitbucket or gitlab, all are great options, however make sure you have people internally to maintain and support these. Git support tends to be more indepth than most tools, so having strong people on hand will allow this option to succeed.

As to the external hosted route, you have many options again, but the question comes down to social coding or just hosting. For social, github has the lock, but bitbucket seems to be everyones backup preference due to the unlimited private repository offering. Google and Amazon are playing in this arena, and I just don't see how either can get the marketshare for anything but enterprises that want to limit their vendors used.

Amazon RDS for Aurora

Amazon Aurora is a MySQL-compatible, relational database engine that combines the speed and availability of high-end commercial databases with the simplicity and cost-effectiveness of open source databases. Amazon Aurora joins MySQL, Oracle, Microsoft SQL Server, and PostgreSQL as the fifth database engine available to customers through Amazon RDS.

Once again this is something Google quietly added to GCE this last year. We evaluated this and the main complaint I heard came from someone a bit out of touch with SaaS/PaaS/IaaS, which was that you couldn't edit the config files. This came from the misunderstanding that these types of services are not your grandma's mysql. While you may be able to connect with a mysql-client and use this like you are used to. The service behind it is something new and powerful and the client compatibility is strictly for dev friendliness. In today's landscape, especially with startups, you don't always have someone with time to be DBA or SysAdmin even if they know how. And just like editing that config file, it may seem like you think you know how to tweak this or that, but there are people at AWS and GCE making it work at scale behind the scenes and they are happy to support the service with better attention than you can. I can't speak highly enough of services like this and the other RDS products. Keeping the databases running is the easiest, hardest and the riskiest part of development, its better to have support from the people who know how to do this correctly.

Now we come to my personal favorite, which was again a focus of the recent GCE additions on their roadshow.

Amazon EC2 Container Service

Amazon EC2 Container Service is a highly scalable, high performance container management service that supports Docker containers and allows you to easily run distributed applications on a managed cluster of Amazon EC2 instances. Amazon EC2 Container Service lets you launch and stop container-enabled applications with simple API calls, allows you to query the state of your cluster from a centralized service, and gives you access to many familiar Amazon EC2 features like security groups, EBS volumes and IAM roles. You can use EC2 Container Service to schedule the placement of containers across your cluster based on your resource needs, isolation policies, and availability requirements. Amazon EC2 Container Service eliminates the need for you to operate your own cluster management and configuration management systems or worry about scaling your management infrastructure.

This is what I have waited on, and where AWS blew GCE away. While Google offered up Kubernetes and Orchestrator, there was no fleshed out, ready-for-primetime, integrated tool to begin deploying at scale. I was in the process of creating a working solution for my use when I first saw this. I now wish I had just waited 6 months and migrate all at once. For as much talk at the GCE cloud roadshow about containers, Google just didn't have all the tools in place for the end-to-end solution to JustWork(tm) without spending another couple of weeks to learn all the pieces. Now you can spend a day getting familiar with the DockerFile and begin using this great technology now.

Overall, AWS and GCE seem to be racing to implement the same features in high demand. While Google focused heavily on container technology this year, Amazon rounded out the offerings with a complete suite of services that meet the needs of the typical developer of today. Rackspace has added an offering this year to be the DevOps team for you, but Amazon has given you the tools to do it all on your own and integrated in a way which allows your developers to maintain all aspects from code to server with the help from Amazon.

Feel free to take a look at the full list on the re:Invent new products and services page.

debian: phpmyadmin with nginx no apache

If you ever have a need for phpmyadmin for a debian machine running nginx you may notice a bunch of apache dependencies in the list when you try to install with apt-get. This is foul if all you wanted was phpmyadmin.

Here's how to get around it.

sudo apt-get update  
sudo apt-get install php5-cli php5-fpm fcgiwrap  
sudo apt-get --no-install-recommends install phpmyadmin  

I will note, you do not need both php5-cli and php5-fpm depending on your needs and setup, but you can always remove them later as well, they will satisfy the dependencies without having to install apache2.