<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUMGRHg4eip7ImA9WhRbEkQ.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120</id><updated>2012-02-03T10:23:45.632-08:00</updated><category term="logging" /><category term="AdLib" /><category term="rules of life" /><category term="amazon web services" /><category term="sysadmin" /><category term="s3" /><category term="snow leopard" /><category term="ec2" /><category term="apple" /><category term="risk management" /><category term="sdb" /><category term="RPC" /><category term="define cloud" /><category term="service" /><category term="python2.6" /><category term="Mobile Phones" /><category term="April 1" /><category term="HTTP" /><category term="loggly" /><category term="Theories" /><category term="Web Development" /><category term="user group" /><category term="developers" /><category term="python" /><category term="$NAME" /><category term="10.6" /><category term="newstex" /><category term="pysvn" /><category term="amazon linux ami" /><category term="vim" /><category term="senior project" /><category term="Apache" /><category term="disaster recovery" /><category term="Events" /><category term="aws" /><category term="Jokes" /><category term="cloud computing" /><category term="REST" /><category term="cloud architectures" /><category term="us-west" /><category term="macpro" /><category term="simple notification service" /><category term="iTunes Match" /><category term="syslog" /><category term="college" /><category term="rit" /><category term="monitoring" /><category term="micro instances" /><category term="April Fools" /><category term="migrating images" /><category term="cloud" /><category term="what is a cloud" /><category term="OSX" /><category term="icloud" /><category term="route53" /><category term="ATT" /><category term="xcode" /><category term="lxml" /><category term="iPhone" /><category term="rsyslog" /><category term="dns" /><category term="software" /><category term="WebDav" /><category term="mac" /><category term="pyflakes" /><category term="ebs outage" /><category term="sns" /><category term="design" /><category term="gcc" /><category term="Verizon" /><category term="Web Applications" /><category term="boto" /><category term="fail" /><category term="iPad" /><category term="itunes" /><category term="us-east" /><category term="ec2 outage" /><title>Chris Moyer</title><subtitle type="html">Author of "Building Applications in the Cloud: Concepts, Patterns, and Projects"</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.coredumped.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.coredumped.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ChrisMoyer" /><feedburner:info uri="chrismoyer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEIMRHsyeip7ImA9WhRbEk0.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-781322692048377280</id><published>2012-02-02T10:16:00.000-08:00</published><updated>2012-02-02T10:16:25.592-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T10:16:25.592-08:00</app:edited><title>Splunk Storm: Another Cloud Logging alternative?</title><content type="html">In December, I posted an article on&lt;a href="http://blog.coredumped.org/2011/12/great-search-for-syslog-services.html"&gt; My Great Search for Syslog services&lt;/a&gt;. Since then, We've started using Papertrail to log and manage our numerous cloud-based servers. Papertrail so far seems great, it gives us a live tail of our logs, as well as search ability and even the ability to archive all of our log content to S3. (I love when services offer exporting to S3).&lt;br /&gt;
&lt;br /&gt;
One major drawback of Papertrail, however, is that it's really only useful to tech-savy users. You can only spot issues if you know exactly what you're looking at. It doesn't really have a way to map what your logs &amp;nbsp;say into any meaningful segments. It does do a &lt;i&gt;decent&lt;/i&gt;&amp;nbsp;job most of the time trying to pick some common things out, but my logs are very structured, it would be nice if I could explain my structure to Papertrail.&lt;br /&gt;
&lt;br /&gt;
I recently received a Beta invite to the &lt;a href="https://www.splunkstorm.com/"&gt;SplunkStorm&lt;/a&gt; project (I can only assume it was in relation to my blog post). I never looked at &lt;a href="http://www.splunk.com/"&gt;Splunk&lt;/a&gt; before, since it really is an "in-house" solution, not a service. This new model, however, is just what I'm looking for: A true Syslog service offering a nice pay-as-you-go structure (or so they're planning). It's still in beta so no prices are out yet, but from what I can tell the pricing structure will be based on the data that's searchable. In Papertrail, you pay for how much log data you send into the system, whereas SplunkStorm meters by how much data you &lt;i&gt;retain&lt;/i&gt;&amp;nbsp;in the system. Once there's too much info in your Project, old data is removed to make way for the new stuff. &lt;b&gt;This means you always can send data into your project and continue to search it&lt;/b&gt;. They don't simply start dropping logs after a certain period of time.&lt;br /&gt;
&lt;br /&gt;
Ok, so that's the pricing structure (or so it appears), but what about functionality?&lt;br /&gt;
&lt;br /&gt;
Well, they offer a very complex search system, which includes being able to graph (something Papertrail folks are still working on), and the ability to do other very complicated behaviors.&lt;br /&gt;
&lt;br /&gt;
But it gets better...&lt;br /&gt;
&lt;br /&gt;
They have a unique "Dashboard" system, which lets you set up custom graphs based on specific events, splitting on any field in your logs.&lt;br /&gt;
&lt;br /&gt;
Yes... Field, not hostname, not application name, field.&lt;br /&gt;
&lt;br /&gt;
So what is a field?&lt;br /&gt;
&lt;br /&gt;
They have several "templates" that pull out common information (for example, one template parses an Apache log), but if yours doesn't quite fit? no problem, just use their Template system and you can give it &lt;i&gt;any regular expression and mapping out to custom fields&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
First you set up a thing called a &lt;b&gt;Field Transformation&lt;/b&gt;. Under &lt;i&gt;Manage-&amp;gt;Fields-&amp;gt;Field Transformations&lt;/i&gt;&amp;nbsp;you can clone an existing one, or start from scratch. Setting up a Field Transformation is relatively simple, you give it a regex and a mapping. My boto config specifies this logging format for my logs that go to syslog:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;%(name)s[%(process)d]: %(levelname)s %(message)s&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, when using multiple processes/threads with the logging module, you'll often get crap in your log messages:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;11&amp;gt;Feb &amp;nbsp;2 18:06:09 hostname ﻿&amp;lt;14&amp;gt;botoweb.url_mapper[3000]: INFO [username] GET: /&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
these &amp;lt;14&amp;gt; and often &amp;lt;11&amp;gt; appear in the logs just before the date and log name in most (but not all) of my log lines.&lt;br /&gt;
&lt;br /&gt;
Ok, so lets parse this out. We'll start off with a Transformation named &lt;b&gt;syslog-boto&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Enter my massive regex:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;^(&amp;lt;\d+&amp;gt;)?([A-Z][a-z]+\s+\d+\s\d+:\d+:\d+)\s([a-zA-Z0-9\.\_]+)\s+(&amp;lt;\d+&amp;gt;)?([a-zA-Z\.\_\-]+)\[(\d+)\]:\s+([A-Z]+)\s+(\[([a-zA-Z0-9_]+)\]\s+)?(.*)$&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And my "format":&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;date::$2 host::$3 process::5 pid::$6 level::$7 username::$9 message::$10&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And tada! We now have a proper way to map these logs to their different field names.&lt;br /&gt;
&lt;br /&gt;
But wait, it's still not quite completed! You have to then set up a &lt;b&gt;Field Extraction&lt;/b&gt;&amp;nbsp;that tells your project when to use this template. I set mine up like this:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;: syslog-boto&lt;br /&gt;
&lt;b&gt;Apply to&lt;/b&gt;: sourcetype&lt;br /&gt;
&lt;b&gt;Named&lt;/b&gt;: syslog&lt;br /&gt;
&lt;b&gt;Type:&lt;/b&gt;&amp;nbsp;Uses transform&lt;br /&gt;
&lt;b&gt;Extraction/transform:&lt;/b&gt;&amp;nbsp;syslog-boto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Save, and now check your logs, you'll see they're parsed out now. You can even search by field name such as this:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;level=info AND username=cmoyer&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There's so much more you can do with SplunkStorm. You can create dashboards now based on these fields. For example to chart out activity on your botoweb server by username:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;level=INFO | timechart count(_raw) by username&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;What else are you using SplunkStorm to do?&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-781322692048377280?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/38YLwgK5cIeOWXuYl0nCvzKUcLU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/38YLwgK5cIeOWXuYl0nCvzKUcLU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/38YLwgK5cIeOWXuYl0nCvzKUcLU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/38YLwgK5cIeOWXuYl0nCvzKUcLU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/-IbkPGCToSs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/781322692048377280/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=781322692048377280" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/781322692048377280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/781322692048377280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/-IbkPGCToSs/splunk-storm-another-cloud-logging.html" title="Splunk Storm: Another Cloud Logging alternative?" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2012/02/splunk-storm-another-cloud-logging.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCSHg7fCp7ImA9WhRUE04.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7856265724548962767</id><published>2012-01-23T07:09:00.000-08:00</published><updated>2012-01-23T07:09:29.604-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T07:09:29.604-08:00</app:edited><title>Amazon DynamoDB</title><content type="html">Last week, Amazon announced the launch of a new product, &lt;a href="http://aws.amazon.com/dynamodb/"&gt;DynamoDB&lt;/a&gt;. Within the same day, Mitch Garnaat quickly released support for DynamoDB in &lt;a href="https://github.com/boto/boto"&gt;Boto&lt;/a&gt;. I quickly worked with Mitch to add on some additional features, and work out some of the more interesting quirks that DynamoDB has, such as the provisioned throughput, and what exactly it means to read and write to the database.&lt;br /&gt;
&lt;br /&gt;
One very interesting and confusing part that I discovered was how Amazon actually &lt;i&gt;measures&lt;/i&gt;&amp;nbsp;this provisioned throughput. When creating a table (or at any time in the future), you set up a provisioned amount of "Read" and "Write" units individually. At a minimum, you must have at least 5 Read and 5 Write units partitioned. What isn't as clear, however, is that &lt;b&gt;read and write units are measured in terms of 1KB operations&lt;/b&gt;. That is, if you're reading a single value that's 5KB, that counts as 5 Read units (same with Write). If you choose to operate in eventually consistent mode, you're charged for half of a read or write operation, so you can essentially get double your provisioned throughput if you're willing to put up with only eventually consistent operations.&lt;br /&gt;
&lt;br /&gt;
Ok, so read operations are essentially just look-up operations. This is a database after all, so we're probably not just going to be looking at looking up items we know, right?&lt;br /&gt;
&lt;br /&gt;
Wrong.&lt;br /&gt;
&lt;br /&gt;
Amazon does offer a "Scan" operation, but they state that it is very "expensive". This isn't just in terms of speed, but also in terms of partitioned throughput. A scan operation iterates over &lt;i&gt;every&lt;/i&gt;&amp;nbsp;item in the table, It then filters out the returned results, based on some very crude filtering options which are not full SQL-like, (nothing close to what SDB or any relational database offers). What's worse, a single Scan operation can operate on up to 1MB of data at a time. Since Scan operates only in eventually consistent mode, that means it will use up to 500 Read units in a single operation (1,000KB items/2 (eventually consistent) = 500). If you have 5 provisioned Read units per second, that means &lt;b&gt;you're going to have to wait 100 seconds (almost 2 minutes)&lt;/b&gt; before you can perform another Read operation of any sort again.&lt;br /&gt;
&lt;br /&gt;
So, if you have 1 Million 1KB records in your Table, that's approximately 1,000 Scan operations to perform. Assuming you provisioned 1,000 Read operations per second, that's roughly 17 minutes to iterate through the entire database. Now yes, you could easily increase your read operations to cut that time down significantly, but lets assume that at a minimum it takes at least 10ms for a single scan operation. That still means the fastest you could get through your meager 1 Million records is 10 seconds. Now extend that out to a billion records. Scan just isn't effective.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So what's the alternative? Well there's this other very obscure ability that DynamoDB has, you may set your Primary Key to a Hash and Range key. You always need to provide your Hash Key, but you may also provide the Range Key as either Greater then, Less then, Equal To, &amp;nbsp;Greater then or equal to, Less then or equal to, Between, or Starts With using the &lt;b&gt;Query&lt;/b&gt;&amp;nbsp;operation.&lt;br /&gt;
&lt;br /&gt;
Unlike Scan,&lt;b&gt; Query only operates on matching records&lt;/b&gt;, not all records. This means that you only pay for the throughput of the items that match, not for everything scanned.&lt;br /&gt;
&lt;br /&gt;
So how do you effectively use this operation? Simply put, you have to build your own special indexes. This lends itself to the concept of "Ghost Records", which simply point back to the original record, letting you keep a separate index of the original for specific attributes. Lets assume we're dealing with a record representing a Person. This Person may have several things that identify it, but lets use a unique identifier as their Hash key, with no Rage key. Then we'll create several separate Ghost records, in a different table. Lets call this table "PersonIndex".&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KA6xANHcqjI/Tx12uZF6BNI/AAAAAAAAAL4/IoXLWwqpVkY/s1600/PeoplePersonIndex.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="113" src="http://4.bp.blogspot.com/-KA6xANHcqjI/Tx12uZF6BNI/AAAAAAAAAL4/IoXLWwqpVkY/s320/PeoplePersonIndex.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now if we want to search for someone by their First Name, we simply issue a query with a Hash Key of property = "First Name", and a range Key of the first name we're looking for, or even "Starts With" to match things like "Sam" to match "Samuel". We can also insert "alias" records, for things like "Dick" to match "Richard". Once we retrieve the Index Record, we can use the "Stories" property to go back and retrieve the Person records.&lt;br /&gt;
&lt;br /&gt;
So now to search for a record it takes us &amp;nbsp;Read operation to search, and 1 Read operation for each matching record, which is a heck of a lot cheaper then one million! The only negative is that you also have to maintain this secondary table of Indexes. Keeping these indexes up to date is the hardest part of maintaining your own separate indexes. however, if you can do this, you can search and return records within milliseconds instead of seconds, or even minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How are you using or planning to use Amazon DynamoDB?&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7856265724548962767?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MqdFHHNybb9v5b59r3RJ3ZP_W4o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MqdFHHNybb9v5b59r3RJ3ZP_W4o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MqdFHHNybb9v5b59r3RJ3ZP_W4o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MqdFHHNybb9v5b59r3RJ3ZP_W4o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/8eL2N2wkYyc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7856265724548962767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7856265724548962767" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7856265724548962767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7856265724548962767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/8eL2N2wkYyc/amazon-dynamodb.html" title="Amazon DynamoDB" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-KA6xANHcqjI/Tx12uZF6BNI/AAAAAAAAAL4/IoXLWwqpVkY/s72-c/PeoplePersonIndex.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2012/01/amazon-dynamodb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMQno8eSp7ImA9WhRVFEs.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7472666364345722852</id><published>2012-01-13T06:58:00.000-08:00</published><updated>2012-01-13T06:58:03.471-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-13T06:58:03.471-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>What's coming up for Amazon Web Services Cloud?</title><content type="html">Amazon announced today the new upcoming Live streaming event for &lt;a href="http://aws.amazon.com/register-livestream-cloud/"&gt;What's up and coming in AWS for 2012&lt;/a&gt;. It's not surprising since they've recently hired a ton of new people, including &lt;a href="http://aws.typepad.com/aws/2012/01/big-news-regarding-python-boto-and-aws.html"&gt;Mitch Garnaat&lt;/a&gt;, creator of Boto and former co-worker of mine. They've recently been launching new services all over the globe, &lt;a href="http://aws.amazon.com/about-aws/whats-new/2011/12/14/announcing-the-south-america-sao-paulo-region/"&gt;including new regions&lt;/a&gt; and CloudFront/Route53 Endpoints. With the additional &lt;a href="http://aws.amazon.com/about-aws/whats-new/2012/01/10/AWS-Direct-Connect-GA-US-West-1/"&gt;new Direct Connect locations&lt;/a&gt;, it's also easier then ever to build a Hybrid cloud.&lt;br /&gt;
&lt;br /&gt;
They've also been launching new services, such as &lt;a href="http://aws.amazon.com/elasticache/"&gt;ElastiCache&lt;/a&gt;, a memcached service offered up directly from Amazon. And of course it wouldn't be amazon without dozens of improvements to existing services, such as finally enabling console logins for&lt;a href="http://aws.amazon.com/iam/"&gt; IAM users&lt;/a&gt;, and vast improvements to &lt;a href="http://aws.amazon.com/about-aws/whats-new/2011/12/28/Amazon-SNS-adds-support-for-Delivery-Policies-and-Message-Formatting/"&gt;Amazon SNS.&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So what then really can we expect at this new announcement? A few things have been on the radar for quite a while now:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Location-Aware Route53 (DNS) - Make sure that users get the closest server to where they are&lt;/li&gt;
&lt;li&gt;Two-Factor Auth for IAM Users&lt;/li&gt;
&lt;li&gt;APN (Apple Push Notifications) support for SNS&lt;/li&gt;
&lt;li&gt;"Pass Through" option for CloudFront (i.e. don't cache certain URLs)&lt;/li&gt;
&lt;li&gt;Lots of improvements for SimpleDB, such as SQL functions and cross-domain joins.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What do you think? What other improvements have you been waiting on for AWS?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7472666364345722852?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7dHDD8K6ro3ky2dzpBUDACyubAM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dHDD8K6ro3ky2dzpBUDACyubAM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7dHDD8K6ro3ky2dzpBUDACyubAM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dHDD8K6ro3ky2dzpBUDACyubAM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/61lab1_jIjY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7472666364345722852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7472666364345722852" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7472666364345722852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7472666364345722852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/61lab1_jIjY/whats-coming-up-for-amazon-web-services.html" title="What's coming up for Amazon Web Services Cloud?" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2012/01/whats-coming-up-for-amazon-web-services.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAHSXs8fyp7ImA9WhRWF0Q.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-5058980892840677490</id><published>2012-01-05T11:45:00.000-08:00</published><updated>2012-01-05T11:45:38.577-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T11:45:38.577-08:00</app:edited><title>Monitor your SDB Domains</title><content type="html">This recently came up in the &lt;a href="http://groups.google.com/group/boto-users?pli=1"&gt;Boto-Users &lt;/a&gt;mailing list, so I thought I'd post here a few quick details on how to monitor your &lt;a href="http://aws.amazon.com/simpledb/"&gt;SimpleDB&lt;/a&gt; domains to prevent them from hitting maximum capacity before you know it.

&lt;br /&gt;
&lt;br /&gt;
As you should be aware, &lt;a href="http://aws.amazon.com/simpledb/"&gt;SimpleDB&lt;/a&gt;&amp;nbsp;has a limit of 10GB per domain. This limit is calculated as a sum of the bytes used by Item Names, Attribute Names (unique), and Attribute Values. Fortunately, Attribute Names are only stored once per name, so you don't pay for each name being used multiple times, they just charge you per unique name.&lt;br /&gt;
&lt;br /&gt;
You can get all of the Usage information about your SDB Domain using the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;get_metadata&lt;/span&gt; function of a boto domain.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; import boto&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; sdb = boto.connect_sdb()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; db = sdb.lookup("my-domain")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; md = db.get_metadata()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;This "md" object then contains the following elements:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;md.item_names_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;md.attr_names_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;md.attr_values_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;md.item_count&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;I wrote a simple script to check my domains, which takes an optional list of arguments for domain names to check. If you dont' pass in a domain name, it will iterate over all of them and show you any domain that uses more then 3GB:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;"""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Check script to make sure none of our domains are close to the size limit&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;"""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;import boto&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if __name__ == "__main__":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;import sys&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;sdb = boto.connect_sdb()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;if len(sys.argv) &amp;gt; 1:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; query = [sdb.lookup(n) for n in sys.argv[1:]]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; limit = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;else:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; query = sdb.get_all_domains()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; limit = 3000000000&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;for db in query:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; md = db.get_metadata()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = int(md.item_names_size) + int(md.attr_names_size) + int(md.attr_values_size)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if total &amp;gt; limit:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print db.name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\tItems:", md.item_count&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\tItem Name Size:", md.item_names_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\tAttribute Name Size:", md.attr_names_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\tAttribute Values Size:", md.attr_values_size&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\t---------------------------------------------"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print "\tTOTAL:", total&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;If your domain is using more then 10GB of space, you can use this to track down what's using a lot of space. In my case, I was adding a lot of&amp;nbsp;&lt;/span&gt;unnecessary&lt;span style="font-family: inherit;"&gt;&amp;nbsp;items that were almost completely blank, so my item_count was huge, and my item_names_size was over 7GB.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Of course, if you do have need for all these items, you should consider &lt;i&gt;Sharding&lt;/i&gt;&amp;nbsp;your domain into multiple sub-domains. This process is usually handled by taking one attribute that nicely splits your items into different segments, and using that value as the domain name. Unfortunately, you can not query across multiple domains, so you have to be very careful what you choose as your Shard Key.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-5058980892840677490?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2X3wDiblFDFYgJ0I2yL6jJ4kpJU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2X3wDiblFDFYgJ0I2yL6jJ4kpJU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2X3wDiblFDFYgJ0I2yL6jJ4kpJU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2X3wDiblFDFYgJ0I2yL6jJ4kpJU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/Vhj2O0K5Vlg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/5058980892840677490/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=5058980892840677490" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/5058980892840677490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/5058980892840677490?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/Vhj2O0K5Vlg/monitor-your-sdb-domains.html" title="Monitor your SDB Domains" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2012/01/monitor-your-sdb-domains.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUDQH0_fyp7ImA9WhRWEks.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-3562913431609853119</id><published>2011-12-30T07:07:00.001-08:00</published><updated>2011-12-30T08:57:51.347-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T08:57:51.347-08:00</app:edited><title>The Great search for Syslog services</title><content type="html">&lt;p&gt;I've been spending a lot of time lately looking for a good replacement for &lt;a href="http://loggly.com"&gt;Loggly&lt;/a&gt;, ever since they've been having so many problems with uptime and availability. The most important feature of any log management platform is obviously to make sure it's available when I need it, and always collecting my logs. If the service drops 50% of my logs, then it's not very useful in tracking down those little bugs, I still have to log into all of my servers to see everything.&lt;/p&gt;

&lt;p&gt;Thanks very much to &lt;a href="http://sysadvent.blogspot.com/2011/12/day-16-shipping-some-logs.html"&gt;Jordan Sissel for his post on Shipping Some Logs&lt;/a&gt;, we've decided to switch away from Loggly, to something else&lt;/p&gt;

&lt;h1&gt;Features of Log Management Solutions&lt;/h1&gt;
&lt;p&gt;What we really need out of a log management solution is something that &lt;b&gt;easily integrates with our services transparently&lt;/b&gt;. What I mean by that is not something that will take extra code-level development work in order to use. We use Python with the standard logging module, which we then push to syslog. Syslog (or rsyslog as we use now) allows us to ship off logs to another remote server, which is really what we like to do. That means that no matter what language we use, all of our logs are able to be stored both locally and shipped off to the log management solution, without any integration with our actual programs. We also like to see logs from native linux apps like SSH, so the only real solution for us is something that integrates with syslog&lt;/p&gt;

&lt;h2&gt;Scale and Search&lt;/h2&gt;
&lt;p&gt;It also &lt;b&gt;Needs to scale&lt;/b&gt;. We follow the rule of Log everything, even if you don't think you'll need it. Its not abnormal to have over 1 million log events, or 1GB of log data, in a single day. If you log everything, you can sort through things later to more easily find out what happened.&lt;/p&gt;

&lt;p&gt;Since we do log everything, what we really need is the ability to &lt;b&gt;search&lt;/b&gt; for something across all of our systems. We need to be able to trace down something that may have gone wrong and figure out exactly where it went wrong&lt;/p&gt;

&lt;h2&gt;Alerts&lt;/h2&gt;
&lt;p&gt;We also want to be able to use our logging solution to &lt;b&gt;alert us if something is going wrong&lt;/b&gt;. Specifically we have two types of alerts:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;If more then X events appear in Y minutes (error threshold)&lt;/li&gt;
  &lt;li&gt;If LESS then X events appear in Y minutes (heartbeat)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Specifically, we deliver to clients using FTP, HTTP, or other methods, and we need to be alerted if we haven't delivered in over 10 minutes, or if we've received more then a few errors per client in an hour. It's not abnormal to have a client system go down for a few minutes, or receive just a periodic error (the internet is not perfect, after all), but if there say 500 errors delivering to client Z in an hour, then someone should be alerted. It's also nice to be able to schedule timeframes for when these alerts run, but that's just icing on the cake&lt;/p&gt;

&lt;h2&gt;Graphing&lt;/h2&gt;
&lt;p&gt;Another feature we would &lt;i&gt;like&lt;/i&gt; to have is the ability to &lt;b&gt;graph events&lt;/b&gt;. Take for example graphing how many errors you've had over the past day. Even better, how many deliveries have you had over the past month? This could show us what days we have the heaviest amount of load on our services, and we could then use that information to determine when we need to have more servers available (after all, we're in the cloud so that can be really automated).&lt;/p&gt;

