<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xi Group Ltd. Company Blog &#187; Xi Group Ltd. Company Blog &#187; Small Tip</title>
	<atom:link href="http://blog.xi-group.com/category/small-tip/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xi-group.com</link>
	<description>High-quality DevOps Services</description>
	<lastBuildDate>Tue, 09 Jun 2015 11:38:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</title>
		<link>http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/</link>
		<comments>http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/#comments</comments>
		<pubDate>Tue, 20 Jan 2015 12:20:54 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[extract fields]]></category>
		<category><![CDATA[filter parameter]]></category>
		<category><![CDATA[output filter]]></category>
		<category><![CDATA[parse output]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=362</guid>
		<description><![CDATA[This post will present another, useful feature of the AWS CLI tool set, the &#8211;filter parameter. This command line parameter is available and extremely helpful in EC2 namespace (aws ec2 describe-*).There are various ways to use &#8211;filter parameter. 1. &#8211;filter parameter can get filtering properties directly from the command line: [crayon-69dc4df07854d776327558/] 2. &#8211;filter parameter will [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">This post will present another, useful feature of the AWS CLI tool set, the <strong>&#8211;filter</strong> parameter. This command line parameter is available and extremely helpful in EC2 namespace (aws ec2 describe-*).There are various ways to use <strong>&#8211;filter</strong> parameter.</p>
<p style="text-align: justify;">1. <strong>&#8211;filter</strong> parameter can get filtering properties directly from the command line:</p>
<p></p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="instance-id",Values="i-1234abcd"</pre><p></p>
<p style="text-align: justify;">2. <strong>&#8211;filter</strong> parameter will also use JSON-encoded filter file:</p>
<p></p><pre class="crayon-plain-tag">aws ec2 describe-instances --filters file://filters.json</pre><p></p>
<p>The <strong>filters.json</strong> file uses the following structure:</p>
<p></p><pre class="crayon-plain-tag">[
  {
    "Name": "instance-type",
    "Values": ["m1.small", "m1.medium"]
  },
  {
    "Name": "availability-zone",
    "Values": ["us-west-2c"]
  }
]</pre><p></p>
<p style="text-align: justify;">There are various AWS CLI components that provide <strong>&#8211;filter</strong> parameters. For additional information check the <em>References</em> section.</p>
<p>To demonstrate the way this functionality can be used in various scenarios, there are several examples:</p>
<p>1. Filter by availability zone:</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="availability-zone",Values="us-east-1b"</pre><p></p>
<p>2. Filter by security group (EC2-Classic):</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="group-name",Values="default"</pre><p></p>
<p>3. Filter by security group (EC2-VPC):</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="instance.group-name",Values="default"</pre><p></p>
<p>4. Filter only spot instances</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="instance-lifecycle",Values="spot"</pre><p></p>
<p>5. Filter only running EC2 instances:</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="instance-state-name",Values="running"</pre><p></p>
<p>6. Filter only stopped EC2 instances:</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="instance-state-name",Values="stopped"</pre><p></p>
<p>7. Filter by SSH Key name</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter Name="key-name",Values="ssh-key"</pre><p></p>
<p>8. Filter by Tag:</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter "Name=tag-key,Values=Name" "Name=tag-value,Values=string"</pre><p></p>
<p>9. Filter by Tag with a wildcard (&#8216;*&#8217;):</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter "Name=tag-key,Values=MyTag" "Name=tag-value,Values=abcd*efgh"</pre><p></p>
<p>10. Filter by multiple criteria (all running instances with string &#8217;email&#8217; in the value of the Name tag):</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" "Name=tag-key,Values=Name" "Name=tag-value,Values=*email*"</pre><p></p>
<p>11. Filter by multiple criteria (all running instances with empty Name tag);</p><pre class="crayon-plain-tag">aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" "Name=tag-key,Values=Name" "Name=tag-value,Values=''"</pre><p></p>
<p>Those examples are very close to production ones used in several large AWS deployments. They are used to:</p>
<ul>
<li>Monitor changes in instance populations;</li>
<li>Monitor successful configuration of resources;</li>
<li>Track deployment / rollout of new software version;</li>
<li>Track stopped instances to prevent unnecessary resource usage;</li>
<li>Ensure desired service distributions over availability zones and regions;</li>
<li>Ensure service distribution over instances with different lifecycle;</li>
</ul>
<p>Be sure to utilize this functionality in your monitoring infrastructure. It has been powerful source of operational insights and great source of raw data for our intelligent control planes!</p>
<p>If you want to talk more on this subject or just share your experience, do not hesitate to <a href="http://blog.xi-group.com/contact-us/" target="_blank">Contact Us!</a></p>
<p>References</p>
<ul>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html</a></li>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-instance-requests.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-instance-requests.html</a></li>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-reserved-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-reserved-instances.html</a></li>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html</a></li>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html</a></li>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/index.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/index.html</a></li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/">Small Tip: EBS volume allocation time is linear to the size and unrelated to the instance type</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</title>
		<link>http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/</link>
		<comments>http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/#comments</comments>
		<pubDate>Wed, 26 Nov 2014 10:18:37 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[block device mappings]]></category>
		<category><![CDATA[instance store]]></category>
		<category><![CDATA[volumes]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=195</guid>
		<description><![CDATA[This post will present one of the less popular features in the AWS CLI tool set, how to deal with EC2 instance volumes through the use of &#8211;block-device-mappings parameter. Previous post, Small Tip: Use AWS CLI to create instances with bigger root partitions already presents one of the common use cases, modifying the instance root [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">This post will present one of the less popular features in the AWS CLI tool set, how to deal with EC2 instance volumes through the use of <strong>&#8211;block-device-mappings</strong> parameter. Previous post, <a href="http://blog.xi-group.com/2014/06/small-tip-use-aws-cli-to-create-instances-with-bigger-root-partitions/">Small Tip: Use AWS CLI to create instances with bigger root partitions</a> already presents one of the common use cases, modifying the instance root partition size. However, use of &#8216;&#8211;block-device-mappings&#8217; can go far beyond this simple feature.</p>
<p style="text-align: justify;">Default documentation (<a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html</a>) although a good start is somewhat limited. Several tips and tricks will be presented here.</p>
<p><strong>The location of the JSON block device mapping specification can be quite flexible. The mappings can be supplied:</strong></p>
<p>1. Using command line directly:</p><pre class="crayon-plain-tag">--block-device-mappings '[ {"DeviceName":"/dev/sdb","VirtualName":"ephemeral0"}, {"DeviceName":"/dev/sdc","VirtualName":"ephemeral1"}]'</pre><p></p>
<p>2. Using file as a source:</p><pre class="crayon-plain-tag">--block-device-mappings file:////home/ec2-user/mapping.json</pre><p></p>
<p>3. Using URL as a source:</p><pre class="crayon-plain-tag">--block-device-mappings http://mybucket.s3.amazonaws.com/mapping.json</pre><p></p>
<p>Source: <a href="http://understeer.hatenablog.com/entry/2013/10/18/223618">http://understeer.hatenablog.com/entry/2013/10/18/223618</a></p>
<p>Other common scenarios:</p>
<p>1. <strong>To reorder default ephemeral volumes to ensure stability of the environment</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sde",
    "VirtualName": "ephemeral0"
  },
  {
    "DeviceName": "/dev/sdf",
    "VirtualName": "ephemeral1"
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful for additional UserData processing or deployments with hardcoded settings.</p>
<p>2. <strong>To allocate additional EBS Volume with specific size (100GB), to be associated with the EC2 instance</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sdg",
    "Ebs": {
      "VolumeSize": 100
    }
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful for cases where cheaper instance types are outfitted with big volumes (Disk intensive tasks run on low-CPU/MEM instance types).</p>
<p>3. <strong>To allocate new volume from Snapshot ID</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sdh",
    "Ebs": {
      "SnapshotId": "snap-xxxxxxxx"
    }
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful to pre-loading newly created instances with specific disk data and still retaining the ability to modify the local copy.</p>
<p>4. <strong>To omit mapping of a particular Device Name</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sdj",
    "NoDevice": ""
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful to overwrite default AWS behavior.</p>
<p>5. <strong>To allocate new EBS Volume with explicit termination behavior (Keep after instance termination)</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sdc",
    "Ebs": {
      "VolumeSize": 10,
      "DeleteOnTermination": false
    }
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful to keep instance data after termination, additional cost may be significant if those volumes are not released after examination.</p>
<p>6. <strong>To allocate new, encrypted, EBS Volume with Reserved IOPS</strong>:</p><pre class="crayon-plain-tag">[
  {
    "DeviceName": "/dev/sdc",
    "Ebs": {
      "VolumeSize": 10,
      "VolumeType": "io1",
      "Iops": 1000,
      "Encrypted": true
    }
  }
]</pre><p></p>
<p style="text-align: justify;"><strong>NOTE</strong>: Useful to set minimum required performance levels (I/O Operations Per Second) for the specified volume.</p>
<p style="text-align: justify;">Outlined functionality should cover wide range of potentially use cases for DevOps engineers who want to use automation to customize their infrastructure. Flexible instance volume management is a key ingredient for successful implementation of the &#8216;Infrastructure-as-Code&#8217; paradigm!</p>
<p>References</p>
<ul>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html</a></li>
<li><a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html">http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html</a></li>
<li><a href="http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html">http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html</a></li>
<li><a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html</a></li>
<li><a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html</a></li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/how-to-implement-multi-cloud-deployment-for-scalability-and-reliability/">How to implement multi-cloud deployment for scalability and reliability</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Tip: How to use AWS CLI to start Spot instances with UserData</title>
		<link>http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/</link>
		<comments>http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/#comments</comments>
		<pubDate>Sat, 12 Jul 2014 18:44:17 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[spot instances]]></category>
		<category><![CDATA[UserData]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=185</guid>
		<description><![CDATA[Common occurrence in the list of daily DevOps tasks is the one to deal with AWS EC2 Spot Instances. They offer the same performance, as the OnDemand counterparts, they are cheap to the extend that user can specify the hourly price. The drawback is that AWS can reclaim them if the market price goes beyond [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Common occurrence in the list of daily DevOps tasks is the one to deal with <a href="http://aws.amazon.com/ec2/purchasing-options/spot-instances/">AWS EC2 Spot Instances</a>. They offer the same performance, as the OnDemand counterparts, they are cheap to the extend that user can specify the hourly price. The drawback is that AWS can reclaim them if the market price goes beyond the user&#8217;s price. Still, those are key component, a basic building block, in every modern elastic system. As such, DevOps engineers must regularly interact with those.</p>
<p style="text-align: justify;">AWS provides proper command line interface, <a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html">aws ec2 request-spot-instances</a> exposes multiple options to the user. However, some of the common use cases are not comprehensively covered in the documentation. For example, creating Spot Instances with Userdata using the command line tools is somewhat obscure and convoluted, although common need in DevOps and Developers lives. The tricky part: <strong>It must be BASE64 encoded!</strong></p>
<p style="text-align: justify;">Assume the following, simple UserData script, must be deployed on numerous EC2 Spot Instances:</p>
<p></p><pre class="crayon-plain-tag">#!/bin/bash -ex

# Debian apt-get install function
apt_get_install()
{
        DEBIAN_FRONTEND=noninteractive apt-get -y \
        -o DPkg::Options::=--force-confdef \
        -o DPkg::Options::=--force-confold \
        install $@
}

# Mark execution start
echo "STARTING" > /root/user_data_run

# Some initial setup
set -e -x
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get upgrade -y

# Install required packages
apt_get_install nginx

# Create test html page
mkdir /var/www
cat > /var/www/index.html << "EOF"
<html>
        <head>
                <title>Demo Page</title>
                </head>

        <body>
                <center><h2>Demo Page</h2></center><br>
                <center>Status: running</center>
        </body>
</html>
EOF

# Configure NginX
cat > /etc/nginx/conf.d/demo.conf << "EOF"
# Minimal NginX VirtualHost setup
server {
        listen 8080;

        root /var/www;
        index index.html index.htm;

        location / {
                try_files $uri $uri/ =404;
        }
}
EOF

# Restart NginX with the new settings
/etc/init.d/nginx restart

# Mark execution end
echo "DONE" > /root/user_data_run</pre><p></p>
<p style="text-align: justify;">Make sure base64 command is available in your system, or use equivalent, to encode the sample userdata.sh file before passing to the launch specification:</p>
<p></p><pre class="crayon-plain-tag">aws ec2 request-spot-instances \
    --spot-price 0.01 \
    --instance-count 2 \
    --launch-specification \
        "{ \
            \"ImageId\":\"ami-a6926dce\", \
            \"InstanceType\":\"m3.medium\", \
            \"KeyName\":\"test-key\", \
            \"SecurityGroups\": [\"test-sg\"], \
            \"UserData\":\"`base64 userdata.sh`\" \
        }"</pre><p></p>
<p style="text-align: justify;">In this example <strong>two</strong> spot instance requests will be created for <strong>m3.medim</strong> instances, using <strong>ami-a6926dce</strong> AMI, <strong>test-key</strong> SSH key, running in <strong>test-sg</strong> Security Group. BASE64-encoded contents of <strong>userdata.sh</strong> will be attached to the request so upon fulfillment the Userdata will be passed to the newly created instances and executed after boot-up.</p>
<p style="text-align: justify;">Spot instance requests will be created in the AWS EC2 Dashboard:</p>
<p><a href="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.11.20-PM.png"><img src="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.11.20-PM.png" alt="Screen Shot 2014-07-12 at 9.11.20 PM" width="1240" height="198" class="alignnone size-full wp-image-271 img-thumbnail img-responsive" /></a></p>
<p style="text-align: justify;">Once the Spot Instance Requests (SIRs) are fulfilled, InstanceID will be associated for each SIR:</p>
<p><a href="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.18.24-PM.png"><img src="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.18.24-PM.png" alt="Screen Shot 2014-07-12 at 9.18.24 PM" width="1237" height="198" class="alignnone size-full wp-image-272 img-thumbnail img-responsive" /></a></p>
<p style="text-align: justify;">EC2 Instances dashboard will show newly created Spot Instances (notice the &#8220;<strong>Lifecycle: spot</strong>&#8221; in Instance details):</p>
<p><a href="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.20.30-PM.png"><img src="http://blog.xi-group.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-12-at-9.20.30-PM.png" alt="Screen Shot 2014-07-12 at 9.20.30 PM" width="2286" height="194" class="alignnone size-full wp-image-273 img-thumbnail img-responsive" /></a></p>
<p style="text-align: justify;">Using the proper credentials, one can verify successful execution of the userdata.sh on each instance:</p>
<p></p><pre class="crayon-plain-tag">:~> ssh -i ~/.ssh/test-key.pem ubuntu@ec2-54-211-6-104.compute-1.amazonaws.com "tail /var/log/cloud-init-output.log"
Setting up nginx (1.4.6-1ubuntu3) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
+ mkdir /var/www
+ cat
+ cat
+ /etc/init.d/nginx restart
 * Restarting nginx nginx
   ...done.
+ echo DONE
Cloud-init v. 0.7.5 finished at Sat, 12 Jul 2014 18:17:09 +0000. Datasource DataSourceEc2.  Up 76.38 seconds
:~></pre><p></p>
<p style="text-align: justify;">&#8230; and more importantly, if the configured service works as expected:</p>
<p></p><pre class="crayon-plain-tag">:~> curl http://ec2-54-211-6-104.compute-1.amazonaws.com:8080/
<html>
        <head>
                <title>Demo Page</title>
                </head>

        <body>
                <center><h2>Demo Page</h2></center><br>
                <center>Status: running</center>
        </body>
</html>
:~></pre><p></p>
<p style="text-align: justify;">Newly created Spot Instances are serving traffic, running at 0.01 USD/hr and will happily do so until the market price for this instance type goes above the specified price!</p>
<p>References</p>
<ul>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html</a></li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/">Small Tip: EBS volume allocation time is linear to the size and unrelated to the instance type</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Tip: AWS announces T2 instance types</title>
		<link>http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/</link>
		<comments>http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/#comments</comments>
		<pubDate>Fri, 04 Jul 2014 14:38:04 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[instance types]]></category>
		<category><![CDATA[instances]]></category>
		<category><![CDATA[t2]]></category>
		<category><![CDATA[t2.medium]]></category>
		<category><![CDATA[t2.micro]]></category>
		<category><![CDATA[t2.small]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=248</guid>
		<description><![CDATA[One of the oldest and probably one of the most popular instance types, the t1.micro was recently upgraded by AWS. Three new instance types were introduced to fill the gap between t1.micro and the current-next, m3.medium. The new generation is called T2, uses only HVM based virtualization and comes with EBS only store support. There [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">One of the oldest and probably one of the most popular instance types, the <strong>t1.micro</strong> was recently upgraded by AWS. Three new instance types were introduced to fill the gap between <strong>t1.micro</strong> and the current-next, <strong>m3.medium</strong>. The new generation is called T2, uses only HVM based virtualization and comes with EBS only store support. There are three new instance types:</p>
<ol>
<li>t2.micro</li>
<li>t2.small</li>
<li>t2.medium</li>
</ol>
<p style="text-align: justify;">Those instance types are all &#8220;<a href="http://aws.amazon.com/ec2/instance-types/#burst">Burstable Performance Instances</a>&#8221; which means they are suitable for unsustained loads. This is also supported by the <strong>EBS Only</strong> store, which effectively means that high-volume I/O is out of the question. The fact that those instances are all using <strong>HVM</strong>-based virtualization, however, supports quick SCALE-UP to more potent instance types, if needs arise. One notable remark here is that T2 instances are <strong>VPC-only</strong>, which is a strong indication of the will to move everything into VPCs nowadays. AWS wants you to start using VPCs from the start!</p>
<p style="text-align: justify;">The instance resource matrix now looks like this:</p>
<table  width="100%" class="table table-bordered table-striped">
<tr>
<th>Instance Type</th>
<th>Virtualization Type</th>
<th>CPU Cores</th>
<th>Memory</th>
<th>Storage</th>
</tr>
<tr>
<td>t1.micro</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">PV</a></td>
<td>1</td>
<td>0.613 GB</td>
<td>EBS Only</td>
</tr>
<tr>
<td>t2.micro</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">HVM</a></td>
<td>1</td>
<td>1 GB</td>
<td>EBS Only</td>
</tr>
<tr>
<td>m1.small</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">PV</a></td>
<td>1</td>
<td>1.7 GB</td>
<td>EBS Only</td>
</tr>
<tr>
<td>t2.small</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">HVM</a></td>
<td>1</td>
<td>2 GB</td>
<td>EBS Only</td>
</tr>
<tr>
<td>m3.medium</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">HVM</a></td>
<td>1</td>
<td>3.75 GB</td>
<td>EBS + SSD</td>
</tr>
<tr>
<td>t2.medium</td>
<td><a href="http://wiki.xen.org/wiki/Virtualization_Spectrum">HVM</a></td>
<td>2</td>
<td>4 GB</td>
<td>EBS Only</td>
</tr>
</table>
<p style="text-align: justify;">As stated by AWS, the target uses for the new, T2 instance type family, includes:</p>
<ul>
<li>Development environments;</li>
<li>Private experimentation;</li>
<li>Educational use;</li>
<li>Build servers / Code repositories;</li>
<li>Low-traffic web applications;</li>
<li>Small databases.</li>
</ul>
<p style="text-align: justify;">To evaluate the meaning of &#8220;<a href="http://aws.amazon.com/ec2/instance-types/#burst">Burstable Performance Instances</a>&#8220;, here are CPU benchmark results on several instance instance types:</p>
<table  width="100%" class="table table-bordered table-striped">
<tr>
<th>Instance Type</th>
<th>DES crypts/s</th>
<th>MD5 crypts/s</th>
<th>Blowfish crypts/s</th>
<th>Generic crypts/s</th>
</tr>
<tr>
<td>t1.micro</td>
<td>~ 2 407 000</td>
<td>~ 6 869</td>
<td>~ 442</td>
<td>~ 187 257</td>
</tr>
<tr>
<td>t2.micro</td>
<td>~ 4 757 000</td>
<td>~ 14 164</td>
<td>~ 851</td>
<td>~ 344 928</td>
</tr>
<tr>
<td>m1.small</td>
<td>~ 1 218 000</td>
<td>~ 3 480</td>
<td>~ 222</td>
<td>~ 92 870</td>
</tr>
<tr>
<td>t2.small</td>
<td>~ 4 993 000</td>
<td>~ 14 245</td>
<td>~ 854</td>
<td>~ 347 961</td>
</tr>
<tr>
<td>m3.medium</td>
<td>~ 2 272 000</td>
<td>~ 6 429</td>
<td>~ 386</td>
<td>~ 158 342</td>
</tr>
<tr>
<td>t2.medium</td>
<td>~ 5 045 000</td>
<td>~ 14 592</td>
<td>~ 878</td>
<td>~ 356 544</td>
</tr>
</table>
<p style="text-align: justify;">All instances use detault settings for storage, Amazon Linux AMI 2014.03.2, John The Ripper 1.8.0, measuring real crypts with many salts! The test is fairly synthetic, but answers the key question: <strong>What difference does it make to have a Burstable instance type?</strong> And the answer: <strong>If CPU load is not sustainable, it&#8217;s more than twice as fast!</strong></p>
<p style="text-align: justify;">Price-wise the new instance types are also better. Cost reduction of <strong>On Demand</strong> prices of more than <strong>35%</strong> allows you to <strong>run t2.micro for less than 10 USD/m</strong>! Watch out, <a href="https://www.digitalocean.com">DigitalOcean</a>! Obviously, Amazon wants change the already established &#8220;AWS for business, DigitalOcean for home&#8221; mantra into &#8220;AWS Everywhere&#8221;.</p>
<p style="text-align: justify;">In conclusion, the new, T2 instance type family, closes the gap between unacceptably low performance instance type (t1.micro) and too expensive instances types (m1.small, m3.medium) which creates the sweet-spot for entry users, cloud enthusiast and home users. As someone said: &#8220;Now you have an instance type to run WordPress on!&#8221;</p>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/how-to-implement-multi-cloud-deployment-for-scalability-and-reliability/">How to implement multi-cloud deployment for scalability and reliability</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Tip: How to run non-deamon()-ized processes in the background with SupervisorD</title>
		<link>http://blog.xi-group.com/2014/06/small-tip-how-to-run-non-deamon-ized-processes-in-the-background-with-supervisord/</link>
		<comments>http://blog.xi-group.com/2014/06/small-tip-how-to-run-non-deamon-ized-processes-in-the-background-with-supervisord/#comments</comments>
		<pubDate>Thu, 26 Jun 2014 11:18:23 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[background process]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[long-running]]></category>
		<category><![CDATA[lts]]></category>
		<category><![CDATA[supervisor]]></category>
		<category><![CDATA[supervisord]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=156</guid>
		<description><![CDATA[The following article will demonstrate how to use Ubuntu 14.04 LTS and SupervisorD to manage the not-so-uncommon case of long running services that expect to be running in active console / terminal. Those are usually quickly / badly written pieces of code that do not use daemon(), or equivalent function, to properly go into background [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">The following article will demonstrate how to use Ubuntu 14.04 LTS and <a href="http://supervisord.org">SupervisorD</a> to manage the not-so-uncommon case of long running services that expect to be running in active console / terminal. Those are usually quickly / badly written pieces of code that do not use daemon(), or equivalent function, to properly go into background but instead run forever in the foreground. Over the years multiple solutions emerged, including quite the ugly ones (<strong>nohup &#8230; 2>&#038;1 logfile &#038;</strong>). Luckily, there is a better one, and it&#8217;s called SupervisorD. With Ubuntu 14.04 LTS it even comes as a package and it should be part of your DevOps arsenal of tools!</p>
<p style="text-align: justify;">In a typical Python / Web-scale environment multiple components will be implemented in a de-coupled, micro-services, REST-based architecture. One of the popular frameworks for REST is <a href="http://bottlepy.org">Bottle</a>. And there are multiple approaches to build services with Bottle when full-blown HTTP Server is available (Apache, NginX, etc.) or if performance matters. All of those are valid and somewhat documented. But still, there is the case (and it more common than one would think) when developer will create Bottle server to handle simple task and it will propagate into production, using ugly solution like <strong>Screen/TMUX</strong> or even <strong>nohup</strong>. Here is a way to put this under proper control.</p>
<p>Test Server code: test-server.py</p><pre class="crayon-plain-tag">#!/usr/bin/env python

# Description: Demo Bottle Server to demonstrate use of SupervisorD
#
# How to run:
#       test-server.py -c test-server.conf
#
# Exepects the following configuration file:
#
#       server:
#               bind_ip: 0.0.0.0
#               bind_port: 8080
#
#       configuration_variable: true
#

import argparse
import time
import yaml
import sys

from bottle import route, run, template

# GET: /
@route('/')
def index():
        static_page = """
<html>
<head>
        <title>Test Server</title>
</head>
<body>
        <center><h2>Test Server is working!</h2></center>
</body>
</html>
        """
        return static_page

# Return the server->bind_ip value from the parsed configuration
def get_bind_ip(config):
        if config:
                return config['server']['bind_ip']
        else:
                return None

# Return the server->bind_port value from the parsed configuation
def get_bind_port(config):
        if config:
                return config['server']['bind_port']
        else:
                return None

# Return sample configuration variable
def get_config_data(config):
        if config:
                return config['configuration_variable']
        else:
                return None

# Main entry point for the application
def main():
        """ Main Entry Point for the appliation """

        # Parse command line arguments
        parser = argparse.ArgumentParser(description='Demo Server using Bottle')
        parser.add_argument('-c', '--config', type=str, required=True, dest='config', help='Configuration File Location')

        args = parser.parse_args()
        conf_file = args.config

        # Check config file accessibility
        try:
                conf_fd = open(conf_file, 'r')
        except IOError as e:
                if e.errno == errno.EACCES or e.errno == errno.ENOENT:
                        print("{progname}: Unable to read the configuration file ({config})!".format(progname=sys.argv[0], config=conf_file))
                        sys.exit(1)
        else:
                with conf_fd:
                        config = yaml.load(conf_fd)
                        conf_fd.close()

        # Get configuration data
        bind_ip = get_bind_ip(config)
        bind_port = get_bind_port(config)

        if bind_ip == None or bind_port == None:
                print("{progname}: Required configuration variable is unavailable!".format(progname=sys.argv[0]))
                sys.exit(1)

        config_data = get_config_data(config)

        # Run the web-server
        if config_data == True:
                run(host=bind_ip, port=bind_port)

if __name__ == '__main__':
    main()</pre><p></p>
<p>Test server configuration file: test-server.conf</p><pre class="crayon-plain-tag"># Sample configuration file in YAML format for test-server.py

server:
    bind_ip: 0.0.0.0
    bind_port: 8080

configuration_variable: true</pre><p></p>
<p>Manual execution of the server code will looks like this:</p><pre class="crayon-plain-tag">ubuntu@ip-10-67-161-137:~/test-server$ ./test-server.py -c test-server.conf
Bottle v0.12.0 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.

94.155.194.28 - - [23/Jun/2014 12:34:39] "GET / HTTP/1.1" 200 126
^C
ubuntu@ip-10-67-161-137:~/test-server$</pre><p></p>
<p style="text-align: justify;">When the controlling terminal is lost the server will be terminated. Obviously, this is neither acceptable, nor desirable behavior.</p>
<p>With SupervisorD (<strong>sudo aptitude install supervisor</strong>) the service can be properly managed using simple configuration file.</p>
<p>Example SupervisorD configuration file: /etc/supervisor/conf.d/test-server.conf</p><pre class="crayon-plain-tag">[program:test-server]
command=/home/ubuntu/test-server/test-server.py -c /home/ubuntu/test-server/test-server.conf
user=ubuntu
redirect_stderr=true</pre><p></p>
<p>To start the service, execute:</p><pre class="crayon-plain-tag">ubuntu@ip-10-67-161-137:~$ sudo supervisorctl start test-server
test-server: started
ubuntu@ip-10-67-161-137:~$</pre><p></p>
<p>To verify successful service start:</p><pre class="crayon-plain-tag">ubuntu@ip-10-67-161-137:~$ ps ax
. . . 
 4353 ?        Ss     0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
 4355 ?        S      0:00 python /home/ubuntu/test-server/test-server.py -c /home/ubuntu/test-server/test-server.conf
. . .
ubuntu@ip-10-67-161-137:~$</pre><p></p>
<p>SupervisorD will redirect stdout and stderr to properly named log files:</p><pre class="crayon-plain-tag">ubuntu@ip-10-67-161-137:~$ sudo cat /var/log/supervisor/test-server-stdout---supervisor-ssaGXP.log
Bottle v0.12.0 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.

94.155.194.28 - - [23/Jun/2014 13:31:19] "GET / HTTP/1.1" 200 126
ubuntu@ip-10-67-161-137:~$</pre><p>Those log files can be integrated with a centralized logging architecture or processed for error / anomaly detection separately.</p>
<p>SupervisorD also comes with handy, command-line control utility, <strong>supervisorctl</strong>:</p><pre class="crayon-plain-tag">ubuntu@ip-10-67-161-137:~$ sudo supervisorctl status test-server
test-server                      RUNNING    pid 4355, uptime 0:11:40
ubuntu@ip-10-67-161-137:~$</pre><p></p>
<p style="text-align: justify;">With some additional effort SupervisorD can react to various types of events (<a href="http://supervisord.org/events.html">http://supervisord.org/events.html</a>) which bring it one step closer to full process monitoring &#038; notification solution!</p>
<p>References</p>
<ul>
<li>SupervisorD Homepage: <a href="http://supervisord.org">http://supervisord.org</a></li>
<li>Bottle Web Framework: <a href="http://bottlepy.org/docs/dev/index.html">http://bottlepy.org/docs/dev/index.html</a></li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/">Small Tip: AWS announces T2 instance types</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/devops-shell-script-template/">DevOps Shell Script Template</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/06/small-tip-how-to-run-non-deamon-ized-processes-in-the-background-with-supervisord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Tip: EBS volume allocation time is linear to the size and unrelated to the instance type</title>
		<link>http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/</link>
		<comments>http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/#comments</comments>
		<pubDate>Mon, 23 Jun 2014 07:20:27 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[allocation time]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[EBS]]></category>
		<category><![CDATA[volume]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=66</guid>
		<description><![CDATA[Due to fluctuations in startup times for instances in AWS, it was speculated that allocation of EBS volumes may be the reason for the nondeterministic behavior. This led to an interesting discussion and finally to a small test to determine how volume size of an EBS volume allocated with an instance affect its startup time. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Due to fluctuations in startup times for instances in AWS, it was speculated that allocation of EBS volumes may be the reason for the nondeterministic behavior. This led to an interesting discussion and finally to a small test to determine how volume size of an EBS volume allocated with an instance affect its startup time.</p>
<p style="text-align: justify;">To gather some results the following script was created: <a href="https://s3-us-west-2.amazonaws.com/blog.xi-group.com/aws-ebs-allocation-times/aws-single.sh">https://s3-us-west-2.amazonaws.com/blog.xi-group.com/aws-ebs-allocation-times/aws-single.sh</a>. It will create one instance of the specified type with <strong>N</strong> GB of Root EBS volume, wait for the instance to properly start and then terminate it. The time for the whole process is measured (e.g. full &#8216;time-to-service&#8217;).</p>
<p>The script was run multiple times for each instance type and EBS volume size. Results are presented in the following table:</p>
<table  width="100%" class="table table-bordered table-striped">
<tr>
<th></th>
<th>t1.micro</th>
<th>c1.xlarge</th>
<th>m3.xlarge</th>
<th>m3.2xlarge</th>
<th>m2.4xlarge</th>
</tr>
<tr>
<td>20 GB</td>
<td>~ 1m 50s</td>
<td>~ 1m 45s</td>
<td>~ 1m 50s</td>
<td>~ 2m 15s</td>
<td>~ 3m 20s</td>
</tr>
<tr>
<td>50 GB</td>
<td>~ 2m 45s</td>
<td>~ 2m 40s</td>
<td>~ 2m 50s</td>
<td>~ 2m 40s</td>
<td>~ 3m 10s</td>
</tr>
<tr>
<td>100 GB</td>
<td>~ 3m 45s</td>
<td>~ 3m 30s</td>
<td>~ 3m 30s</td>
<td>~ 4m 20s</td>
<td>~ 5m 00s</td>
</tr>
<tr>
<td>200 GB</td>
<td>~ 6m 00s</td>
<td>~ 6m 10s</td>
<td>~ 9m 00s</td>
<td>~ 5m 45s</td>
<td>~ 7m 30s</td>
</tr>
</table>
<p>Graphical representation:<br />
<a href="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-23-at-9.49.13-AM.png"><img src="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-23-at-9.49.13-AM.png" alt="Screen Shot 2014-06-23 at 9.49.13 AM" width="968" height="600" class="alignnone size-full wp-image-167 img-thumbnail img-responsive" /></a></p>
<p style="text-align: justify;">As shown, instance start time grows linearly with the size of the EBS Root volume. Moral of the story:</p>
<p><center><strong>The more EBS storage you allocate at boot, the slower the instance will start!</strong></center></p>
<p style="text-align: justify;">NOTE: The whole procedure is reasonably time consuming if you gather multiple data points (in this case, for each instance type / volume size the script was run 3 times and the average value is shown). It will cost money, since all EC2 allocations will be charged for at least an hour. The script, provided here is &#8216;AS IS&#8217; and can be used as reference. Be sure to understand it and properly modify it before running it!</p>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/02/how-to-deploy-single-node-hadoop-setup-in-aws/">How to deploy single-node Hadoop setup in AWS</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/userdata-teplate-for-ubuntu-14-04-ec2-instances-in-aws/">UserData Template for Ubuntu 14.04 EC2 Instances in AWS</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Tip: Partitioning disk drives from within UserData script</title>
		<link>http://blog.xi-group.com/2014/06/small-tip-partitioning-disk-drives-from-within-userdata-script/</link>
		<comments>http://blog.xi-group.com/2014/06/small-tip-partitioning-disk-drives-from-within-userdata-script/#comments</comments>
		<pubDate>Wed, 11 Jun 2014 08:51:43 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[fdisk]]></category>
		<category><![CDATA[instance store]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[partitioning]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=47</guid>
		<description><![CDATA[In a recent upgrade to the new generation of instances we faced an interesting conundrum. Previous generations came with quite the amount of disk spaces. Usually instance stores are mounted on /mnt. And it is all good and working. The best part, one can leave the default settings for the first instance store and do [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">In a recent upgrade to the new generation of instances we faced an interesting conundrum. Previous generations came with quite the amount of disk spaces. Usually instance stores are mounted on /mnt. And it is all good and working. The best part, one can leave the default settings for the first instance store and do anything with the second. And &#8220;anything&#8221; translated to enabling swap on the second instance store. With the new instance types, however the number (and the size) of the instance stores is reduced. It is SSD, but m2.4xlarge comes with 2 x 840 GB, while the equivalent in the last generation, r3.2xlarge, comes with only one 160 GB instance store partition.</p>
<p>Not a problem, just a challenge!</p>
<p style="text-align: justify;">We prefer to use UserData for automatic server setup. After some attempts it became clear that partitioning disks from a shell script is not exactly trivial tasks under Linux in AWS. BSD-based operating systems come with <strong>disklabel</strong> and <strong>fdisk</strong> and those will do the job. Linux comes with <strong>fdisk</strong> by default and that tool is somewhat limited &#8230;</p>
<p style="text-align: justify;">Luckily, <strong>fdisk</strong> reads data from <strong>stdin</strong> so quick-and-dirty solution quickly emerged!</p>
<p style="text-align: justify;">The following UserData is used to modify the instance store of a m3.large instance, creating 8GB swap partition and re-mounting the rest as /mnt:</p>
<p></p><pre class="crayon-plain-tag">#!/bin/bash -ex

# Mark execution start
echo "STARTING" &gt; /root/user_data_run

# Unmount /dev/xvdb if already mounted
umount -f /dev/xvdb

# Partition the disk (8GB for SWAP / Rest for /mnt)
(echo n; echo p; echo 1; echo 2048; echo +8G; echo t; echo 82; echo n; echo p; echo 2; echo; echo; echo w) | fdisk /dev/xvdb

# Make and enable swap
mkswap /dev/xvdb1
swapon /dev/xvdb1

# Make /mnt partition and mount it
mkfs.ext4 /dev/xvdb2
mount /dev/xvdb2 /mnt
sed -i s/xvdb/xvdb2/g /etc/fstab

# Mark execution end
echo "DONE" &gt; /root/user_data_run</pre><p>Execute it with AWS CLI (Using stock Ubuntu 14.04 HVM AMI):</p><pre class="crayon-plain-tag">aws ec2 run-instances --image-id ami-1d8c9574 --count 1 --instance-type m3.large --key-name test-key --security-groups test-sg --user-data file://userdata.sh</pre><p>The result:</p><pre class="crayon-plain-tag">:~&gt; ssh ubuntu@ec2-54-197-66-121.compute-1.amazonaws.com "df -h"
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  765M  6.6G  11% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.7G   12K  3.7G   1% /dev
tmpfs           749M  336K  748M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.7G     0  3.7G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/xvdb2       22G   44M   21G   1% /mnt
:~&gt; ssh ubuntu@ec2-54-197-66-121.compute-1.amazonaws.com "free -h"
             total       used       free     shared    buffers     cached
Mem:          7.3G       276M       7.0G       352K       8.6M       177M
-/+ buffers/cache:        90M       7.2G
Swap:         8.0G         0B       8.0G
:~&gt;</pre><p></p>
<p style="text-align: justify;">There it is, 8GB swap partition (/dev/xvdb1) and the rest (/dev/xvdb2) mounted as /mnt. Note that /etc/fstab is also updated to account for the device name change!</p>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-use-aws-cli-to-create-instances-with-bigger-root-partitions/">Small Tip: Use AWS CLI to create instances with bigger root partitions</a></li>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/">Small Tip: AWS announces T2 instance types</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/06/small-tip-partitioning-disk-drives-from-within-userdata-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Small Tip: Use AWS CLI to create instances with bigger root partitions</title>
		<link>http://blog.xi-group.com/2014/06/small-tip-use-aws-cli-to-create-instances-with-bigger-root-partitions/</link>
		<comments>http://blog.xi-group.com/2014/06/small-tip-use-aws-cli-to-create-instances-with-bigger-root-partitions/#comments</comments>
		<pubDate>Thu, 05 Jun 2014 13:43:44 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[bigger]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[root partition]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=42</guid>
		<description><![CDATA[On multiple occasions we had to deal with instances running out of disk space for the root file system. AWS provides you reasonable amount of storage, but most operating systems without additional settings will just use the root partition for everything. Which is usually sub-optimal, since default root partition is 8GB and you may have [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">On multiple occasions we had to deal with instances running out of disk space for the root file system. AWS provides you reasonable amount of storage, but most operating systems without additional settings will just use the root partition for everything. Which is usually sub-optimal, since default root partition is 8GB and you may have 160GB SSD just mounted on /mnt and never used. With the AWS Web interface, it is easy. Just create bigger root partitions for the instances. However, the AWS CLI solution is not obvious and somewhat hard to find. If you need to regularly start instances with non-standard root partitions, manual approach is not maintainable.</p>
<p style="text-align: justify;">There is a solution. It lies in the <strong>&#8211;block-device-mappings</strong> parameter that can be passed to <strong>aws ec2 run-instances</strong> command.</p>
<p style="text-align: justify;">According to the documentation this parameter uses JSON-encoded block device mapping to adjust different parameter of the instances that are being started. There is a simple example that shows how to attach additional volume:</p>
<p></p><pre class="crayon-plain-tag">--block-device-mappings "[{\"DeviceName\": \"/dev/sdh\",\"Ebs\":{\"VolumeSize\":100}}]"</pre><p></p>
<p style="text-align: justify;">This will attach additional 100GB EBS volume as /dev/sdb. The key part: <strong>&#8220;Ebs&#8221;: {&#8220;VolumeSize&#8221;: 100}</strong></p>
<p style="text-align: justify;">By specifying your instance&#8217;s root partition you can adjust the root partition size. Following is an example how to create Amazon Linux instance running on t1.micro with 32GB root partition:</p>
<p></p><pre class="crayon-plain-tag">aws ec2 run-instances --image-id ami-fb8e9292 --count 1 --instance-type t1.micro --key-name test-key --security-groups test-sg --block-device-mapping "[ { \"DeviceName\": \"/dev/sda1\", \"Ebs\": { \"VolumeSize\": 32 } } ]"</pre><p>The resulting volume details show the requested size and the fact that this is indeed root partition:<br />
<a href="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-05-at-4.30.31-PM.png"><img class="alignnone size-full wp-image-53 img-thumbnail img-responsive" src="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-05-at-4.30.31-PM.png" alt="Screen Shot 2014-06-05 at 4.30.31 PM" width="1474" height="117" /></a></p>
<p>Confirming, that the instance is operating on the proper volume:</p><pre class="crayon-plain-tag">:~&gt; ssh ec2-user@ec2-50-16-57-145.compute-1.amazonaws.com "df -h"
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       32G  1.1G   31G   4% /
devtmpfs        282M   12K  282M   1% /dev
tmpfs           297M     0  297M   0% /dev/shm
:~&gt;</pre><p></p>
<p style="text-align: justify;">There is enough space in the root partition now. Note: This is EBS volume, additional charges will apply!</p>
<p style="text-align: justify;">References</p>
<ul>
<li>aws ec2 run-instances help</li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/">Small Tip: EBS volume allocation time is linear to the size and unrelated to the instance type</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-partitioning-disk-drives-from-within-userdata-script/">Small Tip: Partitioning disk drives from within UserData script</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/06/small-tip-use-aws-cli-to-create-instances-with-bigger-root-partitions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Small Tip: AWS tools are case sensitive, AWS Web Interface is not</title>
		<link>http://blog.xi-group.com/2014/06/small-tip-aws-tools-are-case-sensitive-aws-web-interface-is-not/</link>
		<comments>http://blog.xi-group.com/2014/06/small-tip-aws-tools-are-case-sensitive-aws-web-interface-is-not/#comments</comments>
		<pubDate>Mon, 02 Jun 2014 07:42:26 +0000</pubDate>
		<dc:creator><![CDATA[Ivo Vachkov]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Small Tip]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[case sensitive]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[instances]]></category>
		<category><![CDATA[names]]></category>
		<category><![CDATA[tags]]></category>

		<guid isPermaLink="false">http://blog.xi-group.com/?p=27</guid>
		<description><![CDATA[In a recent investigation, we found an interesting difference between AWS command line tools (based on Boto library) and AWS Web interface. Apparently, command line tools are case sensitive while AWS Web interface is not. This can potentially lead to automated scaling issues. Tooling may not get &#8216;the full picture&#8217; if tags are mixed-case and [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">In a recent investigation, we found an interesting difference between AWS command line tools (based on Boto library) and AWS Web interface. Apparently, command line tools are case sensitive while AWS Web interface is not. This can potentially lead to automated scaling issues. Tooling may not get &#8216;the full picture&#8217; if tags are mixed-case and software does not account for that.</p>
<p style="text-align: justify;">Lets start with simple example &#8230;</p>
<p style="text-align: justify;">We have the following EC2 instances in AWS Account:<br />
<a href="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.04-AM.png"><img class="alignnone size-full wp-image-28 img-thumbnail img-responsive" src="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.04-AM.png" alt="Screen Shot 2014-06-02 at 10.03.04 AM" width="1385" height="300" /></a></p>
<p style="text-align: justify;">Search for the term &#8216;TEST-NODE&#8217; yields the same results as searching for &#8216;test-node&#8217; in the AWS Web interface.</p>
<p style="text-align: justify;">Searching for &#8216;TEST-NODE':<br />
<a href="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.27-AM.png"><img class="alignnone size-full wp-image-29 img-thumbnail img-responsive" src="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.27-AM.png" alt="Screen Shot 2014-06-02 at 10.03.27 AM" width="1385" height="270" /></a></p>
<p>Searching for &#8216;test-node':<br />
<a href="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.49-AM.png"><img class="alignnone size-full wp-image-30 img-thumbnail img-responsive" src="http://blog.xi-group.com/wp-content/uploads/2014/06/Screen-Shot-2014-06-02-at-10.03.49-AM.png" alt="Screen Shot 2014-06-02 at 10.03.49 AM" width="1385" height="270" /></a></p>
<p style="text-align: justify;">&#8230; it behaves the same way. It is case-insensitive.</p>
<p style="text-align: justify;">However, commend line tools will produce totally different output.</p>
<p style="text-align: justify;">Searching for &#8216;TEST-NODE':</p>
<p></p><pre class="crayon-plain-tag">:~&gt; aws ec2 describe-instances --filters "Name=tag:Name,Values=*TEST-NODE*" --query 'Reservations[*].Instances[*].Tags[?Key==`Name`].Value[]' --output text
TEST-NODE-1
:~&gt;</pre><p>Searching for &#8216;test-node':</p><pre class="crayon-plain-tag">:~&gt; aws ec2 describe-instances --filters "Name=tag:Name,Values=*test-node*" --query 'Reservations[*].Instances[*].Tags[?Key==`Name`].Value[]' --output text
test-node-5
:~&gt;</pre><p></p>
<p style="text-align: justify;">Python + Boto shows the same behavior (not surprisingly, AWS CLI uses Boto):</p>
<p style="text-align: justify;">Searching for &#8216;TEST-NODE':</p>
<p></p><pre class="crayon-plain-tag">:~&gt; python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import boto
&gt;&gt;&gt; import boto.ec2
&gt;&gt;&gt; conn = boto.ec2.connect_to_region('us-east-1', aws_access_key_id='', aws_secret_access_key='')
&gt;&gt;&gt; reservations = conn.get_all_instances(filters = {'instance-state-name' : 'running', "tag:Name": "*" + 'TEST-NODE' + "*"})
&gt;&gt;&gt; for r in reservations:
...     for i in r.instances:
...             print i.tags['Name']
...
TEST-NODE-1
&gt;&gt;&gt; ^D
:~&gt;</pre><p>Searching for &#8216;test-node':</p><pre class="crayon-plain-tag">:~&gt; python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import boto
&gt;&gt;&gt; import boto.ec2
&gt;&gt;&gt; conn = boto.ec2.connect_to_region('us-east-1', aws_access_key_id='', aws_secret_access_key='')
&gt;&gt;&gt; reservations = conn.get_all_instances(filters = {'instance-state-name' : 'running', "tag:Name": "*" + 'test-node' + "*"})
&gt;&gt;&gt; for r in reservations:
...     for i in r.instances:
...             print i.tags['Name']
...
test-node-5
&gt;&gt;&gt; ^D
:~&gt;</pre><p></p>
<p style="text-align: justify;">Moral of the story: <strong>ALWAYS VERIFY/ENFORCE THAT DATA IS PROPERLY FORMATTED!</strong></p>
<p style="text-align: justify;">There are multiple possible solutions to this issue. With the cost of few extra cycles one can make sure proper comparison is implemented:</p>
<p></p><pre class="crayon-plain-tag">:~&gt; python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import boto
&gt;&gt;&gt; import boto.ec2
&gt;&gt;&gt; conn = boto.ec2.connect_to_region('us-east-1', aws_access_key_id='', aws_secret_access_key='')
&gt;&gt;&gt; reservations = conn.get_all_instances(filters = {'instance-state-name' : 'running'})
&gt;&gt;&gt; for r in reservations:
...     for i in r.instances:
...             if 'test-node'.upper() in i.tags['Name'].upper():
...                     print i.tags['Name']
...
TEST-NODE-1
TEST-Node-2
TEST-node-3
test-node-5
&gt;&gt;&gt; ^D
:~&gt;</pre><p>References</p>
<ul>
<li><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html" target="_blank">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html</a></li>
</ul>
<div class="rpbt_shortcode">
<h3>Related Posts</h3>
<ul>
					
			<li><a href="http://blog.xi-group.com/2015/01/small-tip-how-to-use-aws-cli-filter-parameter/">Small Tip: How to use AWS CLI &#8216;&#8211;filter&#8217; parameter</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/11/small-tip-how-to-use-block-device-mappings-to-manage-instance-volumes-with-aws-cli/">Small Tip: How to use &#8211;block-device-mappings to manage instance volumes with AWS CLI</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-how-to-use-aws-cli-to-start-spot-instances-with-userdata/">Small Tip: How to use AWS CLI to start Spot instances with UserData</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/07/small-tip-aws-announces-t2-instance-types/">Small Tip: AWS announces T2 instance types</a></li>
					
			<li><a href="http://blog.xi-group.com/2014/06/small-tip-ebs-volume-allocation-time-is-linear-to-the-size-and-unrelated-to-the-instance-type/">Small Tip: EBS volume allocation time is linear to the size and unrelated to the instance type</a></li>
			</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xi-group.com/2014/06/small-tip-aws-tools-are-case-sensitive-aws-web-interface-is-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
