<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PeteBuilt]]></title><description><![CDATA[My journey in Technology, Business and Body Building. ]]></description><link>http://petebuilt.azurewebsites.net/</link><generator>Ghost v0.4.0</generator><lastBuildDate>Wed, 06 May 2026 11:35:13 GMT</lastBuildDate><atom:link href="http://petebuilt.azurewebsites.net/rss/" rel="self" type="application/rss+xml"/><author><![CDATA[Pete Turnbull]]></author><ttl>60</ttl><item><title><![CDATA[Building a UAT environment in Microsoft Azure (Part 2)]]></title><description><![CDATA[<p>As a follow-up to Part 1 of Creating a UAT Environment in Microsoft Azure, I will now walk through why a Microsoft Azure Cloud Service is important and how to 'finally' provision a Virtual Machine.</p>

<p><strong>Cloud Service</strong></p>

<p>The Cloud Service is an interesting component of the Microsoft Azure Service model. </p>

<p>Microsoft Azure Virtual Machines are built on the same service model that web and worker roles use, with some additional enhancements supporting persistent storage and a single instance per role.</p>

<p>The Cloud Service acts as a container of virtual machines and allows you to access your virtual machines via a URL address, setups a way for your virtual machines to communicate with each other, enable load-balancing and maintain high-availability (if required). </p>

<p>When a Cloud Service is acting as a container for a virtual machine/s you are not charged for that Cloud Service. For the UAT Environment, I created a Cloud Service which was used to group together the 3 virtual machines for the system running in the UAT environment. </p>

<p>To create a Cloud Service in Microsoft Azure:</p>

<ol>
<li><p>Select Cloud Services in the Microsoft Azure Management Portal and the + New located in the bottom left hand corner to bring up a menu of the Cloud Services available to create. Select Computer, Cloud Service and Custom Create</p></li>
<li><p>Enter a URL Name for the Cloud Service (i.e. clipsal.cloudapp.net) to create an accessible endpoint for your virtual machines</p></li>
<li><p>Select the Affinity Group you previously created</p></li>
<li>Click the Checkmark to provision your Cloud Service</li>
</ol>

<p>The Deploy a cloud service package checkbox is used for web and worker roles and is not required when creating a Cloud Service for virtual machines.</p>

<p><strong>Virtual Machines</strong></p>

<p>Now we are getting somewhere! </p>

<p>We have an Affinity Group, a Virtual network, a Cloud Service and have provisioned a Storage Account for our BLOBS. The next step is to provision our virtual machines. </p>

<p>To kick this off we need to decide what size virtual machine is required. The options are listed in t-shirt sizes (XS, S, M, L or XL) with each size providing access to a virtual machine with a different number of virtual cores and RAM as well as different number of VHD's that can be attached to a virtual machine. </p>

<p>This number of VHD's is important as it impacts the IOPS (i.e. that is the throughput in Mbps) available to the server.</p>

<p>Each virtual machine provisioned is stored as a BLOB within the VHD Container of the Storage Account. Each individual VHD (with a long name such as storage account name-server-2014-01-18.vhd) contains your virtual machine operating system disk and depending upon the image template you selected from the Gallery, the software as well (i.e. SQL Server). </p>

<p>When you remote into a virtual machine you will see a C drive and a D drive. The C drive is persistent storage from your VHD file, the D drive is volatile storage which does not use a Windows Azure Storage Account and is the physical disk within the rack your virtual machine is running off. </p>

<p>Microsoft provide access to the D drive without an additional charge to act as a temporary staging area. Files that need persistent storage (i.e. a MDF or LDF file from SQL Server)should not be stored on the D drive. Windows Azure by default will use the D drive for the operating systems paging file.</p>

<p>For the UAT Environment, 1 x Medium (2 x 1.6 GHz CPU, 3.5GB RAM) to 1 x Large (4 x 1.6 GHz CPU, 7GB RAM) virtual machines were selected for the Application and Agent Servers running Windows Server 2008 R2 SP1. A Medium (2 x 1.6 GHz CPU, 3.5GB RAM) was selected for the SQL Server running SQL Server 2008 R2 SP2 Standard. </p>

<p>With the total size of the two client databases exceeding 80GB and the databases expected to exponentially grow with the upcoming introduction of the next release, an additional 160GB of storage was provisioned and attached as the F drive to house the MDF and LDF database files. All virtual machines were provisioned in the Clients Cloud Service using the clients Affinity Group.</p>