&lt;h2&gt;Uptime is key&lt;/h2&gt;
&lt;p&gt;The most important piece of any log management solution though, is &lt;b&gt;consistent uptime and availability&lt;/b&gt;. If your logs are lost, or if you can't get to them in the time of an emergency, or if alerts suddenly fail because the service isn't available, then the service is completely useless&lt;/p&gt;

&lt;h1&gt;What services have we looked at?&lt;/h1&gt;
&lt;p&gt;We've looked at quite a few different services to solve our logging problems. Obviously we don't want to roll our own service, since that's really not our core business, and we don't want to maintain yet another system that doesn't make us any money. Here's a list of what we've looked at
&lt;h2&gt;Loggly&lt;/h2&gt;
&lt;p&gt;We previously were using Loggly. It's cheap, only about $200/month for up to 1GB/day and 90 days of search history. It gives you graphs, search, and it's got the easy integration. With the addition of AlertBirds, it also has very robust alert management. AlertBirds is actually not integrated directly with Loggly, but it's a free service that they do also provide.&lt;/p&gt;

&lt;p&gt;So why did we recently switch away from them? They violated the first rule of Log management, they had a horrible uptime. Whenever we went to their service, they always had a message about "Sorry, we're working on backfilling the servers with your logs". This type of transparency is nice, but it doesn't make up for constant issues. The final straw was &lt;a href="http://loggly.com/blog/2011/12/logglys-outage-for-december-19th/"&gt;A huge outage which lost all logs for several days&lt;/a&gt; and a weak apology where they basically blamed AWS for reboots, which &lt;a href="http://aws.amazon.com/maintenance-help/"&gt;Amazon announces up front that are not uncommon&lt;/a&gt;. Amazon has always had the policy that they may have to reboot your instance at any time. While they try to let you know about it, sometimes it's just not possible (what if a server suddenly dies?). They weakly tried to say it was their fault while simultaneously blaming AWS. It's one of the major points that anyone &lt;a href="http://www.amazon.com/gp/product/0321720202/ref=as_li_ss_tl?ie=UTF8&amp;tag=blogcoredumpe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321720202"&gt;seriously interested in cloud computing should handle from the beginning.&lt;/a&gt; It's one of the few rules of doing business in the cloud&lt;/p&gt;

&lt;h2&gt;Loggr.net&lt;/h2&gt;
&lt;p&gt;While digging around, I also took a look at &lt;a href="http://loggr.net"&gt;Loggr.net&lt;/a&gt;. While at first glance it does appear very nice, they offer tons of analytics tools, it again violates one of my primary rules. It requires you to use their API to push logs, it doesn't integrate seamlessly with Syslog or any other common standard. Additionally, they charge &lt;i&gt;per log event&lt;/i&gt;, and the highest plan they appear to have is for 20,000 log events per day. We blow through that in a few minutes, so obviously they're not designed to scale to what we need.&lt;/p&gt;

&lt;h2&gt;Papertrailapp&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://papertrailapp.com/"&gt;Papertrailapp&lt;/a&gt; is the current log management system of choice. They have one feature that I really wanted from the beginning with Loggly, being able to see a live tail of your logs. They do lack alerting and graphing, but they also offer up a &lt;a href="http://help.papertrailapp.com/kb/how-it-works/http-api"&gt;very nice API&lt;/a&gt; which means you could build it yourself, or simply wait for them to build it as they seem to be very concerned about their customers. I've had several email interactions with the folks there, which is quite frankly the entire reason we're still staying with them. What's even nicer is that unlike Loggly, I don't have to keep logging in every 5 minutes to view my logs. Automatic login that actually works is very nice.&lt;/p&gt;

&lt;p&gt;Although you wouldn't think much of it, being able to look at a live tail of a saved search is very important to debugging issues, or simply watching how well an upgrade went. Although Papertrailapp doesn't support more then 4 weeks of search, having this live tail of events is very nice to be able to see to get a "live look" at how well things are going in the system. They do also offer a nice &lt;b&gt;archival to your S3 bucket&lt;/b&gt; which means you could do your own work with your log events after the 30 days of search results in Papertrailapp are gone&lt;/p&gt;


&lt;h2&gt;What other solutions are people looking at?&lt;/h2&gt;
&lt;p&gt;Have a better solution or use something better? Please let me know in the comments!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-3562913431609853119?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MbLEM1N6xIpVG_R6ETrEWpgs_Ws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MbLEM1N6xIpVG_R6ETrEWpgs_Ws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MbLEM1N6xIpVG_R6ETrEWpgs_Ws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MbLEM1N6xIpVG_R6ETrEWpgs_Ws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/HPE4n1KHURk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/3562913431609853119/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=3562913431609853119" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/3562913431609853119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/3562913431609853119?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/HPE4n1KHURk/great-search-for-syslog-services.html" title="The Great search for Syslog services" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>9</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/12/great-search-for-syslog-services.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBQn8-fyp7ImA9WhRWEkg.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-1514658368449408563</id><published>2011-12-30T07:04:00.001-08:00</published><updated>2011-12-30T07:32:33.157-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T07:32:33.157-08:00</app:edited><title>ROI: Why aren't we building this ourselves?</title><content type="html">I've been going through a lot of services recently to simply purchase solutions to some oddball needs we have at Newstex. We've gone out and used &lt;a href="http://www.pingdom.com/"&gt;Pingdom&lt;/a&gt; for monitoring, &lt;a href="https://papertrailapp.com/"&gt;Papertrailapp&lt;/a&gt; for log management,&amp;nbsp;&lt;a href="http://www.localytics.com/"&gt;Localytics&lt;/a&gt; for mobile analytics, and&lt;a href="http://www.google.com/analytics/"&gt; Google Analytics&lt;/a&gt; for website analytics. I often stop and think "I could probably write this better", (and so do many of my employees), but the question is then why don't I?&lt;br /&gt;
The answer can be summed up in 3 words, Return on Investment. What exactly is the ROI for me building it myself, and how much would it actually cost to build and maintain the service, vs purchasing an external service that does the same thing?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Your time may be better spent elsewhere&lt;/h2&gt;

&lt;p&gt;
Most likely your company, like mine, isn't based around Log management. If the task you're thinking about doing yourself is solved by other solutions out there already, and it's not part of your core business, then you always have to remember that your time could be better spent doing things that improve your product.&lt;/p&gt;
&lt;p&gt;Lets take a look at Log Management. Yes, I could probably build a service that would be &lt;i&gt;better&lt;/i&gt; then Papertrailapp, providing me the features that I want and need without having other features that maybe I don't (although Papertrailapp doesn't have a lot of extra features that I wouldn't need). Maybe I could add in some nifty graphs, and other sorts of alert management, but how much time would that take me? At a minimum, it would take me several months to build a system to do all that paper trailapp does that I need, and it would take me several more months to add in everything I really &lt;i&gt;want that they don't have&lt;/i&gt;. But what would that give me? Would our core product be any better? What value could I have added to our core products that I couldn't because I was working on this project instead?&lt;/p&gt;

