I’m trying to set up a mechanism for easily pushing out changes from our (local) development/testing server to multiple endpoints in the cloud. The application is an ASP.NET web app that is version controlled using Mercurial.
There are some challenges which prompted this:
- The connection speed between our local network and the EC2 instances is extremely slow, barely usable
- The app itself is fairly large, ~0.6 gigs
The system that I’m envisioning would be capable of the following:
- Simple, automated control (we’d just have specify an ‘update’ command)
- Fast
- Would update only the changes required
- Would be reversible (i.e. we could rollback updates if needed)
- Would be capable of sending updates from any server, not just the dev server (not as important as the other points)
So, basically I was envisioning a client/server combination that would sit on every server and wait for update commands. The speed problem can be remedied using Amazon’s S3, it seems. For some reason, uploading to S3, then downloading from within the cloud is much faster than uploading directly to the cloud. Ideally, we’d use their API in the app.
The question is, are there tools that already do what I’m attempting to accomplish? And if not, what would be the best way to communicate the “update” command to the other servers?
In the end, we built a small client/server app that listens for remote commands and executes push/pull/update/patch, and anything else that might be necessary.
To get around the throttling issue, we ended up using Amazon S3, as we had suspected we would. For local communication (we have a few local servers still), we built a simple TCP-based transfer method, but resorted to S3 when communicating with the cloud. It was built using the AWS SDK.