<p>To create a virtual machine in Windows Azure:</p>

<ol>
<li><p>Select Virtual Machines Services in the Windows Azure Management Portal and the + New located in the bottom left hand corner to bring up a menu of the virtual machines you can create. Select Computer, Virtual Machine and From Gallery</p></li>
<li><p>Select the type of virtual machine you require (i.e. Windows Server 2012 R2 Datacentre). Please note Microsoft and another vendor images are also available. You also have the option of uploading you own VHD or image and making it available in the Gallery (this will be described in a future post)</p></li>
<li><p>Enter a Name for the virtual machine</p></li>
<li><p>Select the Size of the virtual machine</p></li>
<li><p>Enter a user name and password for the administrator account. Administrator is a reserved account within Windows Azure therefore requiring you to enter an alternative name for the administrator account</p></li>
<li><p>Select the Cloud Service and Affinity Group you previously created as well as the Virtual Network you plan to use</p></li>
<li><p>Select the Storage Account you previously created</p></li>
<li><p>Update the end-points for accessing the virtual machine via Remote Desktop and PowerShell and any other end-points you require (including your web-services) via the Windows Azure Management Portal. Please note that the Public Ports for virtual machines within the same Cloud Service cannot be the same</p></li>
<li><p>Click the Checkmark to provision your virtual machine. Provisioning can take up to 10 minutes to complete depending upon the image you selected from the Galley</p></li>
</ol>

<p><strong>Storage (Part 2)</strong></p>

<p>As mentioned earlier, I provisioned additional storage for the large databases used by the Client. To do this, I selected the SQL Server virtual machine and clicked Attach and selected Attach empty disk option at the bottom of the Windows Azure Management Portal. </p>

<p>As this virtual machine is already linked to the Clients Storage Account, all that was required was the GB size for the disk. I left the Host Caching preferences as None. Once provisioned, this disk is available to the SQL Server and can be formatted and bought online via the Windows Server Management console. You can see this VHD file (with the same name as your Server) in Windows Azure Management Portal if you select Storage, click your Storage Account and select Containers. </p>

<p>Please note at this point, the resizing of VHD files via the Windows Azure Management Portal is not supported. This is planned to change with the introduction of the VHDx file format.</p>]]></description><link>http://petebuilt.azurewebsites.net/building-a-uat-environment-in-windows-azure-part-2/</link><guid isPermaLink="false">9a3c7c0d-6fc8-4530-9844-631439db3e0f</guid><dc:creator><![CDATA[Pete Turnbull]]></dc:creator><pubDate>Thu, 17 Apr 2014 10:36:51 GMT</pubDate></item><item><title><![CDATA[Building a UAT environment in Microsoft Azure]]></title><description><![CDATA[<p>I was recently asked by one our long standing clients, to provide options for the introduction of a new UAT environment. The criteria they specified included being available in 4 days, scalable depending upon their testing cycle and accessible to the Solentive engineering and support teams as well as their own support team. With this criteria in place we selected Microsoft Azure.</p>

<p>As a slight deviation, the options for provisioning IaaS services within Windows Azure include using the <a href='http://manage.windowsazure.com/' >Microsoft Azure Management Portal</a> or the <a href='http://www.windowsazure.com/en-us/documentation/articles/install-configure-powershell/' #Install">Microsoft Azure PowerShell</a>. To get started you will need a Microsoft Azure Account. If you have an MSDN Premium Account you are entitled to $110 worth of monthly credits with Microsoft Azure, allowing you to run a number of Azure services without being billed (great for prototying!). To see more details of the Microsoft Azure Benefits for MSDN subscribers checkout this <a href='http://www.windowsazure.com/en-us/pricing/member-offers/msdn-benefits/' >link</a>.</p>

<p><strong>The UAT Environment</strong></p>

<p>Building the UAT environment required four Microsoft Azure Services. In the first part of this post, I walk through the creation of an Affinity Group and setting up a Virtual Network as well as discuss the first steps required to provision a Storage Account to house the Virtual Hard Disks (VHD). In a subsequent post I will discuss the provisioning of a virtual machine and drill into why a Cloud Service is required.</p>

<p>The Microsoft Azure Management Portal makes it very easy to quickly provision a Virtual Network, Storage Accounts and Virtual Machines via the 'Quick Create' option. A drawback of this options is that you lose some configuration flexibility and are locked into a 'hard-to-manage' default naming conventions for each service. With this in mind, I approached the creation of the UAT environment by selecting to configure each service (where possible) in the following sequence.</p>