&lt;p&gt;Quite simply, you always have to ask yourself before you start on a project, &lt;i&gt;would my time be better spent elsewhere?&lt;/i&gt; If the answer is yes, you probably shouldn't be building it yourself.&lt;/p&gt;

&lt;h2&gt;It's probably not cheaper to build it yourself&lt;/h2&gt;

&lt;p&gt;Lets face it, no project is ever completed even after you're "finished" with it and it's being used. There's always regular maintenance, unexpected events, and updates that need to be done. That log management service may be costing you $200/month, but what's that in hours of your time? Lets say you get paid $20/hour, that's 10 hours of your time per month. That's &lt;i&gt;half an hour a day&lt;/i&gt; on average of your time. Would it cost you more then that to maintain and update the system? What about adding new features? Even if you ignore the fact that you had to initially build the system, you're still getting quite a deal. How can they do this cheaper then you can? Quite simply, they have more use of the same product. You don't. If you think it would take you less then half an hour a day on average just to maintain the system &lt;i&gt;even after it's built&lt;/i&gt;, you've probably never actually worked with a system this big. Do you think they spend less then that per day maintaining the system?&lt;/p&gt;


&lt;h2&gt;Leave it to the experts&lt;/h2&gt;

&lt;p&gt;You don't do this for a living, those that offer these services are focused completely on providing a service like this just for clients like you. If they're any good, they're also asking you for input on &lt;i&gt;how&lt;/i&gt; you use the system and what new features you might be looking for. What happens if the system goes down? Are you monitoring this daily to make sure you respond quickly to an outage? If it's running for months and then suddenly breaks, then you have to stop working on your &lt;i&gt;core business&lt;/i&gt; just to fix a problem with your log management system. Unless you're constantly working with it, it'll probably take you longer to "switch gears" and get back into the mode to fix and update the system. Leave it to the experts that work with their technology on a regular basis&lt;/p&gt;


&lt;p&gt;Anytime you think "I could write this better myself", don't forget to ask the question "but is it worth it?"&lt;/p&gt;

&lt;p&gt;A quick note on Papertrailapp, they are missing a few features I would love to see, but they &lt;a href="http://help.papertrailapp.com/kb/how-it-works/http-api"&gt;offer a very substantial API&lt;/a&gt; which can easily be used to add the features you may want, or integrate with your other systems.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-1514658368449408563?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lI-ArAFvnMmac8rHrAVmB5GVU9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lI-ArAFvnMmac8rHrAVmB5GVU9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lI-ArAFvnMmac8rHrAVmB5GVU9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lI-ArAFvnMmac8rHrAVmB5GVU9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/vCHBl5FAjLY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/1514658368449408563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=1514658368449408563" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1514658368449408563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1514658368449408563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/vCHBl5FAjLY/roi-why-arent-we-building-this.html" title="ROI: Why aren't we building this ourselves?" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/12/roi-why-arent-we-building-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcASXg-cCp7ImA9WhRXFEQ.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-1913780118111990938</id><published>2011-12-21T12:07:00.000-08:00</published><updated>2011-12-21T12:07:28.658-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T12:07:28.658-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="risk management" /><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin" /><category scheme="http://www.blogger.com/atom/ns#" term="monitoring" /><category scheme="http://www.blogger.com/atom/ns#" term="disaster recovery" /><title>Design for Failure</title><content type="html">Failures are inevitable. No system is entirely without them, it's how you deal with them that makes the difference. While many people will tell you that you should build your system so that it &lt;i&gt;does not&amp;nbsp;fail&lt;/i&gt;, in practice that's really just not possible. Instead of always trying to prevent &lt;i&gt;any sort of failure&lt;/i&gt;, it's often better to &lt;i&gt;be&amp;nbsp;prepared&lt;/i&gt;&amp;nbsp;for failure, and have a plan for what to do &lt;b&gt;when&lt;/b&gt;&amp;nbsp;your system fails. It's also important to &lt;b&gt;minimize the impact&lt;/b&gt;&amp;nbsp;of a failure. You'll also want to determine the &lt;b&gt;risk&lt;/b&gt;&amp;nbsp;of failures, and mitigate those risks using appropriate means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;




Split your system into Modules&lt;/h2&gt;
&lt;div&gt;
The first thing to do with any system is to make sure you split appart different features into different &lt;i&gt;self-reliant&lt;/i&gt; pieces. In this way you can &lt;b&gt;minimize impact&lt;/b&gt;&amp;nbsp;of an outage for a particular system. Making an online game? Make sure that if your website goes down (say, due to a DDOS attack), it doesn't take down the system that serves up your game to your clients. Writing an online video conversion tool? Make sure that even if your conversion servers are overloaded (or go down entirely), your users can still submit videos.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;





Monitor the health of your systems&lt;/h2&gt;
Another very common practice to minimize the impact of failures is to make sure that &lt;b&gt;you know when your service is down&lt;/b&gt;. You may have several different methods of determining the "health" of your system, but in the end you need to make sure that you're monitoring the end-to-end result of your system.&lt;br /&gt;
&lt;br /&gt;
But who monitors the monitors? If you're writing your own checks to monitor your systems, make sure there's a &lt;i&gt;third party&lt;/i&gt;&amp;nbsp;also involved. If your monitors are running on the same hardware or platform as your service, what happens if you have a hardware/platform failure? How are you being notified? If you're notification system goes down, do you find out about it?&lt;br /&gt;
&lt;br /&gt;
At Newstex, we use several different methods to monitor the health of our systems.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="http://pingdom.com/"&gt;Pingdom&lt;/a&gt;&lt;/h3&gt;
&lt;a href="http://pingdom.com/"&gt;Pingdom&lt;/a&gt; offers simple port-based checks. They have monitor servers located all across the world, and allow you to check things like web servers, or any generic TCP port. We use this to monitor the health of all of our web-accessible&amp;nbsp;services, as well as check some services that simply respond to HTTP just to verify the health of the system. Pingdom provides a nice tie-in with other services like &lt;a href="http://www.pagerduty.com/"&gt;Pagerduty&lt;/a&gt;&amp;nbsp;to notify your staff when there's a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="https://papertrailapp.com/"&gt;Papertrail&lt;/a&gt;&lt;/h3&gt;
&lt;a href="http://papertrailapp.com/"&gt;Papertrail&lt;/a&gt; is a nice solution which offers log management. Although they don't currently have much in the way of alerts, they can notify you via Email or Pagerduty if certain events appear within your log events. They have future plans to also include checking for the lack of events, as well as thresholds, (for example, &amp;nbsp;at least 15 events within the last 5 minutes). &amp;nbsp;Papertrail also has a nice API that you can tie into to make your own custom alert monitoring, just make sure this isn't the ONLY way you get notified of a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Custom Scripts&lt;/h3&gt;
For those things that are custom issues we like to track, we also use our own custom scripts. We verify these scripts are working through other services (such as pingdom), but even if the system itself is working, that doesn't mean there might not be other minute problems. For example, you may want to track and log if it's taking a particularly long amount of time to render your webpage, or if a user receives a 5xx level error for any reason. There's nothing wrong with using your own custom monitoring scripts, just as long as that's not &lt;i&gt;the only method&lt;/i&gt;&amp;nbsp;you use to check your system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;

Determining Risk&lt;/h2&gt;
&lt;div&gt;
Risk Mitigation is one of the key aspects of a disaster recovery plan. Risk can be calculated as a function of how &lt;i&gt;likely&lt;/i&gt;&amp;nbsp;a system is to go down, as well as the &lt;i&gt;impact&lt;/i&gt;&amp;nbsp;that outage would cause you. If a system is very fragile and likely to go down, but that outage wouldn't cause any negative results for a few days, then it's probably not worth investing a lot of time and money into making it more stable. What if you do get hacked? What information will the hacker get for such and such account? If all they get to see is your name, it's probably not very important to spend a lot of time securing that system. If that system also contains phone numbers, social security numbers, or any sort of financial data, then it's more important to make it &lt;i&gt;less likely&lt;/i&gt;&amp;nbsp;that someone can hack in. Make sure you put the proper effort where it's needed. Don't spend 6 months making a secure system for people to see your company logo, or read what the lunch specials for the day are.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;

Have a Plan&lt;/h2&gt;
&lt;div&gt;
Ok, so your system failed and you've been notified. Do you know what to do about it? Who do you contact? What actually failed? What's the procedure for fixing it and who do you have to notify about it?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Monitoring your system is only half of a recovery plan. You also need to have detailed documentation on how to fix problems, and make sure everyone knows or has a way to contact the person who does know. It's also extremely important that &lt;i&gt;if your system is down, you have access to this documentation&lt;/i&gt;. If your system is a wiki, don't keep the only copy of your disaster recovery documentation in your wiki. Plans can vary from system to system, but when an on-call support person is paged in the middle of the night what they really want to know is these few questions:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. Is there really a problem?&lt;/div&gt;
&lt;div&gt;
2. Does this need to be fixed now?&lt;/div&gt;
&lt;div&gt;
3. How can I fix this?&lt;/div&gt;
&lt;div&gt;
4. If I can't fix it, who do I contact to fix it? (escalation)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The third question &lt;b&gt;How can I fix this,&lt;/b&gt;&amp;nbsp;often will include a&amp;nbsp;series&amp;nbsp;of steps of how to identify the problem, and what to do to fix it. It's important to have this decently documented so that you can avoid having to &lt;i&gt;wake up everyone in the office&lt;/i&gt;&amp;nbsp;for something that can be solved by a simple reboot of the servers. You also need to have monitoring in place to make sure that once it's resolved, the on-call can verify it has been fixed.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
The most important thing to remember is that when there is an outage, &lt;i&gt;it doesn't matter who's fault it is&lt;/i&gt;, what matters most is minimizing the impact and downtime of the outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;


Questions you should ask yourself (or your IT staff)&lt;/h2&gt;
&lt;div&gt;
So how do you really know if you're&amp;nbsp;prepared&amp;nbsp;for an outage? Can you (or your IT staff) answer these questions?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. What would you do if your database suddenly died?&lt;/div&gt;
&lt;div&gt;
2. What if your entire datacenter went down (or fell into the ocean)?&lt;/div&gt;
&lt;div&gt;
3. What if your user base suddenly increased by an order of magnitude?&lt;/div&gt;
&lt;div&gt;
4. What would happen if your head of operations or IT were to suddenly quit, or died?&lt;/div&gt;
&lt;div&gt;
5. If your system went down, how would you find out? (if your customers notice before you do, there's a problem).&lt;br /&gt;
6. Who would respond right now if your entire system was down?&lt;br /&gt;
7. What if an employee went rogue, how much damage could they do and how quickly could you recover?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remember, the most important thing isn't to prevent failures, but to &lt;i&gt;handle&lt;/i&gt;&amp;nbsp;them, and be ready for &lt;i&gt;when&lt;/i&gt;&amp;nbsp;they happen.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-1913780118111990938?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ao8byPfgq--owrcKQk9WWnE-Ckk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ao8byPfgq--owrcKQk9WWnE-Ckk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ao8byPfgq--owrcKQk9WWnE-Ckk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ao8byPfgq--owrcKQk9WWnE-Ckk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/17QWGbTQZWw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/1913780118111990938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=1913780118111990938" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1913780118111990938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1913780118111990938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/17QWGbTQZWw/design-for-failure.html" title="Design for Failure" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/12/design-for-failure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMEQ3ozcSp7ImA9WhRXEUk.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7514124259220602386</id><published>2011-12-17T09:20:00.000-08:00</published><updated>2011-12-17T09:20:02.489-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-17T09:20:02.489-08:00</app:edited><title>Bridging the communication barrier: describing what you do to your boss.</title><content type="html">&lt;p&gt;
I don't blog a lot, but when I do blog it's always about something that I have real-world knowledge of, and I'm very passionate about. This is one thing that I'm very passionate about. It's not very useful to know something if you can't describe it to others. If you really want to get ahead in life, you're going to have to explain things to people that have absolutely no clue what you're talking about, and don't have any knowledge of the terminology you use with your colleagues. Bridging this communication barrier can be quite complex, and is something that few people really understand. It's the reasons most companies have several layers of management, simply because an executive top-level person wouldn't ever be able to understand anything a bottom-level engineer is describing. If you're one of those middle management folks, it's probably because you're very good at bridging the communication barrier.
&lt;/p&gt;

&lt;p&gt;
I recently read a post by &lt;a href="http://www.semicomplete.com/"&gt;Jordan Sissel&lt;/a&gt;, a former classmate of mine at college, where he details how to &lt;a href="http://sysadvent.blogspot.com/2011/12/day-17-speaking-same-language.html"&gt;Speak the same language&lt;/a&gt; with others. While I do and always will have a lot of respect for Jordan, there's one thing that I strongly disagree with on this point. Effective communication isn't always about speaking the same language, it's usually about how to speak to someone who doesn't understand your language. Describing to a business person all the details they need to know to speak your language is usually impossible to do within any reasonable period of time (but don't worry, them teaching you to speak their language would be equally as challenging). So how really do you communicate effectively to people who don't speak your same language?
&lt;/p&gt;


&lt;h2&gt;Find a common language&lt;/h2&gt;

&lt;p&gt;When two or more people meet and try to communicate to each other, the first step is always to find the common language that both people can understand. This is true not only of difference in language of two people that both speak english, but also of people that speak &lt;i&gt;literally different languages&lt;/i&gt;. If you came across someone that spoke German, for example, and you really needed to use the bathroom, how would you go about describing that to them? Obviously you trying to teach them English wouldn't work, and them teaching you German before you pee yourself probably wouldn't work either. What you want to do is find some way to explain to them that you really need to go to the bathroom. You start off saying words like "I need to pee!" and they don't understand, ok, so that's not the common language you both speak. Then you start making hand gestures, maybe even that doesn't work. Finally you start dancing up and down holding your crotch and crossing your legs. They finally catch on and direct you to the bathroom. They don't tell you in German how to get there, they actually show you. Why? Because you've established a common language that you can both speak.&lt;/p&gt;

&lt;p&gt;The same is true with any communication experience. You can speak in multiple different forms of communication, so what you do in any meeting is try to find a common language that you can speak and the intended audience can understand. I'm doing it right now; I'm typing out my thoughts into a written form which, hopefully, you as the reader will understand and be able to use in the future.&lt;/p&gt;

&lt;p&gt;So how, really, do you go about finding a common language? You have to &lt;i&gt;study&lt;/i&gt; your target audience. The first part of being able to communicate to your audience is to &lt;i&gt;listen&lt;/i&gt;. If you're trying to explain something to your boss, find out what he likes. If he's a big baseball fan, and you know about the rules of baseball, you can speak the same language. If he likes to go fishing, learn more about fishing, and you can speak that language. If you're trying to say something to anyone else, the first thing you have to do is &lt;i&gt;listen to what they say&lt;/i&gt; and then you can find a common language. Speaking louder, slower, or faster, doesn't help.&lt;/p&gt;

&lt;h2&gt;Use analogies and examples&lt;/h2&gt;

&lt;p&gt;The very title of this post is an example. No this isn't just how you talk to your boss, but it's something many people have a hard time doing. So what did I do here? I found a common language we can all understand (talking with our boss), and I've given that out as an example&lt;/p&gt;

&lt;p&gt;Analogies, no matter how silly they may seem, are generally very effective if done well. Take, for example, the long criticized analogy &lt;a href="http://en.wikipedia.org/wiki/Series_of_tubes"&gt;The internet is a series of tubes&lt;/a&gt;. Yes, for you the reader this may seem like a horrible analogy, and a great reason why not to use analogies. Ok, so that's how you feel about this analogy, but you weren't the target audience. Take this analogy to your grandparents, or your redneck cousins who don't understand anything about the internet. After they read it, I bet they have a much better understanding of what the internet really is.&lt;/p&gt;

&lt;p&gt;You have to target your analogies at your audience, once you've found the common ground, speak it. Study it, and make sure you have it right.&lt;/p&gt;

&lt;p&gt;The best example of an analogy in recent times that I've heard was actually (and I'm hesitant to say this) while watching the coverage of &lt;a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act"&gt;SOPA&lt;/a&gt;. I apologize in advance for not having the exact quote, or even the name of the senator who made it (and if you do please let me know so I can quote/add it here). For those of you who don't know, SOPA is the government act that is their attempt to prevent online piracy of copywritten works that are being distributed through the internet, by using &lt;a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act#DNS_blocking_and_filtering"&gt;DNS Blocking and filtering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The basic gist of it is this:&lt;/p&gt;
&lt;p&gt;When we identify a crack house, we send in a raid and shut it down, taking those responsible into custody and making sure that they are punished for selling crack. What this bill is essentially suggesting is that instead of arresting those responsible, we change the street signs and take their address out of the GPS and map systems. The house will still be there, and anyone who's smart enough to figure out how to get there will still have their crack. The problem isn't actually solved. Worse yet, those normal law-abiding citizens now have to deal with the fact that their street signs were all changed, and the GPS systems were all completely messed with. This is essentially what we're doing with DNS in SOPA.&lt;/p&gt;

&lt;p&gt;It really is a great analogy if you think about it. By using DNS filters and blocking, we're not removing the site, it still has a public IP address, and it now has impact on the law-abiding normal citizen more so then those who would be seeking out to reach that site. They went on to talk about how &lt;i&gt;even a ten year old&lt;/i&gt; could follow instructions on how to change their DNS servers to use something housed outside of the US that has the right information. Back to the analogy, anyone could still get a copy of a map that has that crack house's address on it, and go off of that instead of anything official.&lt;/p&gt;


&lt;h2&gt;Listen to and make sure your audience understood&lt;/h2&gt;

&lt;p&gt;The final piece of any communication session is to listen again to your audience and make sure they understood what you said. If you gave an analogy or example that they didn't understand, you may need to explain things a little more clearly, give more details, or try a different analogy all together. While switching analogies can be quite confusing, if you start out talking about baseball and they don't understand anything about baseball, it's time to switch and try something else. It's important at this stage to wrap up your point and make sure they come away with a better understanding of what you were trying to explain. Don't think of this as a quiz time, but it's good to allow them to follow up with questions. Be open minded and answer their questions with the same common language you've been using. Don't assume that if they don't understand it's their fault, in fact if they don't understand it's because &lt;b&gt;you&lt;/b&gt; didn't communicate effectively.&lt;/p&gt;

&lt;p&gt;There are always going to be some times where your target and you simply can't find any common language to speak, and even after you think they understood, they just look at you completely puzzled. If this happens, it's time to find someone who can bridge the gap. If you have trouble explaining something to your grandparents, try first explaining it to your parents, then perhaps &lt;i&gt;they&lt;/i&gt; can explain it to your grandparents. You don't always have the ability to speak to everyone, in fact those that do usually end up in public jobs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7514124259220602386?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qmzeuqYc-XRghLBglq_URW1XhZM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qmzeuqYc-XRghLBglq_URW1XhZM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qmzeuqYc-XRghLBglq_URW1XhZM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qmzeuqYc-XRghLBglq_URW1XhZM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/1sBwrnLzFQA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7514124259220602386/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7514124259220602386" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7514124259220602386?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7514124259220602386?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/1sBwrnLzFQA/bridging-communication-barrier.html" title="Bridging the communication barrier: describing what you do to your boss." /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/12/bridging-communication-barrier.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUERX4zfCp7ImA9WhdaGE0.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-1324820599523691071</id><published>2011-10-28T06:06:00.000-07:00</published><updated>2011-10-28T06:06:44.084-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T06:06:44.084-07:00</app:edited><title>Interviewing for a Job</title><content type="html">I've done a fair amount of interviewing from the hiring side, and what I've noticed is that most people simply don't understand the concept of how to really respond to questions in an interview. Now, to be completely upfront, all of my interviews are over the phone, and thus rely almost entirely on the verbal communication that goes on within the interview. I also hate "formal" interviews, and so none of my interviews are very formal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Understand why you're being interviewed&lt;/h1&gt;
You're being interviewed because the company you applied to wants to know if you're the "right fit" for the job. Most likely you put something on your resume that triggered a keyword or just generally said something in an email, cover-letter, or resume that triggered word recognition (not always automatic, this is also how most hiring managers work). This doesn't mean that we've actually &lt;i&gt;read&lt;/i&gt; your resume, it probably just means we've skimmed it.
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Do your research before the interview&lt;/h1&gt;
Make sure you research the company and workspace that the company you're working for is in. Googling for the company's name should turn something up, and you should be able to find a bit of information about what exactly the company does &lt;i&gt;before&lt;/i&gt; the interview. This is important for both you and the company, to make sure that you're not wasting each other's time. It's ok to ask questions like "so what exactly do you do?", but it's generally a good idea to have researched the general field that the company is in. If you're applying to a company like mine, you don't want to go in thinking that you'll end up in an office writing games for the 360.
&lt;br/&gt;
If I'm really interested in hiring someone, before the interview, I'll check to see if they have a twitter account, facebook, G+, or just generally type their name into google and see what comes up. It's a good idea to do this about your interviewer too. For example, if I was interviewing you, you could have come up with this guide and then know exactly how to nail the interview with me!
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Communication is Key&lt;/h1&gt;
If you want to move on from the first interview (which, for me, usually means we bring you on part-time on a trial basis), you need to be able to communicate well in the interview. It's really a test of how well you interact with the interviewer more then it is about the knowledge you have. Try not to ramble on too much, and whatever you do &lt;b&gt;don't ever make up an answer&lt;/b&gt;. It's perfectly acceptable to say &lt;i&gt;"I'm sorry, but I really don't know the answer to that"&lt;/i&gt;. If you lie about something you know or are comfortable doing, it will only turn around to bite you later on in the job. Expectations are set on the day you interview, so don't make them something you won't be able to live up to if you do get the job.
&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Be excited, but not cocky&lt;/h1&gt;
It's important to show enthusiasm for the work you're about to perform. Nobody wants someone that's just &lt;i&gt;willing to be a drone&lt;/i&gt;, they want someone who's actually going to work because it's something they like to do. If you answer with just one-word answers, you're probably not going to get the job. I personally look for people that &lt;i&gt;can&lt;/i&gt; ramble on about what they've done and how much they like doing it, but that doesn't mean you should ramble on too long. &lt;b&gt;It's a good thing&lt;/b&gt; to have a job you absolutely love doing.
&lt;br/&gt;
However, this doesn't mean you should be cocky, or simply tout how good you are because of what you've done. Yes, be proud, but don't think you're better then the interviewer. You don't want to be stuck-up, or sound like you're belittling the interviewer because he/she doesn't know something that you do. &lt;b&gt;Never say "Well, it was on my resume"&lt;/b&gt;, don't assume that your time is worth more, or even as much as, the interviewers time. It's generally a good idea to end the interview by saying "thanks for taking the time to interview me". 
&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Don't be discouraged if you don't get the job&lt;/h1&gt;
Just because the interviewer doesn't give you the job doesn't mean you're not &lt;i&gt;capable&lt;/i&gt; of doing the job, it just means you're &lt;i&gt;not the right fit&lt;/i&gt; for the position, or perhaps just the company. When I interview people, I'm not just looking for someone who has the knowledge or ability to do the work, I'm looking for someone who will be able to fit within the work environment we have. We're a completely virtual company, and it takes a special breed of person to be able to handle that. &lt;b&gt;Don't take it personally&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-1324820599523691071?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4WHuFSOhbwQDkOuHW9Eq9dsEay4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4WHuFSOhbwQDkOuHW9Eq9dsEay4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4WHuFSOhbwQDkOuHW9Eq9dsEay4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4WHuFSOhbwQDkOuHW9Eq9dsEay4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/P3tfZZQt1U8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/1324820599523691071/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=1324820599523691071" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1324820599523691071?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1324820599523691071?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/P3tfZZQt1U8/interviewing-for-job.html" title="Interviewing for a Job" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/10/interviewing-for-job.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAR3o6eCp7ImA9WhdUGE8.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7563223630453926016</id><published>2011-10-05T06:40:00.000-07:00</published><updated>2011-10-05T06:40:46.410-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-05T06:40:46.410-07:00</app:edited><title>Don't blame the economy for being unemployed</title><content type="html">Every time we turn on the news people are complaining about the "horrible unemployment rates" and how "jobs are incredibly hard to find". Yet, for some reason, whenever anyone I know goes looking for employee's, they can't find any that aren't happily employed elsewhere.&lt;br /&gt;
&lt;br /&gt;
The problem isn't that there are less jobs, the problem is that the US is becoming &lt;i&gt;smarter&lt;/i&gt;&amp;nbsp;and doing things more efficiently, thus we require the &lt;i&gt;right type of people&lt;/i&gt;, those that know certain things, not just jobs that any electronic monkey can do.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/111045584683584396225/posts/EoHz9ayqgoh"&gt;Eric Hammond's Post&lt;/a&gt;&amp;nbsp;on how companies have to work harder to get quality employee's just shows that it's even the big boys out in LA that are having problems. &lt;b&gt;Don't blame the economy if you can't find a job&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Even those that don't have the skill set for the kind of work that Eric and I are looking for still have options. Companies are always hiring, even if your current company goes away, there's always another place that will hire people doing &lt;i&gt;something&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Here's my three simple rules for getting, and keeping, a job.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;


Rule #1 Don't be picky&lt;/h2&gt;
I'm not saying that you will &lt;i&gt;always&lt;/i&gt;&amp;nbsp; be able to find a job immediately, in fact it often takes some work, but there are always companies looking for work. Just because you were doing plumbing at your previous job, doesn't mean that if you get laid off you can't go work at&amp;nbsp;&lt;a href="http://walmartstores.com/careers/"&gt;WalMart&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you're in need of a job to get by, don't complain that there's no jobs for &lt;i&gt;you&lt;/i&gt;. There are a multitude of jobs out there, maybe not in your area, but that doesn't mean you can't &lt;i&gt;move&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
The worst thing to do in an interview is turn down a job based on the amount of money it's going to provide for you. Even if you're moving down to $10/hour from $20/hour, at least it's a job. Take it and move up in the company, don't set your initial expectations so incredibly high that you don't find &lt;i&gt;anything. &lt;/i&gt;Remember, even $10/hour is better then $0/hour. Unless you have several job's lined up already, you can't afford to turn down any offer, no matter how bad it may seem.&lt;br /&gt;
&lt;br /&gt;
Don't be afraid to go back to an old employer. Just because you left them doesn't mean that they won't take you back. Again, don't expect to just jump right in where you left off, but any job is better then no job.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;


Rule #2 Make a real Resume&lt;/h2&gt;
&lt;div&gt;
I don't know when it became no longer standard practice to include a decent 1 page resume with &lt;i&gt;specific details about the job you're applying for&lt;/i&gt;, but as someone who's hired several employees and waded through hundreds of resumes, I'll tell you that if your resume isn't focused and short, you're not going to get a job. The Resume is a 1 page representation of who you are and what you can bring to the company. If you're applying for a job doing software programming and you have 3 pages of job experience, mostly detailing your work in retail, then you're going right in the trash.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The most important part of the Resume is to make it &lt;i&gt;focused&lt;/i&gt;&amp;nbsp;on the kind of job you're applying for. The best resume's I've seen were from people that often kept several copies of their resume, each tailored for specific job positions. For example, you may have one resume for software programming, and another for project management, and maybe even another for sales (remember rule #1).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;


Rule #3 Be Honest&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
The worst thing that you can do in any job interview, or any part of the job hiring process, is to lie. If a prospective employer asks you about how you would go about solving a particular issue, don't bumble&amp;nbsp;around&amp;nbsp;and make something up, be honest and tell them you don't know. Eventually, these things will catch up to you. If you put on your resume that you speak Spanish but really all you know is how to say "I need to use the bathroom", you're going to get fired when they put you in a meeting with all spanish speaking people and you can't understand anything they're saying.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Don't make things up, if you honestly have no idea or have trouble understanding what the interviewer is asking for, just ask for clarification and explain the situation. Don't be afraid to say things like "I'd have to do more research on that topic". The only time in your life that you need to memorize answers to complex questions is when you're in school, in the real world we have &lt;a href="http://google.com/"&gt;Google&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Be upfront about any issues you may have. I was interviewing for a company about a year ago that didn't want to hire someone who was looking for anything more then a 6 month "job". Since I already had a decent job that I was working at, I could afford to break rule #1, so I told them right upfront that I was looking for a&amp;nbsp;&lt;i&gt;career, not just a job&lt;/i&gt;. This may have meant that I lost the higher paying job, but by being upfront about it, I avoided the long-term issue of being out of a job in 6 months.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7563223630453926016?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T3uRFt3dzvBCiaewnHW1m2uYSBc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T3uRFt3dzvBCiaewnHW1m2uYSBc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T3uRFt3dzvBCiaewnHW1m2uYSBc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T3uRFt3dzvBCiaewnHW1m2uYSBc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/Xh2sqqi5DVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7563223630453926016/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7563223630453926016" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7563223630453926016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7563223630453926016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/Xh2sqqi5DVk/dont-blame-economy-for-being-unemployed.html" title="Don't blame the economy for being unemployed" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/10/dont-blame-economy-for-being-unemployed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQHY4eyp7ImA9WhdXGUo.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-2665463527160804686</id><published>2011-09-02T07:34:00.000-07:00</published><updated>2011-09-02T07:34:41.833-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-02T07:34:41.833-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iTunes Match" /><category scheme="http://www.blogger.com/atom/ns#" term="icloud" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>iTunes Match vs Spotify</title><content type="html">As you may remember from this year's WWDC conference, Apple is releasing&amp;nbsp;&lt;a href="http://www.apple.com/icloud/features/"&gt;iTunes Match&lt;/a&gt;, part of iCloud which is designed to look up the music you have in your iTunes Library, and then allow you to listen to that music from any of your apple devices, including iPhone, iPod touch, and iPads.&amp;nbsp;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;While at first this seems like a really cool idea, what you don't realize is that there's already a much better service out there called &lt;a href="http://www.spotify.com/"&gt;Spotify&lt;/a&gt;, which costs more (roughly $60/year vs $25/year), but allows you to listen to &lt;i&gt;any song from any of your devices&lt;/i&gt;. This includes iOS devices as well as PCs and MACs.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Spotify does also offer a &lt;i&gt;free&lt;/i&gt;&amp;nbsp;version of their service which simply adds in audio advertisements (similar to Pandora), but the free version doesn't allow you to stream to your mobile devices, or download songs for playing offline later. Still, if you're looking for that one-off song that you just can't get out of your head, or looking for similar songs that you don't already own, Spotify fits the ticket.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So, if Apple is to compete, they'd need to lift this restriction and allow you to listen to &lt;i&gt;any song&lt;/i&gt;&amp;nbsp;even if you don't own a copy of it, from any device, and allow you to listen to them offline as well. If they added that (and kept the lower price), surely it would easily beat off Spotify. The iTunes interface is way more refined then Spotify's, but you can't beat being able to listen to any song ever produced (and no, I have not found a single song that isn't on their system).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Sorry Apple, looks like you fell just short of the mark this time.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-2665463527160804686?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7hpd7q99waHqDjVwsBRFGyecK9w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7hpd7q99waHqDjVwsBRFGyecK9w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7hpd7q99waHqDjVwsBRFGyecK9w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7hpd7q99waHqDjVwsBRFGyecK9w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/DRn4RhXJ7K8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/2665463527160804686/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=2665463527160804686" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2665463527160804686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2665463527160804686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/DRn4RhXJ7K8/itunes-match-vs-spotify.html" title="iTunes Match vs Spotify" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/09/itunes-match-vs-spotify.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYBSXg6fyp7ImA9WhdRGEQ.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-2644185668250074552</id><published>2011-08-09T05:32:00.000-07:00</published><updated>2011-08-09T05:32:38.617-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-09T05:32:38.617-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ec2 outage" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Another Hiccup in the AWS Data Centers</title><content type="html">Most of you probably remember reading about&amp;nbsp;&lt;a href="http://blog.coredumped.org/2011/04/great-ec2-outage-of-2011.html"&gt;The Great EC2 Outage of 2011&lt;/a&gt;, so when&lt;a href="https://forums.aws.amazon.com/thread.jspa?threadID=73428&amp;amp;amp;tstart=0"&gt; it happened again&lt;/a&gt;, many people begain to question if Amazon is the best way to host our services.&lt;br /&gt;
&lt;br /&gt;
Let me first state that &lt;a href="http://newstex.com/"&gt;Newstex&lt;/a&gt; (the company where I manage the infrastructure hosted entirely within AWS), was almost completely unaffected by this outage. Yes, we had all of our servers in US-East become disconnected from the rest of the internet, but no, this did not negatively impact our core&amp;nbsp;business. Why? because we use &lt;b&gt;Multi-Region Deployment&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Multi-Region Deployment is mostly useful when you're serving up services to people in multiple locations. It helps to create a more direct line to your customers by centering your servers closer to them. For Newstex's Core business, we place servers in both US-East and US-West. This means that while servers in US-East were down completely, the servers in US-West continued to function at full capacity, allowing us to pull in and deliver our content without any interruptions.&lt;br /&gt;
&lt;br /&gt;
Now to say that we were &lt;i&gt;completely&lt;/i&gt;&amp;nbsp;unaffected would be a lie. We did temporarily lose our management console during the brief 40 minute outage, but this was a risk that we agreed wasn't worth spending an extra $200/month to cover. Statistically speaking, since AWS has only been down a total of about 2 hours this year, that would mean that it would have cost us roughly $1,600 for an additional 2 hours of uptime. That's just not economical for something that's only used to modify our configurations. What's important is that our &lt;b&gt;core business&lt;/b&gt;&amp;nbsp;was secured and protected against a region-wide outage such as this.&lt;br /&gt;
&lt;br /&gt;
For more information on how to build your own Multi-Region Deployment, see my book:&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=blogcoredumpe-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321720202&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-2644185668250074552?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NemJ0Peifagep5NQ-R4RWURm5XY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NemJ0Peifagep5NQ-R4RWURm5XY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NemJ0Peifagep5NQ-R4RWURm5XY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NemJ0Peifagep5NQ-R4RWURm5XY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/CqlO9rwLFCA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/2644185668250074552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=2644185668250074552" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2644185668250074552?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2644185668250074552?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/CqlO9rwLFCA/another-hiccup-in-aws-data-centers.html" title="Another Hiccup in the AWS Data Centers" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/08/another-hiccup-in-aws-data-centers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QERXc_fCp7ImA9WhZXFk0.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7748959527530814521</id><published>2011-05-05T06:15:00.000-07:00</published><updated>2011-05-05T06:15:04.944-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-05T06:15:04.944-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="what is a cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="define cloud" /><title>This is not a cloud</title><content type="html">After seeing my eleventy-billionth "cloud" product, I've decided to make a post about what &lt;b&gt;is not&lt;/b&gt; a cloud product.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear:both;"&gt;This is not a cloud: &lt;br/&gt;&lt;img src="http://lh4.googleusercontent.com/public/DKmqUewb0uQK10cMezkCt7WYC4M5IshL_hO0KSJ7r4PhrBypegA2GpgInzSD3Sq2zFqN2Gmw5NfhEkmlGL3OXcYAF1HC01zGK7Bc-XoiZMI5yaAMTGgkJ9P73_iLokIQ"/&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear:both;"&gt;This is not a cloud: &lt;br/&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-ROdFPPP22sc/TcKf3oX21TI/AAAAAAAAAIQ/JD1Oe4GVwEs/s1600/server_rack.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" width="272" src="http://1.bp.blogspot.com/-ROdFPPP22sc/TcKf3oX21TI/AAAAAAAAAIQ/JD1Oe4GVwEs/s320/server_rack.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear:both;"&gt;This is not a cloud:&lt;br/&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-Do7DxYvT0vY/TcKgAP_8_uI/AAAAAAAAAIY/qRi702l-OlQ/s1600/36-server_racks.jpg" imageanchor="1"&gt;&lt;img border="0" height="240" width="320" src="http://1.bp.blogspot.com/-Do7DxYvT0vY/TcKgAP_8_uI/AAAAAAAAAIY/qRi702l-OlQ/s320/36-server_racks.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear:both;"&gt;And, although very cool, this is still not a cloud: &lt;br/&gt;&lt;a href="http://4.bp.blogspot.com/-7YrjcWHMbS0/TcKgJdTGUdI/AAAAAAAAAIg/toxlWU9_q9s/s1600/blackbox_550x367.jpg" imageanchor="1"&gt;&lt;img border="0" height="214" width="320" src="http://4.bp.blogspot.com/-7YrjcWHMbS0/TcKgJdTGUdI/AAAAAAAAAIg/toxlWU9_q9s/s320/blackbox_550x367.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear:both;"&gt;This &lt;b&gt;is&lt;/b&gt; a cloud: &lt;br/&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-n3Gwjdtt01Q/TcKghAc6UJI/AAAAAAAAAIo/pNCXlpejGhA/s1600/cloud-5.jpg" imageanchor="1"&gt;&lt;img border="0" height="240" width="320" src="http://3.bp.blogspot.com/-n3Gwjdtt01Q/TcKghAc6UJI/AAAAAAAAAIo/pNCXlpejGhA/s320/cloud-5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br class="clear: both"/&gt;&lt;br /&gt;
&lt;p&gt;... although probably not what you're referring to when you think of clouds these days.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Still, lets take a look at the cloud, the real cloud, and try to describe it.&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;It's big&lt;/h2&gt;Clouds are big, and generally not shaped. When you're within a cloud (fog when it's at ground level), you can't really see the boundaries.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;It just floats there&lt;/h2&gt;It's not tied down to anything, it's just up and floating around in the sky. &lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;It's elastic&lt;/h2&gt;It's not constrained to a certain size, and often they grow and shrink seamlessly while you're not even looking. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;So what is a Cloud in terms of computing?&lt;/h1&gt;But really, what does all this crazy talk have to do with cloud computing?&lt;br /&gt;
&lt;br /&gt;
Quite simply, to be a cloud service, it has to be big, floating around, and elastic. To put it directly, &lt;br /&gt;
&lt;blockquote&gt;The internet is not just a big truck you can dump onto&lt;/blockquote&gt;... but a cloud is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7748959527530814521?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JZfUwFEzKxA-pgQIk6HgntSzleA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JZfUwFEzKxA-pgQIk6HgntSzleA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JZfUwFEzKxA-pgQIk6HgntSzleA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JZfUwFEzKxA-pgQIk6HgntSzleA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/7KauolnJBfE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7748959527530814521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7748959527530814521" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7748959527530814521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7748959527530814521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/7KauolnJBfE/this-is-not-cloud.html" title="This is not a cloud" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ROdFPPP22sc/TcKf3oX21TI/AAAAAAAAAIQ/JD1Oe4GVwEs/s72-c/server_rack.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/05/this-is-not-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4ER3oycCp7ImA9WhZXEEU.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-3275732206479073328</id><published>2011-04-29T06:30:00.000-07:00</published><updated>2011-04-29T06:31:46.498-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-29T06:31:46.498-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ec2 outage" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud architectures" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="ebs outage" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Post Mortem of EBS Outage</title><content type="html">Now that Amazon has fully recovered from the &lt;a href="http://blog.coredumped.org/2011/04/great-ec2-outage-of-2011.html"&gt;EBS outage last week&lt;/a&gt;, they've reased an &lt;a href="http://aws.amazon.com/message/65648/"&gt;official explanation of what happened, and why&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Within this explanation is burred a reference that this really &lt;b&gt;did not&lt;/b&gt; drastically impact more then one Availability Zone. Due to this they're going to be offering a &lt;a href="http://aws.amazon.com/architecture/"&gt;series of webinars&lt;/a&gt; to help developers better understand how to properly &lt;a target="_blank"  href="http://www.amazon.com/Building-Applications-Cloud-Concepts-Patterns/dp/0321720202?ie=UTF8&amp;tag=blogcoredumpe-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;architect their applications for cloud computing&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=blogcoredumpe-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=0321720202" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important; padding: 0px !important" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;But what really happened?&lt;/h2&gt;Most users of Amazon's Cloud Computing really want to know what happened, or more specifically we want assurances that it wont happen again. In reality, what happened can be broke down into the following failures which compounded into a complete and total collapse of EBS's services across the entire us-east-1 region:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;A bad network upgrade caused several EBS volumes to think they were alone, and &lt;b&gt;panic&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;These panic'd EBS nodes caused lots of trouble in the &lt;b&gt;regional&lt;/b&gt; EBS control system&lt;/li&gt;
&lt;li&gt;Due to this failure, Amazon had to disable &lt;b&gt;the entire EBS API&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Users trying to launch new EBS volumes to replace the ones that had failed could not, because the EBS API had been disabled for the duration of the fix&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h2&gt;How do I know it wont happen again?&lt;/h2&gt;Amazon is attacking the problem on several fronts, but the biggest bonus that I saw in their entire post is a true admission that &lt;b&gt;mistakes will happen&lt;/b&gt;. Although they're going to try to not make mistakes and are putting in lots of automation and controls to hopefully prevent the original network problem that caused the outage, they're also attacking each step along the way which caused the outage.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Controls will be put in place to prevent bad network upgrades in the future&lt;/li&gt;
&lt;li&gt;EBS clusters will be modified to back-off gracefully instead of wildly trying to recover from a failure causing the entire system to break&lt;/li&gt;
&lt;li&gt;The EBS Control system will be modified to be more zone-based, so that failures in one zone wont cross over to others&lt;/li&gt;
&lt;li&gt;Amazon is making more services (such as VPC) available in all availability zones&lt;/li&gt;
&lt;li&gt;Amazon is offering up a &lt;a href="http://aws.amazon.com/architecture/"&gt;series of webinars&lt;/a&gt; to help developers architect their systems more effectively&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h2&gt;But why should I still trust Amazon?&lt;/h2&gt;The reality of this event is that yes, Amazon did make a mistake, but all those effected by this mistake, even some that didn't get effected, will be getting a credit equal to &lt;b&gt;10 days worth of EC2 and EBS usage&lt;/b&gt; on their account. Although the monetary compensation isn't the big part of this, and is very little comfort, what &lt;b&gt;is&lt;/b&gt; comforting is that Amazon is really announcing that they screwed up, and they quickly updated everyone to acknowledge there was a problem.&lt;br /&gt;
&lt;br /&gt;
When my Cable goes out (which happens almost every month), I get no notification other then from my own systems. Whenever I call my cable company, all I get told is if they know there's a problem, never any compensation in return, and never even an ETA or apology. The same is true with most hosting providers. What's even more comforting is that really only those who limited themselves to a single availability zone were effected. Although you couldn't quickly launch in another AZ to solve your problems, you &lt;b&gt;could&lt;/b&gt; launch within another Region, and more importantly if you had already had instances in other zones, you were most likely still operational.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;What can we learn from this?&lt;/h2&gt;The biggest thing to learn from this is that nobody, not even Amazon, is infallible. That being said, in Amazon's case they &lt;b&gt;always&lt;/b&gt; give you the option to recover from a failure quicker then any other solution. For example, if I had a single server that was broken in a traditional hosting environment, I couldn't quickly launch a clone in another datacenter to serve out of while that server was repaired. With Amazon, it's just a matter of a few API calls.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cloud Computing is not dead&lt;/b&gt;, in fact this is a shining moment for it. It shows that you'll get exactly the stability that you plan for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-3275732206479073328?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3V-ZyNL4L11-BQojzmk-3b3_zZc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3V-ZyNL4L11-BQojzmk-3b3_zZc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3V-ZyNL4L11-BQojzmk-3b3_zZc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3V-ZyNL4L11-BQojzmk-3b3_zZc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/uhFPMe8HPFw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/3275732206479073328/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=3275732206479073328" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/3275732206479073328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/3275732206479073328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/uhFPMe8HPFw/post-mortem-of-ebs-outage.html" title="Post Mortem of EBS Outage" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/04/post-mortem-of-ebs-outage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMSXc_eyp7ImA9WhZXEE0.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-160253595305986766</id><published>2011-04-28T09:01:00.000-07:00</published><updated>2011-04-28T09:01:28.943-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-28T09:01:28.943-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="us-west" /><category scheme="http://www.blogger.com/atom/ns#" term="migrating images" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="us-east" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Troubles in US-East, migrating to US-West</title><content type="html">I've been having increasing amounts of problems with my servers in the US-East-1 of Amazon Web Services. Fearful that this may be some fallout or aftershock of the &lt;a href="http://blog.coredumped.org/2011/04/great-ec2-outage-of-2011.html"&gt;Great EC2 Outage of 2011&lt;/a&gt;, I quickly sprung into action, migrating my servers over to US-West-1 (located in California). &lt;br /&gt;
&lt;br /&gt;
It's important to note, however, that this had &lt;i&gt;almost no impact&lt;/i&gt; on any of my production systems, as I already base my core services in two regions. These services continued to operate taking the full load of the system while us-east was having problems. &lt;br /&gt;
&lt;br /&gt;
However, I took this as an opportunity to review my disaster recovery plan, and build up a new image that automatically updates from bitbucket repositories using an SSH key on reboot. &lt;br /&gt;
&lt;br /&gt;
I launched my old instance, updated it quickly, and then used the following commands to bundle it from within the instance (as root):&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;# ec2-bundle-vol -c my_cert_file.pem -k my_key_file.pem -u MY_EC2_OWNER_ID -p my-ami-prefix -s 102400 -d /mnt
&lt;/pre&gt;&lt;br /&gt;
You can grab your EC2_OWNER_ID by using &lt;a href="http://aws.amazon.com/developertools/609"&gt;ElasticFox&lt;/a&gt;, double click on any instance you own, and copy the value for "Owner ID" which should be a number. &lt;br /&gt;
&lt;br /&gt;
The next step is to upload this bundle to EC2:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;ec2-upload-bundle -m /mnt/my-ami-prefix.manifest.xml -b my-ami-bucket -a MYACCESSKEYID -s MYSECRETACCESSKEY
&lt;/pre&gt;&lt;br /&gt;
Note that your bucket must be in the same region that you're bundling from. This means that if you want to actually migrate that manifest to another region, you have to use the &lt;code&gt;ec2-migrate-manifest&lt;/code&gt; tool:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;ec2-migrate-manifest -m /mnt/my-ami-prefix.manifest.xml \
   -c my_cert_file.pem \
   -k my_key_file.pem \
   -a MYACCESSKEYID \
   -s MYSECRETACCESSKEY \
   --region=us-west-1