<p><strong>Affinity Group</strong></p>

<p>An Affinity Group allows you to physically group together your Microsoft Azure Services to optimise their performance. </p>

<p>This is achieved by setting all the services to a specific Affinity Group, enabling the Microsoft Azure Fabric Controller to provision and keep specific services together and close to one another. This means services in the same Affinity Group are located in the same data centre (i.e. South East Asia), the same individual Container within the data centre and potentially the same cluster and rack. </p>

<p>Without an Affinity Group your services would be distributed throughout the global Microsoft Azure network which obviously impacts latency and subsequently performance.</p>

<p>An Affinity Group is also a prerequisite for creating a Virtual Network. For the UAT Environment I created an Affinity Group by selecting Settings (from the bottom left hand corner of the Microsoft Azure Management Portal) and then Affinity Groups at the top of the page. On the Affinity Groups page select Add and then enter the name, description and select the region you would like the Affinity Group to reside. For the UAT Environment we selected South East Asia (located in Singapore).</p>

<p><strong>Virtual Network</strong></p>

<p>Creating a Virtual Network, allows you to setup a range of DHCP IP address using the CIDR standards. Without a Virtual Network, Microsoft Azure allocates your Virtual Machine an internal IP Address from a predefined range and utilises the Microsoft Azure DNS Server for IP address routing.</p>

<p>By creating your own Virtual Network you are able to specify your a range of persistent internal IP address and optionally use your own DNS server. For the UAT environment I created a Virtual Network using the 10.x.x.x/24 range allowing up to 254 IP addresses and selected the Microsoft Azure DNS Server as my default DNS Server. </p>

<p>To create a Virtual Network in Windows Azure</p>

<ol>
<li><p>Select Networks in the Microsoft Azure Management Portal and the + New located in the bottom left hand corner to bring up a menu of the Network Services, select Virtual Network and Custom Create.</p></li>
<li><p>Enter a name for your Virtual Network and select your recently created </p></li>
<li><p>Click the Next Arrow to select a DNS Server. This is optional and by not specifying a DNS server, you will automatically use the Microsoft Azure DNS Server</p></li>
</ol>

<p>The final screen is where it gets fun! This screen allows you to specify your Virtual Network Address Space. For the UAT Environment (consisting of a small number of Virtual Machines) I implemented a standard configuration with a primary address space using 10.x.x.x/16 with 2 subnets called FrontSubNet (10.x.y.x/24) and BackSubNet (10.x.z.x/24)</p>

<p>Click the Checkmark icon to create your Virtual Network.</p>

<p><strong>Storage (Part 1)</strong></p>

<p>At this point, many people jump straight into provisioning their virtual machines. Before doing this, I prefer to provision a Storage Account.</p>

<p>Storage in Microsoft Azure is more interesting than you would initially think. Storage Accounts are used to group together Containers with an individual Container holding multiple Binary Large Object Storage (BLOBS). BlOBS store multiple types of data including VHD's used for the operating system disk in your virtual machine as well as any VHDs (up to 1 Terabyte) you plan to attach to your Virtual Machine as an additional drive. </p>

<p>To provide additional flexibility (and to not have a crazy long winded name that Microsoft Azure creates if you provision a Storage Account at the same time you create a Virtual Machine) I created a Locally Redundant Storage Account to group together all the Containers to be used in the UAT environment. </p>

<p>As this was a UAT environment only, Locally Redundant storage replication was selected over Geo Redundant storage replication. The Storage Account was set to the previously created Affinity Group.  </p>

<ol>
<li><p>Select Storage in the Microsoft Azure Management Portal and the + New located in the bottom left hand corner to bring up a menu of the Data Services you can create. Select Storage and Quick Create</p></li>
<li><p>Enter a URL Name for the Storage Account (i.e. clientname.core.windows.net) to create an accessible endpoint for the Virtual Machines to locate the storage or to access the BLOB via the Storage API </p></li>
<li><p>Select the Affinity Group you previously created and the storage replication you would like to use. Locally Redundant Storage is cheaper than Geo Redundant Storage </p></li>
<li><p>Click the Create Storage Account Checkmark to provision your Storage. At this point your Storage Account will not have any Containers (these come later) </p></li>
</ol>

<p>With the Storage Account created, we can now move onto the main reason we are here - provisioning the Cloud Service and Virtual Machines (which I will take you through in part 2 of Building a UAT environment in Microsoft Azure in Windows Azure)</p>