&lt;/pre&gt;&lt;br /&gt;
And then you can re-upload it to a us-west-1 bucket using the &lt;code&gt;ec2-upload-bundle&lt;/code&gt; command above. When you do this, you will be asked to make sure you want to upload to the other region, since it's not in the current region. Just say "y" for this since you've already migrated it using the &lt;code&gt;ec2-migrate-manifest&lt;/code&gt; tool. &lt;b&gt;This will take significantly longer since you're submitting cross-region&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lastly, you'll need to register this image with EC2 (or one copy in each region if you uploaded it to each region). I like to do this using boto:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&gt;&gt;&gt; import boto.ec2
&gt;&gt;&gt; conn = boto.ec2.connect_to_region("us-west-1")
&gt;&gt;&gt; conn.register_image(name="my-ami-name", image_location="my-ami-bucket/my-ami-name.manifest.xml")
u'ami-XXXXXX'
&lt;/pre&gt;&lt;br /&gt;
Then you're good to go, you'll get the AMI ID back that you can use to launch new instances in us-west.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-160253595305986766?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8_EYtR6yV7fZgUigUtTo_h40VR8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8_EYtR6yV7fZgUigUtTo_h40VR8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8_EYtR6yV7fZgUigUtTo_h40VR8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8_EYtR6yV7fZgUigUtTo_h40VR8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/FtqwuPnJp2E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/160253595305986766/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=160253595305986766" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/160253595305986766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/160253595305986766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/FtqwuPnJp2E/troubles-in-us-east-migrating-to-us.html" title="Troubles in US-East, migrating to US-West" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/04/troubles-in-us-east-migrating-to-us.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCRXo8fSp7ImA9WhZQFEo.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-5078433171378305070</id><published>2011-04-22T06:31:00.000-07:00</published><updated>2011-04-22T06:31:04.475-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T06:31:04.475-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>The Great EC2 Outage of 2011</title><content type="html">&lt;p&gt;There's been a lof of posts recently about the &lt;a href="http://status.aws.amazon.com/"&gt;Massive Outage on EC2&lt;/a&gt; that's now spanning two days of Amazon acknowledging that they have an all-out failure. Guess what folks, it's not &lt;i&gt;all&lt;/i&gt; of EC2 that's down, it's a small part of EC2 called Elastic Block Storage (EBS). Unfortunately, this system was developed because most people can't live by the &lt;i&gt;disposable instances&lt;/i&gt; theory, and wanted something more like traditional Virtual Machines (VMs).&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;I've always been a huge fan of using Cloud Computing, specifically Amazon Web Services mostly because it's pretty much the only game in town. But, as I've always said, you have to prepare for something to go wrong. In most cases, this outage is more related to Network Providers then AWS itself, but in this case it was actually an outage caused by some pretty massive failures at the Amazon side.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Amazon splits up their systems into multiple Regions, each Region is then split up into multiple Zones. The major outage effected only one region, and furthermore it's now limited down to just one Zone within that region that's still a problem. Amazon has always had the policy that any single zone within a region may be down without effecting their SLA (they always tell you to use multi-zone deployments), but in this case they've actively marked themselves as down. What this means is that this outage &lt;b&gt;will&lt;/b&gt; be counted against their SLA. Unlike traditional providers who try to cover things like this up, Amazon has been very transparent and open about all the problems they've been having.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;What I find even more Amazing is that everyone yells that all of Amazon Web Services is down when they have this kind of outage, yet nobody even noticed that Amazon &lt;b&gt;never&lt;/b&gt; went down in Japan even with all the recent Tsunami and Earthquakes, Nuclear Disasters, and even rolling blackouts that have been occurring. They survive acts of God which anyone would forgive for them being down, but there's no forgiveness for one piece of AWS being down for any length of time.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;It's not hard to launch systems in multi-region deployments for redundancy situations. In fact, Amazon has even offered up some suggestions for how to do this, and there's even more help available on the Forums. I find it Amazing that many people seem to simply call it a day when something like this happens, rather then try to figure out how to improve your DR situation. And if you really "dont have the resources to make a DR solution", then you probably don't have enough resources to matter in an outage like this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-5078433171378305070?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PCe8MVerCsf0GL4CRneesmNoxyM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PCe8MVerCsf0GL4CRneesmNoxyM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PCe8MVerCsf0GL4CRneesmNoxyM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PCe8MVerCsf0GL4CRneesmNoxyM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/IrOokG04o6E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/5078433171378305070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=5078433171378305070" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/5078433171378305070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/5078433171378305070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/IrOokG04o6E/great-ec2-outage-of-2011.html" title="The Great EC2 Outage of 2011" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/04/great-ec2-outage-of-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIERn4ycSp7ImA9WhZSFks.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-6787993980798311458</id><published>2011-04-01T07:01:00.000-07:00</published><updated>2011-04-01T07:01:47.099-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-01T07:01:47.099-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="April Fools" /><category scheme="http://www.blogger.com/atom/ns#" term="Jokes" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="April 1" /><category scheme="http://www.blogger.com/atom/ns#" term="$NAME" /><title>Using Amazon $NAME with Boto</title><content type="html">Today, Amazon announced it's new &lt;a href="http://aws.typepad.com/aws/2011/04/announcing-aws-name.html"&gt;$NAME&lt;/a&gt; service available in all five AWS regions. This new service automatically integrates with your existing systems with no&amp;nbsp;configuration&amp;nbsp;required. As requested, we've integrated it into boto. You don't even have to upgrade your installation, it's there for all versions by default.&lt;br /&gt;
&lt;br /&gt;
Usage of $NAME is simple, you first have to sign up for the service, and then you'll notice a new connect_ method is available to you, &lt;code&gt;connect_me()&lt;/code&gt;.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&gt;&gt;&gt; import boto
&gt;&gt;&gt; me = boto.connect_me()
&gt;&gt;&gt; me.hardware()
[u'sofa', u'closet', u'barn', u'dishwasher', u'pillow']
&gt;&gt;&gt; me.services()
[u'ec2', u'sqs', u'input', u'output']
&lt;/pre&gt;&lt;br /&gt;
You can interact with hardware by name:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&gt;&gt;&gt; lr_sofa = me.get_sofa("livingroom")
&gt;&gt;&gt; lr_sofa.is_clean
False
&gt;&gt;&gt; lr_sofa.vacuum()
u'Pending'
&lt;/pre&gt;&lt;br /&gt;
Most actions, like &lt;code&gt;vacuum()&lt;/code&gt; take some time, so we can queue up a bunch of commands at once:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&gt;&gt;&gt; lr_sofa.shampoo()
u'Queued'
&gt;&gt;&gt; lr_sofa.dry()
u'Queued'
&gt;&gt;&gt; lr_sofa.add(me.get_pillow())
u'Queued'
&lt;/pre&gt;&lt;br /&gt;
You'll also note here that we can call &lt;code&gt;get_pillow&lt;/code&gt; with no arguments to just grab a random pillow available, instead of a specific one.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
Next, we can see all the actions that are pending, as well as an estimated time to completion (ttc):&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&gt;&gt;&gt; lr_sofa.get_tasks()
[(u'clean', u'Running'), (u'vacuum', u'Queued'), (u'shampoo', u'Queued'), (u'dry', u'Queued'), (u'add(pl-012573)', 'Queued')]
&gt;&gt;&gt; lr_sofa.get_ttc()
1789
&lt;/pre&gt;&lt;br /&gt;
Note that the ttc is returned as a number of seconds from now, in this case it's just under 30 minutes before we can expect all these tasks to be completed.&lt;br /&gt;
&lt;br /&gt;
That's it! Have fun using the new &lt;a href="http://aws.typepad.com/aws/2011/04/announcing-aws-name.html"&gt;$NAME&lt;/a&gt; service from Amazon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-6787993980798311458?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r6eTn4EqCIEoLwDfGCEZxVaz95M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r6eTn4EqCIEoLwDfGCEZxVaz95M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r6eTn4EqCIEoLwDfGCEZxVaz95M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r6eTn4EqCIEoLwDfGCEZxVaz95M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/0KfepdBYnXI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/6787993980798311458/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=6787993980798311458" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/6787993980798311458?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/6787993980798311458?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/0KfepdBYnXI/using-amazon-name-with-boto.html" title="Using Amazon $NAME with Boto" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/04/using-amazon-name-with-boto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECSHsyeip7ImA9WhZSFEQ.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-1758626199629985278</id><published>2011-03-30T08:07:00.000-07:00</published><updated>2011-03-30T08:07:49.592-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T08:07:49.592-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="boto" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><title>Tagging EC2 Instances using Boto</title><content type="html">For a while, I have been creating command line tools provided right with boto which I used to manage AWS. Recently, others have become interested in these tools as well, and I've seen several other contributors adding to these tools to make them even more useful to others. One recent submission by&amp;nbsp;&lt;a href="https://github.com/aleszoulek"&gt;Ales Zoulek&lt;/a&gt;&amp;nbsp;added some nice features to my&amp;nbsp;&lt;a href="https://github.com/boto/boto/blob/master/bin/list_instances"&gt;list_instances&lt;/a&gt;&amp;nbsp;command, which I use on a regular basis to list out the instances that are currently active for my account in EC2.&lt;br /&gt;
&lt;br /&gt;
Amazon now lets you add Tags to EC2 objects such as Instances and Snapshots. This allows you to actually "Name" your EC2 instance, as well as add some metadata that could be used for AMI initialization, etc. Ales added the ability to list these tags by name within the &lt;code&gt;list_instances&lt;/code&gt; command line application:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;% list_instances -H ID,Zone,Hostname,T:name
ID             Zone           Hostname                                   T:name                        
-------------------------------------------------------------------------------                        
i-xxa          us-east-1a     xxxx.compute-1.amazonaws.com               www  
i-xxb          us-east-1b     xxxx.compute-1.amazonaws.com               ftp
i-xxc          us-east-1c     xxxx.compute-1.amazonaws.com               webdav 
i-xxd          us-east-1d     xxxx.compute-1.amazonaws.com               
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
This is great for when you're launching instances, since you can also specify a tag at launch time:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;% launch_instance -z us-east-1a -t m1.small -a my-ami -T name:mobile boto.cfg
&lt;/pre&gt;&lt;br /&gt;
But what if you've already got a few instances running and you want to label (or re-label) them?&lt;br /&gt;
&lt;br /&gt;
Simple, use the &lt;code&gt;create_tags&lt;/code&gt; functionality of boto.ec2:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import boto
&amp;gt;&amp;gt;&amp;gt; ec2 = boto.connect_ec2()
&amp;gt;&amp;gt;&amp;gt; ec2.create_tags(["i-xxd"], {"name": "mobile"})
True
&lt;/pre&gt;&lt;br /&gt;
You can actually specify any number of tags to be applied to any number of instances (or snapshots) with this command. The first argument is the list of objects (in this case we just had one), and the second is a dictionary of key-value pairs to tag the objects with.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That's it! when you go back in and check your instances, they'll be tagged properly with the new tags you just set:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;% list_instances -H ID,Zone,Hostname,T:name
ID             Zone           Hostname                                   T:name                        
-------------------------------------------------------------------------------                        
i-xxa          us-east-1a     xxxx.compute-1.amazonaws.com               www  
i-xxb          us-east-1b     xxxx.compute-1.amazonaws.com               ftp
i-xxc          us-east-1c     xxxx.compute-1.amazonaws.com               webdav 
i-xxd          us-east-1d     xxxx.compute-1.amazonaws.com               mobile
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-1758626199629985278?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CBk6HKxPldaMi1F2acdi54uWYIE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CBk6HKxPldaMi1F2acdi54uWYIE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CBk6HKxPldaMi1F2acdi54uWYIE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CBk6HKxPldaMi1F2acdi54uWYIE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/VoH8h8De5tA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/1758626199629985278/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=1758626199629985278" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1758626199629985278?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1758626199629985278?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/VoH8h8De5tA/tagging-ec2-instances-using-boto.html" title="Tagging EC2 Instances using Boto" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/03/tagging-ec2-instances-using-boto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFRnwzeyp7ImA9Wx9bE08.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7003824867878622324</id><published>2011-02-21T14:16:00.000-08:00</published><updated>2011-02-21T14:18:37.283-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-21T14:18:37.283-08:00</app:edited><title>It's a dangerous time to read Gizmodo</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-c9nO10cQuKk/TWLjSxm3HtI/AAAAAAAAAIM/5Jj3hEWQhcw/s1600/DontReadGizmodo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-c9nO10cQuKk/TWLjSxm3HtI/AAAAAAAAAIM/5Jj3hEWQhcw/s1600/DontReadGizmodo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Gizmodo Recently decided to&amp;nbsp;&lt;a href="http://gizmodo.com/#!5765916/its-a-dangerous-time-to-buy-apple-products"&gt;publicly attack Apple&lt;/a&gt;&amp;nbsp;about it's recent change in policy, designed to protect mobile users as well as earn a little more cash for Apple.&lt;br /&gt;
&lt;br /&gt;
Gizmodo's been pretty famous recently for changing their entire website to use a new frame-like UI with fixed-width formatting that pretty much makes everyone upset. They've also added massive amounts of advertisements all over the top half of their stories, making all of their readers scroll through a page of ads before they can even read the content.&lt;br /&gt;
&lt;br /&gt;
Now they're attacking Apple publicly, something that's been known not to work, and have very&lt;a href="http://www.engadget.com/2010/04/26/police-investigating-lost-iphone-prototype-raid-gizmodo-editors/"&gt; &lt;span id="goog_1040065612"&gt;&lt;/span&gt;negative repercussions.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And why, after all, do they claim you shouldn't buy Apple products right now? They're coming out with them too quickly. That's right, Apple is releasing too many products now... Wait... how many new Android phones came out this month alone? Even Best Buy knows that their the big culprits, advertising that they will&lt;a href="http://www.bestbuy.com/site/Misc/Buy-Back-Program/pcmcat230000050010.c?id=pcmcat230000050010"&gt; buy back &lt;/a&gt;your old technology (note the primary devices are Androids on their ad), for roughly 50% if it's before 6 months.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seriously Gizmodo, take a clue, Apple isn't going to let you back into the fan club.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7003824867878622324?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VSbE7XPJbzLnSaEujz8SjkwK-90/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VSbE7XPJbzLnSaEujz8SjkwK-90/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VSbE7XPJbzLnSaEujz8SjkwK-90/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VSbE7XPJbzLnSaEujz8SjkwK-90/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/FD_xDBjwono" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7003824867878622324/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7003824867878622324" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7003824867878622324?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7003824867878622324?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/FD_xDBjwono/its-dangerous-time-to-read-gizmodo.html" title="It's a dangerous time to read Gizmodo" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-c9nO10cQuKk/TWLjSxm3HtI/AAAAAAAAAIM/5Jj3hEWQhcw/s72-c/DontReadGizmodo.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/02/its-dangerous-time-to-read-gizmodo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIDRXc7eip7ImA9Wx9UEkU.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7955597101321402623</id><published>2011-02-09T12:32:00.000-08:00</published><updated>2011-02-09T12:32:54.902-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-09T12:32:54.902-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="micro instances" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon linux ami" /><title>Amazon T1 Micro instance With Apache Primer</title><content type="html">Although there's been a lot of buzz about the new Amazon t1.micro instances and the "Free Tier" for amazon, I haven't seen a good tutorial on how to just get started using the Amazon Dashboard console, so I decided to make this quick-and-dirty "get your site up and running in 15 minutes" bit. For those of you who don't know, Amazon launched a micro instance type which is perfect for most "simple" websites that don't generate a ton of traffic. If you don't need MySQL, but do need some server-side processing like PHP, this may be the solution for you.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Signing Up for the Services&lt;/h1&gt;First things first, head on over to &lt;a href="http://aws.amazon.com"&gt;http://aws.amazon.com&lt;/a&gt; and click the big "Sign Up Now" button.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLvD1xxspI/AAAAAAAAAFM/LmVplLds-ug/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B2.45.34%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="83" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLvD1xxspI/AAAAAAAAAFM/LmVplLds-ug/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B2.45.34%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You'll want to sign up for at least EC2 and EBS, but most other services aren't used in this tutorial.&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Sign into the AWS Management Console&lt;/h1&gt;Everything really happens under the AWS management console, so after you've gone through the riffraft of verifying your account, you'll want to click the "sign in to the AWS Management Console" link at the top of the &lt;a href="http://aws.amazon.com"&gt;http://aws.amazon.com&lt;/a&gt; page.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_TSLP0tzTsdk/TVLwUU-5X0I/AAAAAAAAAFU/aaP8aDDW_0g/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B2.48.35%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="39" width="320" src="http://3.bp.blogspot.com/_TSLP0tzTsdk/TVLwUU-5X0I/AAAAAAAAAFU/aaP8aDDW_0g/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B2.48.35%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Once here, you'll want to click on the "EC2" tab:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLwrE40zII/AAAAAAAAAFc/rfzrpRfOUhc/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.29%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="181" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLwrE40zII/AAAAAAAAAFc/rfzrpRfOUhc/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.29%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Launching your instance&lt;/h3&gt;Click on the "Launch Instance" button.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLw0pBHbAI/AAAAAAAAAFk/EXtoV3lBKxc/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.47%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="129" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLw0pBHbAI/AAAAAAAAAFk/EXtoV3lBKxc/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.47%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This wizard will guide you through launching a new instance. The key things to keep in mind here are that you want to make sure you're launching a "t1.micro" instance and using Amazon's 64 bit image.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVLxOUS-hGI/AAAAAAAAAFs/ZEZPWkpgPYw/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.55%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="208" width="320" src="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVLxOUS-hGI/AAAAAAAAAFs/ZEZPWkpgPYw/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.26.55%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
On the next page, make sure you choose the "t1.micro" instance:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLx95wi33I/AAAAAAAAAF0/J0F-fgkZIms/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.27.17%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLx95wi33I/AAAAAAAAAF0/J0F-fgkZIms/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.27.17%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLx-fgT13I/AAAAAAAAAF8/LhJvLh4sPCw/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.27.27%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="122" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLx-fgT13I/AAAAAAAAAF8/LhJvLh4sPCw/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.27.27%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The next page you can ignore, just click continue:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLyKQLobOI/AAAAAAAAAGE/cCVNvM01EiE/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.01%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLyKQLobOI/AAAAAAAAAGE/cCVNvM01EiE/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.01%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The next page just lets you set some labels for your instance, in general you probably just want to at least set the "Name" tag to something in the event you launch multiple instances, you can use this to identify which is which:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLyezfh_vI/AAAAAAAAAGM/XC0h_eRgr4k/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.26%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLyezfh_vI/AAAAAAAAAGM/XC0h_eRgr4k/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.26%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
For example, I chose to name mine "ApacheServer"&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLye6RFC7I/AAAAAAAAAGU/xOyuyYlbCt0/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.40%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="40" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLye6RFC7I/AAAAAAAAAGU/xOyuyYlbCt0/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.40%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Setting up your Keypair&lt;/h3&gt;Click continue to the next page, where you'll be prompted to create a keypair. If you've done this before, you can use an existing key pair, but if you're reading this tutorial I'll assume you haven't set one up yet.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
KeyPairs are how you log into your server, using SSH. It's important to note that you'll need to download this key pair and keep it in a safe place. For security reasons, you can never download your keypair again after this setup procedure.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
Enter a name for your keypair and click the "Create and Download your Key Pair" link:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLzD1KS1dI/AAAAAAAAAGc/ADmugHNpD8I/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.55%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVLzD1KS1dI/AAAAAAAAAGc/ADmugHNpD8I/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.28.55%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Setting up your Security Group&lt;/h3&gt;Click continue and you'll be taken to a page allowing you to set up your security group. It's generally a good idea to set up a new security group for each new "group" of servers you want to create. For example, this is for apache, so lets name it "apache" and fill out a description:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLzyXDnrII/AAAAAAAAAGk/SiFSY_Srxd4/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.29.58%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLzyXDnrII/AAAAAAAAAGk/SiFSY_Srxd4/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.29.58%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now we see by default that SSH is authorized, but we also want users to be able to access this server via HTTP, and probably HTTPS as well. We add those in by choosing the appropriate fields from the row at the bottom:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL0XLu5DuI/AAAAAAAAAGs/yB4jiwjyqM0/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.13%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="25" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL0XLu5DuI/AAAAAAAAAGs/yB4jiwjyqM0/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.13%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;Make sure to click the "Add Rule" button after adding each rule:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL0XVpsMKI/AAAAAAAAAG0/8nT3esFsU_g/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.20%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="47" width="124" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL0XVpsMKI/AAAAAAAAAG0/8nT3esFsU_g/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.20%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Before moving on, make sure you see something like this:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVL0XgDWjmI/AAAAAAAAAG8/6epn-v8oMU0/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.31%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="156" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVL0XgDWjmI/AAAAAAAAAG8/6epn-v8oMU0/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.31%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Review and launch&lt;/h3&gt;Now we look over our information, and make sure everything's ok before launching the instance:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVL1W2uUMlI/AAAAAAAAAHU/20KWeLdvukM/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.43%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="215" width="320" src="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVL1W2uUMlI/AAAAAAAAAHU/20KWeLdvukM/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.30.43%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After launching, you should see a page like this:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL1HSkgIII/AAAAAAAAAHM/xwgoH2wJIvw/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.31.14%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="160" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL1HSkgIII/AAAAAAAAAHM/xwgoH2wJIvw/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.31.14%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Setting up your Elastic IP&lt;/h3&gt;Of course, Amazon is very volitile, so we'll want to make sure we set up an elastic IP for our instance before we change over our DNS name.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
On the left side of your console, you should see a link to "Elastic IPs":&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_TSLP0tzTsdk/TVL1oyz_2YI/AAAAAAAAAHc/WVNmYYHxQPY/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.32.45%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="320" width="95" src="http://3.bp.blogspot.com/_TSLP0tzTsdk/TVL1oyz_2YI/AAAAAAAAAHc/WVNmYYHxQPY/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.32.45%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Once here, you can allocate a new Address:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2C4-aYuI/AAAAAAAAAHk/sNdKqREL1bo/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.32.57%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="86" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2C4-aYuI/AAAAAAAAAHk/sNdKqREL1bo/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.32.57%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This requires you to confirm that you wish to allocate a new EIP. &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVL2i1QIsNI/AAAAAAAAAHs/AqTDdKEdK5k/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.33.18%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="147" width="320" src="http://4.bp.blogspot.com/_TSLP0tzTsdk/TVL2i1QIsNI/AAAAAAAAAHs/AqTDdKEdK5k/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.33.18%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You're currently limited to 5 EIPs per account, and you pay for any EIPs which are &lt;b&gt;not&lt;/b&gt; associated to instances. If your EIP is associated to an instance, you don't pay for it. From here, you'll see your new EIP:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVL2jAJIuvI/AAAAAAAAAH0/F3WvPqT0NP4/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.33.24%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="78" width="320" src="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVL2jAJIuvI/AAAAAAAAAH0/F3WvPqT0NP4/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.33.24%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Right-click on it and choose "Associate Address":&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2jVREQJI/AAAAAAAAAH8/GMqWENUGXNk/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.35.11%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="124" width="245" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2jVREQJI/AAAAAAAAAH8/GMqWENUGXNk/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.35.11%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Choose your instance:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2jRl8XlI/AAAAAAAAAIE/5RcoBpVyyho/s1600/Screen%2Bshot%2B2011-02-09%2Bat%2B1.35.19%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="154" width="320" src="http://2.bp.blogspot.com/_TSLP0tzTsdk/TVL2jRl8XlI/AAAAAAAAAIE/5RcoBpVyyho/s320/Screen%2Bshot%2B2011-02-09%2Bat%2B1.35.19%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Assign your DNS to your EIP&lt;/h3&gt;This all depends on who you bought your domain from. You can simply associate your domain with this IP address and your users will be forwarded along to this server automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Logging in&lt;/h3&gt;Of course, now you'll need to log in and set up your software, specifically Apache. From a terminal or shell, use the keypair you downloaded to SSH into your instance by your elastic IP address:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ ssh -i myKeyPair.pem ec2-user@174.xxx.xxx.xxx
&lt;/pre&gt;&lt;br /&gt;
You'll be greeted with a friendly banner:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;

       __|  __|_  )  Amazon Linux AMI
       _|  (     /     Beta
      ___|\___|___|

See /usr/share/doc/amzn-ami/image-release-notes for latest release notes. :-)

&lt;/pre&gt;&lt;br /&gt;
If instead you see something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
&lt;/pre&gt;&lt;br /&gt;
Then you need to first change your keypair permissions:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ chmod 0600 myKeyPair.pem
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Installing Apache&lt;/h3&gt;The instance you've just logged into is based on Redhat, so you've got the Yum package manager. Install apache using the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ yum install httpd
&lt;/pre&gt;Confirm all the prompts with a "y", and continue on to setting up your apache configuration&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Configuring Apache with WebDav&lt;/h3&gt;The easiest thing to do next is to configure your Apache server to allow you to connect via webdav. Do so by first creating an .htpasswd file for your user:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;sudo htdigest -c /var/www/.htpasswd webdav myAwesomeUserName
&lt;/pre&gt;&lt;br /&gt;
It'll prompt you for a password, make sure this is secure since you'll be using it to gain full access to your website files.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
Next you'll want to change the ownership of the /var/www folder to the apache user:&lt;br /&gt;
&lt;pre&gt;sudo chown apache:apache /var/www
&lt;/pre&gt;&lt;br /&gt;
Finally, set up the DAV server in a &lt;code&gt;/etc/httpd/conf.d/000-default.conf&lt;/code&gt; file. You can use whatever basic editor you want here, but I use vim:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;vim /etc/httpd/conf.d/000-default.conf
&lt;/pre&gt;&lt;br /&gt;
Make sure this file looks like the following:&lt;br /&gt;
&lt;pre&gt;
        DocumentRoot /var/www
        &amp;lt;Directory /var/www&amp;gt;
                Options Indexes MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        &amp;lt;/Directory&amp;gt;

        Alias /webdav /var/www
        &amp;lt;Location /webdav&amp;gt;
           DAV On
           AuthType Digest
           AuthName "webdav"
           AuthUserFile  /var/www/.htpasswd
           Require valid-user
        &amp;lt;/Location&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Starting Apache&lt;/h3&gt;You can start apache by simply running:&lt;br /&gt;