<p>As a slight deviation, there are a range of 3rd party tools known as Storage Explorers to enumerate and transfer data from BLOBS within the Containers of your Storage Account. A slightly outdated list is available <a href='http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/17/windows-azure-storage-explorers.aspx' >here</a>. When you create a Storage Account, Microsoft Azure generates two 512-bit storage keys used for authentication when accessing the storage account. These keys will be required when using a 3rd party Storage Explorer tool.   </p>]]></description><link>http://petebuilt.azurewebsites.net/building-a-uat-environment-in-windows-azure/</link><guid isPermaLink="false">bf1127da-3baa-4ae1-8973-17b64a9c1458</guid><dc:creator><![CDATA[Pete Turnbull]]></dc:creator><pubDate>Sun, 23 Feb 2014 00:35:42 GMT</pubDate></item><item><title><![CDATA[Welcome to Ghost]]></title><description><![CDATA[<p>You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by signing in to the admin area at <code>&lt;your blog URL&gt;/ghost/</code>. When you arrive, you can select this post from a list on the left and see a preview of it on the right. Click the little pencil icon at the top of the preview to edit this post and read the next section!</p>

<h2 id="gettingstarted">Getting Started</h2>

<p>Ghost uses something called Markdown for writing. Essentially, it's a shorthand way to manage your post formatting as you write!</p>

<p>Writing in Markdown is really easy. In the left hand panel of Ghost, you simply write as you normally would. Where appropriate, you can use <em>shortcuts</em> to <strong>style</strong> your content. For example, a list:</p>

<ul>
<li>Item number one</li>
<li>Item number two
<ul><li>A nested item</li></ul></li>
<li>A final item</li>
</ul>

<p>or with numbers!</p>

<ol>
<li>Remember to buy some milk asd adasd asd asd asd asd asd asd asd asdasdasdasdasdasdasdasdasdasdasdasdasdasd  </li>
<li>Drink the milk  </li>
<li>Tweet that I remembered to buy the milk, and drank it</li>
</ol>

<h3 id="links">Links</h3>

<p>Want to link to a source? No problem. If you paste in url, like <a href='http://ghost.org/' >http://ghost.org</a> - it'll automatically be linked up. But if you want to customise your anchor text, you can do that too! Here's a link to <a href='http://ghost.org/' >the Ghost website</a>. Neat.</p>

<h3 id="whataboutimages">What about Images?</h3>

<p>Images work too! Already know the URL of the image you want to include in your article? Simply paste it in like this to make it show up:</p>

<p><img src='https://ghost.org/images/ghost.png'  alt="The Ghost Logo" /></p>

<p>Not sure which image you want to use yet? That's ok too. Leave yourself a descriptive placeholder and keep writing. Come back later and drag and drop the image in to upload:</p>

<h3 id="quoting">Quoting</h3>

<p>Sometimes a link isn't enough, you want to quote someone on what they've said. It was probably very wisdomous. Is wisdomous a word? Find out in a future release when we introduce spellcheck! For now - it's definitely a word.</p>

<blockquote>
  <p>Wisdomous - it's definitely a word.</p>
</blockquote>

<h3 id="workingwithcode">Working with Code</h3>

<p>Got a streak of geek? We've got you covered there, too. You can write inline <code>&lt;code&gt;</code> blocks really easily with back ticks. Want to show off something more comprehensive? 4 spaces of indentation gets you there.</p>

<pre><code>.awesome-thing {
    display: block;
    width: 100%;
}
</code></pre>

<h3 id="readyforabreak">Ready for a Break?</h3>

<p>Throw 3 or more dashes down on any new line and you've got yourself a fancy new divider. Aw yeah.</p>

<hr />

<h3 id="advancedusage">Advanced Usage</h3>

<p>There's one fantastic secret about Markdown. If you want, you can  write plain old HTML and it'll still work! Very flexible.</p>

<p><input type="text" placeholder="I'm an input field!" /></p>

<p>That should be enough to get you started. Have fun - and let us know what you think :)</p>]]></description><link>http://petebuilt.azurewebsites.net/welcome-to-ghost/</link><guid isPermaLink="false">75391a94-71fa-4b6b-ae4e-3c2371306e72</guid><category><![CDATA[Getting Started]]></category><dc:creator><![CDATA[Pete Turnbull]]></dc:creator><pubDate>Sat, 22 Feb 2014 12:27:41 GMT</pubDate></item></channel></rss>