&lt;pre&gt;$ sudo service httpd start
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Setting up your WebFiles&lt;/h3&gt;You can now connect to your WebServer via WebDav. Simply use the following URL, replacing with your hostname:&lt;br /&gt;
&lt;pre&gt;http://example.com/webdav/
&lt;/pre&gt;&lt;br /&gt;
And connect using your username and password you set up with the htaccess command. Note that this will take you directly into your web root, so feel free to deposit your index.html file directly here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7955597101321402623?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VBNTK5ZILOzh4G_VotxTq5eXypw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VBNTK5ZILOzh4G_VotxTq5eXypw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VBNTK5ZILOzh4G_VotxTq5eXypw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VBNTK5ZILOzh4G_VotxTq5eXypw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/MG_6b8m4fUI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7955597101321402623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7955597101321402623" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7955597101321402623?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7955597101321402623?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/MG_6b8m4fUI/amazon-t1-micro-instance-with-apache.html" title="Amazon T1 Micro instance With Apache Primer" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_TSLP0tzTsdk/TVLvD1xxspI/AAAAAAAAAFM/LmVplLds-ug/s72-c/Screen%2Bshot%2B2011-02-09%2Bat%2B2.45.34%2BPM.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/02/amazon-t1-micro-instance-with-apache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBRXY_eCp7ImA9Wx9VGEo.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-2951832109545553780</id><published>2011-02-04T17:44:00.000-08:00</published><updated>2011-02-04T17:44:14.840-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-04T17:44:14.840-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="route53" /><category scheme="http://www.blogger.com/atom/ns#" term="dns" /><category scheme="http://www.blogger.com/atom/ns#" term="boto" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><title>Boto and Amazon Route53</title><content type="html">For a while now, I've been working on making the Route53 module for boto much more simple and easy to use. While Route53 doesn't yet provide anything special that you can't find in other DNS providers, it's still quite useful to be able to programmatically change DNS records from within your instances. For example, you could set up an instance to boot and automatically associate itself as another server on a given domain for the purposes of Round Robin DNS, or for setting up Memcache servers where you need to have your servers contact all of the possible memcache servers to determine if there's a cached version of your data available.&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Creating your first hosted Zone&lt;/h1&gt;Before you begin, you'll need to make sure you &lt;a href="http://aws.amazon.com/route53/"&gt;sign up&lt;/a&gt; for Route53 from Amazon Web Services. It's free to sign up, and you only pay for what you use, so if you have no hosted zones you'll pay nothing for being signed up. It only costs $1/month per hosted zone, plus a minimal charge for each hit against your domain.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
To create your domain, use the &lt;code&gt;route53&lt;/code&gt; command line client included with boto.&lt;br/&gt;&lt;br /&gt;
&lt;pre&gt;% ./bin/route53 
Usage: route53 [command]
 add_record - Add a new record to a zone
 cmd - Prints this help message
 create - Create a hosted zone, returning the nameservers
 delete_zone - Delete a hosted zone by ID
 get - Get all the records for a single zone
 help - Prints this help message
 ls - List all hosted zones
&lt;/pre&gt;&lt;br/&gt;&lt;br /&gt;
We want to use the create command to make your first domain.&lt;br/&gt;&lt;br /&gt;
&lt;pre&gt;% ./bin/route53 create example.com 
Pending, please add the following Name Servers:
 ns-xxx.awsdns-22.com
 ns-xxx.awsdns-32.net
 ns-xxxx.awsdns-12.co.uk
 ns-xxxx.awsdns-60.org
&lt;/pre&gt;&lt;br/&gt;&lt;br /&gt;
After you create the zone, the script will tell you where to point your domain. This must be done from wherever you purchased your domain.&lt;br/&gt;&lt;br /&gt;
As you can see, Amazon's DNS servers are located around the globe so that no matter where your end-user is, they can have a DNS server close by. &lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Adding a record to a Zone&lt;/h1&gt;Of course, without any records, this zone configuration is relatively useless, so lets set up our records. Before we can add a new record, we need to look up the ID for the zone we just added:&lt;br/&gt;&lt;br /&gt;
&lt;pre&gt;% ./bin/route53 ls         
================================================================================
| ID:   ZXXXXXXXXXXXXXX
| Name: example.com.
| Ref:  xxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx
================================================================================
{}
&lt;/pre&gt;&lt;br /&gt;
Next we use that to add our A record, using the Command line function:&lt;br/&gt;&lt;br /&gt;
&lt;pre&gt;% ./bin/route53 add_record ZXXXXXXXXXXXXXX example.com. A 127.0.0.1    
{u'ChangeResourceRecordSetsResponse': {u'ChangeInfo': {u'Status': u'PENDING', u'SubmittedAt': u'2011-02-05T01:34:20.912Z', u'Id': u'/change/XXXXXXXXXXXXXXXXX'}}
&lt;/pre&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
This change request will take a while to actually occur, so just sit back and wait for the change to happen, or continue on adding records. You can add any type of record, A, AAAA, CNAME, MX, TXT... etc..&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Adding records through boto&lt;/h1&gt;Of course, the real advantage is probably not through the command line functionality, but through the ability to change your records &lt;i&gt;programmatically&lt;/i&gt;. For example, you could create the following script to automatically add the current instance to your zone if it's a standard boto-based image:&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import boto
from boto.route53.record import ResourceRecordSets
conn = boto.connect_route53()
changes = ResourceRecordSets(conn, "ZXXXXXXXXXXXXXX")
change = changes.add_change("CREATE", boto.config.get("dns", "name"),"CNAME")
change.add_value(boto.config.get("Instance", "public-hostname"))
changes.commit()
&lt;/pre&gt;&lt;br /&gt;
&lt;h1&gt;What's next?&lt;/h1&gt;Eventually, Amazon plans to add in Geographic support which will direct your end users to different IPs based on where they're located. This means you can have EC2 servers (or load balancers) set up in different Regions, and depending on where your user is sitting, they'll get the server closest to them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-2951832109545553780?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iJIscUhUWTJg8z8kkEpigU4V4-4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iJIscUhUWTJg8z8kkEpigU4V4-4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iJIscUhUWTJg8z8kkEpigU4V4-4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iJIscUhUWTJg8z8kkEpigU4V4-4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/BPnKhcEYdDc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/2951832109545553780/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=2951832109545553780" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2951832109545553780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/2951832109545553780?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/BPnKhcEYdDc/boto-and-amazon-route53.html" title="Boto and Amazon Route53" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/02/boto-and-amazon-route53.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQXs-fCp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-1986344772486820402</id><published>2011-02-03T09:41:00.000-08:00</published><updated>2011-12-28T09:56:40.554-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T09:56:40.554-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="loggly" /><category scheme="http://www.blogger.com/atom/ns#" term="syslog" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="boto" /><category scheme="http://www.blogger.com/atom/ns#" term="rsyslog" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon linux ami" /><title>Boto, Loggly, and rsyslog</title><content type="html">Recently, I discovered an interesting new "Cloud Logging" service provided by a small start-up company called&amp;nbsp;&lt;a href="http://www.loggly.com/"&gt;Loggly&lt;/a&gt;. This service promised to offer a nice web interface to a logging server that would essentially comprise of a set of syslog servers that could read in all of my standard logs that I would normally get on the vast amounts of cloud-based servers I use, and keep them in one central searchable location.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
UPDATE:&lt;/h1&gt;
&lt;br /&gt;
Loggly has recently had a horrible track record of downtime, although they're by far the cheapest and most feature-filled service that we've found, the record of about 50% uptime is really a killer. After a 3 day outage, we've switched to &lt;a href="http://papertrailapp.com/"&gt;papertrailapp&lt;/a&gt;, and are looking around for any other alternatives.&lt;br /&gt;
&lt;br /&gt;
Do you have an alternative solution to Loggly? Please let me know in the comments!&lt;br /&gt;
&lt;h1&gt;

Installing rsyslog&lt;/h1&gt;
&lt;br /&gt;
Obviously this sparked my attention, as I'd love to not have to log into 5 different servers just to find out what was going on in my boto.log file. I began researching and discovered that I'd have to switch to using rsyslog, which proved to be a slightly more difficult task then you'd expect when running on the Amazon Linux AMI based on RedHat, but with a bit of googling I found an &lt;a href="http://wiki.rsyslog.com/index.php/Install_rsyslog_with_yum"&gt;easy solution&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;yum shell
install rsyslog
remove sysklogd
run
&lt;/pre&gt;
&lt;br /&gt;
All this eventually results in replacing the built-in syslog server with rsyslog, which not only handles multiple threads of execution at once, it also handles sending logs to a remote syslog server.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;

Setting up boto logging&lt;/h1&gt;
The next thing I tried was to use rsyslogs built-in method of simply polling a file and piping that through its logging mechanisms. There were several problems with this, but the most important and deadly issue was that no matter what I did, the syslog server seemed to crash overnight. As it turned out, this was a problem with rsyslog not handling the logrotation of that file, which caused it to lose place in the file and freak out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As a solution, I decided to look into simply piping the logs directly to syslog, bypassing the intermediary step of using a file at all. This proved to be relatively easy once I found the right configuration directives. If you recall, boto has the ability to assign logging configuration automatically from the boto.cfg, so simply replace your existing logging configurations with this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;[loggers]
keys=root,boto

[handlers]
keys=syslog

[formatters]
keys=syslog

[logger_boto]
level=INFO
handlers=syslog

[logger_root]
level=INFO
handlers=syslog

[handler_syslog]
formatter = syslog
class = handlers.SysLogHandler
args = ('/dev/log',handlers.SysLogHandler.LOG_USER)
level = INFO

[formatter_syslog]
format = [%(name)s] %(levelname)s %(message)s
&lt;/pre&gt;
&lt;br /&gt;
The most important thing to note is that you should NOT use any date formatting in the formatter, I've noticed this causing bizarre issues that make the logging not work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;

Piping all logs to loggly&lt;/h1&gt;
The last step is provided to you with a configuration line given by loggly itself. When you set up an input, you get a configuration line to add to your rsyslog.conf file, something like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;*.*    @@logs.loggly.com:123456
&lt;/pre&gt;
&lt;br /&gt;
Using this, you'll send all your logs directly to the loggly servers, including your newly added boto logs!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test this using:&lt;br /&gt;
&lt;pre&gt;import boto
boto.log.infO("Test log from BOTO!")
&lt;/pre&gt;
&lt;br /&gt;
Allow about a minute for the log to appear in loggly, although it may appear much quicker then that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-1986344772486820402?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-6JfzbAg4bxrCqhLDBOmCcte0Ro/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-6JfzbAg4bxrCqhLDBOmCcte0Ro/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-6JfzbAg4bxrCqhLDBOmCcte0Ro/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-6JfzbAg4bxrCqhLDBOmCcte0Ro/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/tXppUqC7azo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/1986344772486820402/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=1986344772486820402" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1986344772486820402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/1986344772486820402?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/tXppUqC7azo/boto-loggly-and-rsyslog.html" title="Boto, Loggly, and rsyslog" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/02/boto-loggly-and-rsyslog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYCSHk5eip7ImA9Wx9VEEs.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-7926112551561413595</id><published>2011-01-26T09:16:00.000-08:00</published><updated>2011-01-26T09:16:09.722-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-26T09:16:09.722-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mobile Phones" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="Verizon" /><category scheme="http://www.blogger.com/atom/ns#" term="ATT" /><title>The real difference between Verizon and AT&amp;T</title><content type="html">There's been a lot of&amp;nbsp;controversy&amp;nbsp;recently about the recent announcement that&lt;a href="http://www.verizonwireless.com/b2c/splash/iphone.jsp"&gt; Verizon will now be selling the iPhone&lt;/a&gt;. While hundreds of thousands (if not millions) of users switched from AT&amp;amp;T to Verizon when the iPhone first came out, it's not clear as to if, or why, we should switch to Verizon. The truth is that there are many differences in the technology behind each of these companies that will greatly effect how you decide where to stay.&lt;br /&gt;
&lt;br /&gt;
First of all, I'd like to say that all of my information comes from a time when I worked at a retail store selling Verizon phones, and then eventually Cingular (which was purchased by AT&amp;amp;T) phones later. There's a mass confusion about the technologies and which one is "faster" and which one covers more area, and the truth is that they're almost dead even in both aspects. The bottom line comes down to a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Coverage&lt;/span&gt;&lt;br /&gt;
AT&amp;amp;T has more 3G cellular towers then any other provider in the US. Verizon has more &lt;i&gt;overall&lt;/i&gt;&amp;nbsp;towers then any other provider in the US. That means while you're more likely to have 3G coverage by AT&amp;amp;T, you're more likely to have &lt;i&gt;any&lt;/i&gt;&amp;nbsp;cellular reception by Verizon. Obviously this depends on where you are, but in general Verizon targets to have the most ground coverage, and AT&amp;amp;T targets where people live.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Signal Frequencies&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;/span&gt;As a fundamental law of physics, lower frequency signals tend to penetrate solid objects, while higher frequency signals tend to bounce off of them. Which is better is really a matter of opinion, and terrain, but there are some undeniable facts.&lt;br /&gt;
&lt;br /&gt;
Verizon uses lower frequencies which tend to penetrate solid objects better. AT&amp;amp;T uses higher frequency signals wich tend to bounce off of solid objects better.&lt;br /&gt;
&lt;br /&gt;
A good example of where you can see this is in basements. In my college days, I was riding down an elevator talking on my cell phone. Since this was before the iPhone days, I was still on Verizon. Another passenger on the elevator was talking on his phone, which used Cingular (now AT&amp;amp;T). I knew that both towers were actually on the same exact building, about 5 yards apart, so this next step came as a surprise to both of us.&lt;br /&gt;
&lt;br /&gt;
As soon as we passed into the basement (which was solid concrete plus a metal frame), he lost his call. I continued on my call the entire way through the basement, picked up my laundry, and returned to my dorm room while still on the call. The only difference was the carrier, and more specifically the frequency they use.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Multi-Tasking Compatibility&lt;/span&gt;&lt;br /&gt;
One of the biggest complaints that iPhone users will have of Verizon is that they can no longer talk on the phone while browsing the web, or using data of any kind. This is because Verizon towers do not let you connect to both their data network an their cellular network at the same time. Although Verizon has indicated that this should be fixed soon, it's almost unthinkable that you'd not be able to be on a call, hit your menu button, look something up, and talk about it with the person you're calling. This area clearly will need to be fixed before most iPhone users should switch.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Multi-Tower Compatibility&lt;/span&gt;&lt;br /&gt;
The biggest complaint that iPhone users had of AT&amp;amp;T was dropped calls. This is not due to the problem of the phone itself, but due to the technology that is provided by AT&amp;amp;T. Specifically, AT&amp;amp;T only allows any given phone to be connected to &lt;i&gt;one tower&lt;/i&gt;&amp;nbsp;at a time. Verizon phones, while only being allowed to connect to &lt;i&gt;one network&lt;/i&gt;&amp;nbsp;at a time, can be connected to up to 3 towers at any given time.&lt;br /&gt;
&lt;br /&gt;
This functionality is known as &lt;b&gt;soft handover&lt;/b&gt;, which essentially means that when you're driving down the road and switch which towers you're in range of, the Verizon phone is more likely to be able to handle the switchover, since it's already using 2 other towers.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Data Transfer Speeds&lt;/span&gt;&lt;br /&gt;
The last point I'm going to touch on here about AT&amp;amp;T vs Verizon is speed of the networks. Most of us are familiar with Cable internet, specifically that Cable uses a &lt;b&gt;shared medium&lt;/b&gt;&amp;nbsp;which means that the performance you get will be directly proportional to the number of people on your same line.&lt;br /&gt;
&lt;br /&gt;
Cellular towers are no different. The more people on a given tower, the less overall throughput that tower will have. Although there's a difference in technology coming up with the new 4G networks, in general the more people in your area using your same network, the less throughput you'll have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-7926112551561413595?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kTc2i3cNl6bazBMBZ5C54Av6xrI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTc2i3cNl6bazBMBZ5C54Av6xrI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kTc2i3cNl6bazBMBZ5C54Av6xrI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTc2i3cNl6bazBMBZ5C54Av6xrI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/28e_DDDBZ44" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/7926112551561413595/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=7926112551561413595" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7926112551561413595?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/7926112551561413595?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/28e_DDDBZ44/real-difference-between-verizon-and-at.html" title="The real difference between Verizon and AT&amp;T" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.coredumped.org/2011/01/real-difference-between-verizon-and-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GR30-eSp7ImA9Wx5XE0Q.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-4430966761371118973</id><published>2010-09-13T08:30:00.000-07:00</published><updated>2010-09-13T08:32:06.351-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-13T08:32:06.351-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="micro instances" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web services" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Why I don't use EBS root instances</title><content type="html">Recently Amazon announced a new&amp;nbsp;&lt;a href="http://aws.typepad.com/aws/2010/09/new-amazon-ec2-micro-instances.html"&gt;Micro Instance for EC2&lt;/a&gt;&amp;nbsp;which costs significantly less then a standard small, and contains the ability to "burst" CPU usage. This new instance type leads developers more and more to using many instances to perform tasks since it's far easier to scale out.&lt;br /&gt;
&lt;br /&gt;
This also marks the first Instance that doesn't contain any ephemeral storage at all, meaning you have to set up each instance on an &lt;a href="http://aws.typepad.com/aws/2009/12/new-amazon-ec2-feature-boot-from-elastic-block-store.html"&gt;EBS volume&lt;/a&gt;, and you can't simply run one off of an AMI. Additionally, if your instance dies, you'll have to fix or replace that EBS volume, instead of simply tossing it away.&lt;br /&gt;
&lt;br /&gt;
Amazon points out that this method of booting from EBS is faster then copying from S3, and does provide a few advantages. While it's true that the Initial boot process will be faster, it's been &lt;a href="http://stu.mp/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html"&gt;tested and proved&lt;/a&gt; that the Ephemeral disks are faster then EBS volumes. This means that if you're doing any sort of heavy disk IO, especially temporary writes, EBS will be much slower for you, and you've got no other option for Micro instances.&lt;br /&gt;
&lt;br /&gt;
I love the idea of Micro instances, and I understand that Amazon was saving money (and passing that savings on to the consumer) by not proving a large Ephemeral disk with each instance, but really not even a 10GB root partition? This new step in Amazons recent history seems to be a major step backwards, showing that EBS-backed instances will be their future supported instance of choice, instead of providing support for the disposable instance model.&lt;br /&gt;
&lt;br /&gt;
If anyone at Amazon is listening, I'm not asking for much, just let us have 10GB of free Ephemeral storage for these Micros. This Ephemeral storage gives us a lot of usability for free, which is exceptionally useful for things that are temporary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-4430966761371118973?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fi4_ozJZNzzzYyh2rJAoPQPOfes/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fi4_ozJZNzzzYyh2rJAoPQPOfes/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fi4_ozJZNzzzYyh2rJAoPQPOfes/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fi4_ozJZNzzzYyh2rJAoPQPOfes/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/yob6mpKqPVI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/4430966761371118973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=4430966761371118973" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/4430966761371118973?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/4430966761371118973?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/yob6mpKqPVI/why-i-dont-use-ebs-root-instances.html" title="Why I don't use EBS root instances" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2010/09/why-i-dont-use-ebs-root-instances.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIGRXw4cSp7ImA9Wx5QGUU.&quot;"><id>tag:blogger.com,1999:blog-301169258518998120.post-8889393486023703117</id><published>2010-09-08T14:15:00.000-07:00</published><updated>2010-09-08T14:15:24.239-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-08T14:15:24.239-07:00</app:edited><title>Search for Books on Amazon using Boto!</title><content type="html">Today I added some minor support for ECS into boto. Specifically, I've implemented the&amp;nbsp;&lt;a href="http://docs.amazonwebservices.com/AWSECommerceService/2010-09-01/DG/index.html?ItemSearch.html"&gt;ItemSearch&lt;/a&gt;&amp;nbsp;API from the Product Advertising API. Usage is simple:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; from boto.ecs import ECSConnection&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; conn = ECSConnection()&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; books = conn.item_search("Books", Author="John Resig")&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt;&amp;gt; for book in books:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;... &amp;nbsp; &amp;nbsp; print book.Title&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;... &amp;nbsp; &amp;nbsp; print book.ASIN&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The above example should print out the title and ASIN of all books currently on Amazon authored by John Resig, including&amp;nbsp;&lt;a href="http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X?ie=UTF8&amp;amp;tag=blogcoredumpe-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Secrets of the JavaScript Ninja&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=blogcoredumpe-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=193398869X" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Happy searching!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/301169258518998120-8889393486023703117?l=blog.coredumped.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XfZJng41grjXeQax0sEt2iYV_9w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XfZJng41grjXeQax0sEt2iYV_9w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XfZJng41grjXeQax0sEt2iYV_9w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XfZJng41grjXeQax0sEt2iYV_9w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisMoyer/~4/Cjl6xwgkYRQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.coredumped.org/feeds/8889393486023703117/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=301169258518998120&amp;postID=8889393486023703117" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/8889393486023703117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/301169258518998120/posts/default/8889393486023703117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChrisMoyer/~3/Cjl6xwgkYRQ/search-for-books-on-amazon-using-boto.html" title="Search for Books on Amazon using Boto!" /><author><name>Chris Moyer</name><uri>https://profiles.google.com/104484237747096649136</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-g5NZGg23lkQ/AAAAAAAAAAI/AAAAAAAAAKk/NTkRopAGYqg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.coredumped.org/2010/09/search-for-books-on-amazon-using-boto.html</feedburner:origLink></entry></feed>

