<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Plankytronixx</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/plankytronixx/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/plankytronixx/feed.xml</link>
    <description />
    <lastBuildDate>Thu, 10 Mar 2016 16:53:45 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Exposing Servers/Services to the Internet when they are in an Azure VPN</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/exposing-serversservices-to-the-internet-when-they-are-in-an-azure-vpn</link>
      <pubDate>Fri, 18 Sep 2015 02:41:47 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/09/18/exposing-serversservices-to-the-internet-when-they-are-in-an-azure-vpn/</guid>
      <description><![CDATA[When you know this it’s really simple but I’ve actually had a couple of customers raise this same...]]></description>
      <content:encoded><![CDATA[<p>When you know this it’s really simple but I’ve actually had a couple of customers raise this same query this week. Coincidence?</p>  <p>They said – I’ve done some reading and I can see how you can set up a private network between your onw corporate network and Azure. I’ve also read how you can exposes services running on VMs to the Internet. But I can’t find anything on how you can link those 2 ideas together. It makes me think you might not actually be able to do it.</p>  <p>&#160;</p>  <p>Well – yes you can do it and hopefully this is the article you need to explain how it works…</p> <iframe height="315" allowfullscreen="allowfullscreen" src="https://www.youtube.com/embed/6y_BIPPVhB4" frameborder="0" width="420"></iframe> Planky == @plankytronixx  ]]></content:encoded>
    </item>
    <item>
      <title>Geek’s T-Shirt</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/geeks-t-shirt</link>
      <pubDate>Wed, 08 Jul 2015 04:35:57 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/07/08/geeks-t-shirt/</guid>
      <description><![CDATA[I really like the T-Shirt we use as swag at conferences for signing up to various programmes. This...]]></description>
      <content:encoded><![CDATA[<p>I really like the T-Shirt we use as swag at conferences for signing up to various programmes. This was a suggestion from a Twitter competition the Visual Studio team ran a little while ago. I’m sorry but I don’t know the name of the person whose design won…</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5531.image_66673B59.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5531.image_5F00_66673B59.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6866.image_thumb_077CC8A5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6866.image_5F00_thumb_5F00_077CC8A5.png" width="244" height="243" /></a> </p>  <p>It’s a bit of a generic T-shirt (budum tish! Well you were all thinking it…) but it’s one of those jokes that only works for a certain number of people. There was a great one that Oxford Computer Group did a few years ago. It looked a bit like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0488.image_5992069D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0488.image_5F00_5992069D.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6283.image_thumb_668E775F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6283.image_5F00_thumb_5F00_668E775F.png" width="244" height="226" /></a> </p>  <p>Worked well for anybody who was in to Lightweight Directory Access Protocol and knew about the LA Police Department…</p>  <p>I’ve been thinking of a few other designs.</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3034.image_35FAF9A7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3034.image_5F00_35FAF9A7.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0474.image_thumb_536FDB64.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0474.image_5F00_thumb_5F00_536FDB64.png" width="341" height="354" /></a> </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4150.image_0084C833.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4150.image_5F00_0084C833.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8272.image_thumb_1DF9A9F0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8272.image_5F00_thumb_5F00_1DF9A9F0.png" width="341" height="351" /></a> </p>  <p><font color="#800000">above: an oldie but goldie…</font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0211.image_54D68EE7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0211.image_5F00_54D68EE7.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5123.image_thumb_1D9007AC.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5123.image_5F00_thumb_5F00_1D9007AC.png" width="340" height="372" /></a> </p>  <p>Has anybody got any better ideas?</p>  <p>@plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>Warnings sent to customers when Azure is about to be updated</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/warnings-sent-to-customers-when-azure-is-about-to-be-updated</link>
      <pubDate>Fri, 29 May 2015 02:08:06 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/05/29/warnings-sent-to-customers-when-azure-is-about-to-be-updated/</guid>
      <description><![CDATA[I sometimes get customers asking me about the warnings they’ll get when updates are rolled out...]]></description>
      <content:encoded><![CDATA[<p>I sometimes get customers asking me about the warnings they’ll get when updates are rolled out across Azure. Well – at the bottom of this post is an example email sent to me. Notice the emphasis placed on:</p>  <ul>   <li>Putting multiple VMs in to availability sets</li>    <li>Creating multiple instances of each role in Cloud Services </li> </ul>  <p>I can’t remember exactly but Igal Figlin from Microsoft did some background research in to this and found that 40% (it might be higher I can’t remember exactly – you can <a href="https://channel9.msdn.com/Events/Build/2014/3-627">watch the video here</a>) of deployments are <strong>not</strong> in availability sets. Have a read of the email below and you’ll start to realise how much risk you are putting yourself to if you don’t use multiple VMs in availability sets.</p>  <p>When you put VMs in to availability sets they are also distributed across up to 5 update domains. When Microsoft updates Azure, they’ll walk from one update-domain to the next. You can see what they are saying in this email – they’ll leave 30 minutes between updating each update domain. Let’s say you have 2 machines in an availability set. They’ll be spread across 2 fault domains and 2 update domains. That means if an infrastructure fault occurs (like say power or a network segment), only one of your VMs will be affected. It also means if Microsoft has to do an update, it will take one of your machines out of the configuration at a time.</p>  <p>If you want to be super-cautious, you could protect against the scenario that while Microsoft is walking the update domains in your availability set, you also get an infrastructure failure – that could take out a further machine. The table below shows how.</p>  <table cellspacing="0" cellpadding="2" width="423" border="0"><tbody>     <tr>       <td valign="top" width="100">&#160;</td>        <td valign="top" width="114">Update Domain 0</td>        <td valign="top" width="104">Update Domain1</td>        <td valign="top" width="103">Update Domain 2</td>     </tr>      <tr>       <td valign="top" width="100">Fault Domain 0</td>        <td valign="top" width="114">Instance 0</td>        <td valign="top" width="104">&#160;</td>        <td valign="top" width="103">Instance 2</td>     </tr>      <tr>       <td valign="top" width="100">Fault Domain 1</td>        <td valign="top" width="114">&#160;</td>        <td valign="top" width="104">Instance 1</td>        <td valign="top" width="103">&#160;</td>     </tr>   </tbody></table>  <p>Imagine the update process had done the update on the instance in Update Domain 0, it had then walked on to Update Domain 1 and was in the middle of updating that instance. Instance 1 is now offline. At the same time a power failure occurs to the rack on Fault Domain 0. That would cause Instance 0 and instance 2 to also be taken offline. You’d now have an availability set with no running machines. You can counter this by adding a VM to the availability set. Because there can only ever be one Update Domain in an availability set undergoing an update – you are protected. Let’s say you are in the middle of updating one of the services yourself. Your update will be stalled, the Microsoft update will complete and then your update will continue. In other words updates are applied to an update domain synchronously. And if you are in the middle of updating one Update Domain, Microsoft won’t start simultaneously updating a different Update Domain. So the following table will remove all risk from simultaneous Update Domain and Fault Domain operations.</p>  <p>&#160;</p>  <table cellspacing="0" cellpadding="2" width="550" border="0"><tbody>     <tr>       <td valign="top" width="100">&#160;</td>        <td valign="top" width="111">Update Domain 0</td>        <td valign="top" width="117">Update Domain1</td>        <td valign="top" width="108">Update Domain 2</td>        <td valign="top" width="112">Update Domain 3</td>     </tr>      <tr>       <td valign="top" width="100">Fault Domain 0</td>        <td valign="top" width="111">Instance 0</td>        <td valign="top" width="117">&#160;</td>        <td valign="top" width="108">Instance 2</td>        <td valign="top" width="112">&#160;</td>     </tr>      <tr>       <td valign="top" width="100">Fault Domain 1</td>        <td valign="top" width="111">&#160;</td>        <td valign="top" width="117">Instance 1</td>        <td valign="top" width="108">&#160;</td>        <td valign="top" width="112">Instance 3</td>     </tr>   </tbody></table>  <p>The failure of any Fault Domain will take out 2 instances and a simultaneous update can take out only one Update Domain. This means a maximum of 3 instances can be offline because of simultaneous Update Domain/Fault Domain operations. That would leave you with one running instance.</p>  <p>You’d have to be very unlucky to get an infrastructure failure occur while an update is going on. The availability SLA takes the above scenarios in to consideration – you only have to have 2 instances in your availability sets to enjoy the uptime guarantee. If you are unlucky enough to suffer a double problem and the availability drops below the guarantee then Microsoft compensates you.</p>  <p>I made a <a href="http://blogs.msdn.com/b/plankytronixx/archive/2015/05/01/azure-exam-prep-fault-domains-and-update-domains.aspx">post about Update Domains and Fault Domains</a> a couple of weeks ago. Interesting stuff if you’re going to take the Azure Infrastructure exam.</p>  <p>&#160;</p>  <p>Anyway – here’s the email:</p>  <p>---- cut here -----</p>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td width="1">&#160;</td>        <td width="35">&#160;</td>        <td width="334">         <p>Upcoming maintenance will affect deployments of Azure Virtual Machines in availability sets and Cloud Services. </p>       </td>        <td width="50">&#160;</td>        <td valign="top" width="179">         <p><img border="0" alt="Azure" src="http://image.email.microsoftemail.com/lib/fe621570756503797d1c/m/1/Azure2014-InformativeV2_04.png" width="179" height="170" /></p>       </td>        <td width="1">&#160;</td>     </tr>   </tbody></table>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td width="1">&#160;</td>        <td width="35">&#160;</td>        <td valign="top" width="513">         <p>As part of our ongoing commitment to performance, reliability, and security, we sometimes perform maintenance operations in our Azure regions and datacenters. We want to notify you of upcoming maintenance operations that will impact Virtual Machines in an availability set and Cloud Services.            <br /><strong>Note:</strong> Currently, we’re only able to provide 2 days' advance notice for updates that impact Virtual Machines in availability sets and Cloud Services. We’re working to provide more advance notice in the future.             <br />The following are the planned start times for infrastructure-as-a-service (IaaS) and platform-as-a-service (PaaS) maintenance operations, provided in both Coordinated Universal Time (UTC) and United States Pacific Daylight Time (PDT). Impacted deployments are listed at the bottom of this email. </p>       </td>        <td width="50">&#160;</td>        <td width="1">&#160;</td>     </tr>   </tbody></table>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td width="1">&#160;</td>        <td width="35">&#160;</td>        <td valign="top" width="528">         <table cellspacing="0" cellpadding="0" border="0"><tbody>             <tr>               <td width="10">&#160;</td>                <td width="162">                 <p><strong>Region</strong></p>               </td>                <td width="10">&#160;</td>                <td width="163">                 <p><strong>PDT</strong></p>               </td>                <td valign="top" width="10">&#160;</td>                <td width="163">                 <p><strong>UTC</strong></p>               </td>                <td valign="top" width="10">&#160;</td>             </tr>              <tr>               <td width="10">&#160;</td>                <td width="162">                 <p>North Central US </p>               </td>                <td width="10">&#160;</td>                <td width="163">                 <p>08:00                   <br />Monday, June 1, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>                <td width="163">                 <p>15:00                   <br />Monday, June 1, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>             </tr>              <tr>               <td width="10">&#160;</td>                <td width="162">                 <p>North Europe </p>               </td>                <td width="10">&#160;</td>                <td width="163">                 <p>08:00                   <br />Tuesday, June 2, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>                <td width="163">                 <p>15:00                   <br />Tuesday, June 2, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>             </tr>              <tr>               <td width="10">&#160;</td>                <td width="162">                 <p>East US </p>               </td>                <td width="10">&#160;</td>                <td width="163">                 <p>08:00                   <br />Wednesday, June 3, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>                <td width="163">                 <p>15:00                   <br />Wednesday, June 3, 2015 </p>               </td>                <td valign="top" width="10">&#160;</td>             </tr>           </tbody></table>       </td>        <td width="35">&#160;</td>        <td width="1">&#160;</td>     </tr>   </tbody></table>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td width="1">&#160;</td>        <td width="35">&#160;</td>        <td valign="top" width="513">         <p><strong>Microsoft Azure Virtual Machines (IaaS)</strong></p>          <p>           <br />Maintenance operations are split between virtual machines (VMs) that are and are not in an availability set. This maintenance will impact VMs in an availability set. VM deployments referenced below will reboot during this maintenance operation, but temporary storage disk contents will be retained. <strong>We expect the update to finish within 48 hours of the start time.</strong>            <br /><strong>Note:</strong> If you have a single VM in an availability set, it will still be impacted by this maintenance operation. In addition, all VMs in the same availability set are not taken down at the same time—these VMs are spread across five update domains. Only VMs in the same update domain for the availability set may be rebooted at the same time, and there will be at least a 30-minute interval between processing each update domain. VMs that are in different availability sets may be taken down at the same time. For more information, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b15487658c3ab6584173aca179146e2e28dae5e3d35949fd02295368616bba87d">availability sets</a> documentation webpage. </p>          <p>           <br />If you’re not already, we recommend using <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b73a61fae1d2f3836de4fdb7345e29347111bf1668d0829de5c703088d6cb521c">availability sets</a> in your architecture to ensure higher availability of your service. You can read our multiple instances <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3bbd410a7a2d7ef6019bb4674a56cad72c88af39d3384d869966f2b8225224428a">service level agreement (SLA) commitment for Virtual Machines</a>. </p>          <p>           <br />To learn more about our planned maintenance, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b4d3863903b9835a6bbd2f68238150446b4efb4161a24b7688b1ee337f8370b14">Planned maintenance for Azure virtual machines</a> documentation webpage. If you have questions, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3ba43d0a39541d72392e20c10325af275ac1668f98bf279d036d9ce4c70fa89534">Azure Virtual Machines</a> forums. </p>          <p>           <br />To ensure higher availability, the maintenance is scheduled in <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b50403b31cdb0999f2b6b1a626334629a05eea1314209c8c1ed49cc50718eb587">region pairs</a>. To help determine whether the reboot you observed on your VM is due to a planned maintenance event, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b92a195184612a5921189b76f9b37dbe92ea843bba8d9eb9fd638c46ba2d372b4">Viewing VM Reboot Logs</a> blog post. </p>          <p>           <br /><strong>Microsoft Azure Cloud Services (PaaS)</strong></p>          <p>           <br />All Cloud Services running web and/or worker roles referenced below will experience downtime during this maintenance. Cloud Services with two or more role instances in different upgrade domains will have external connectivity at least 99.95 percent of the time. Please note that the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b83915023daef49170e9a12d46f9c366d6a8fe525746e111f26a9869277eb61eb">SLA</a> guaranteeing service availability only applies to services that are deployed with more than one instance per role. Azure updates one upgrade domain at a time. For more information about distribution of roles across upgrade domains and the update process, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3b82a8ba12db63f9c5dbc44fe33d964379795bcb46cdb028b15498392b84ef7238">Update an Azure Service</a> webpage. If you have questions, please visit the <a href="http://click.email.microsoftemail.com/?qs=c6da0aafcfce7c3bf197484d7d10fe5267cb03414b328f50b8d628977a3398c1fc647b572e6c7ef8">Azure Cloud Services</a> forums. </p>          <p>           <br />Please note that email addresses provided for any of the following account roles also received this communication: account and service administrators, and co-administrators. </p>          <p>           <br />Thank you,             <br />Your Azure Team </p>       </td>        <td width="50">&#160;</td>        <td width="1">&#160;</td>     </tr>   </tbody></table>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td width="1">&#160;</td>        <td width="35">&#160;</td>        <td valign="top">         <table cellspacing="0" cellpadding="0" border="0"><tbody>             <tr>               <td valign="top" width="513">                 <p>Account Information</p>               </td>             </tr>              <tr>               <td>                 <p><strong>Subscription ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX </strong></p>               </td>             </tr>              <tr>               <td>                 <p><strong>Cloud Services Name(s): XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX</strong></p>               </td>             </tr>           </tbody></table>       </td>        <td width="50">&#160;</td>        <td width="1">&#160;</td>     </tr>   </tbody></table>  <p></p>  <p>Have fun – Planky == @plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure Web Sites/Web Apps and SSL</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/azure-web-sitesweb-apps-and-ssl</link>
      <pubDate>Fri, 22 May 2015 00:53:00 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/05/22/azure-web-sitesweb-apps-and-ssl/</guid>
      <description><![CDATA[I just had a rash of questions about SSL and Azure Web SItes/Web Apps (just for clarity, Azure Web...]]></description>
      <content:encoded><![CDATA[<p>I just had a rash of questions about SSL and Azure Web SItes/Web Apps (just for clarity, Azure Web SItes was renamed to Azure Web Apps a few weeks ago). I&rsquo;ve been looking for an article or post to send people to and am quite amazed at the lack of info. Yes, there are plenty of posts and articles but you have to read quite a few of them in the right order if you want to fill in the blanks. I aim to address all the questions you might ask in this post.</p>
<p>First &ndash; I&rsquo;d recommend you read my post on <a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/28/crypto-primer-how-does-ssl-work.aspx">how SSL actually works</a> first. You might then find, you don&rsquo;t know enough about the relationships between keys, certificates and signatures, so I&rsquo;d recommend you watch my <a href="http://blogs.msdn.com/b/plankytronixx/archive/2014/03/21/10425303.aspx">crypto primer</a> video.</p>
<p>There is a video of the whole article here...</p>
<p>&nbsp;</p>
<p><iframe src="https://channel9.msdn.com/Blogs/Plankytronixx/Azure-WebsitesWebApps-SSL-step-by-step-click-by-click-instructions/player" frameborder="0" width="640" height="360"></iframe></p>
<p>&nbsp;<span style="font-size: large;"><a href="https://channel9.msdn.com/Blogs/Plankytronixx/Azure-WebsitesWebApps-SSL-step-by-step-click-by-click-instructions">Watch the video full-size on Channel 9.</a></span></p>
<h2>SSL is already enabled on your Azure WebSite/WebApp</h2>
<p>Yes, that&rsquo;s right. Let&rsquo;s imagine you go to the portal and create an entirely naked website in the Free tier called plankytronixx.azurewebsites.net, it will already be enabled for SSL. You can just type in to the browser address bar <a href="https://plankytronixx.azurewebsites.net">https://plankytronixx.azurewebsites.net</a> and it will work just fine.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7028.image_5DED27FD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7028.image_5F00_5DED27FD.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2671.image_thumb_719A1191.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2671.image_5F00_thumb_5F00_719A1191.png" alt="image" width="718" height="180" border="0" /></a></p>
<p>I created plankytronixx.azurewebsites.net 90 seconds ago, as shown above in the figure. I&rsquo;ve done absolutely nothing to the site since I created it. When I connect to it over SSL it works! And this is a Free WebSite/WebApp.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7180.image_6840DD0E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7180.image_5F00_6840DD0E.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5466.image_thumb_1EB18F11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5466.image_5F00_thumb_5F00_1EB18F11.png" alt="image" width="500" height="250" border="0" /></a></p>
<p>You can see the certificate that is being used to protect it. More interesting is the cert path up to the Microsoft Internal Corporate Root&hellip;.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1680.image_15585A8E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1680.image_5F00_15585A8E.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5228.image_thumb_3DF6C695.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5228.image_5F00_thumb_5F00_3DF6C695.png" alt="image" width="227" height="93" border="0" /></a></p>
<p>Of course the disadvantage of this SSL implementation is that you have to use the .azurewebsites.net address. Even if you map to a new custom domain, like say, plankytronixx.co.uk, the .azurewebsites.net configuration is still there, it still exists, you can still connect to it&hellip; But users might get suspicious if you ask them for a password over SSL and they now appear to be on an entirely different site. Most of them won&rsquo;t know how Azure works so their suspicions would be reasonable&hellip;</p>
<p>You can actually see in the screenshot above that a wildcard cert exists for every single Azure Web Site/Web App in the world. *.azurewebsites.net&hellip;. Plus &ndash; this certificate is included in the price (and that means the Free tier as well!). SO free SSL is available, but but but&hellip;</p>
<h2>Custom Domain Names</h2>
<p>This is the bit where it gets a bit more complicated and this is the bit everybody talks about: when you want to SSL-enable a site to give a URL like <a href="https://plankytronixx.co.uk">https://plankytronixx.co.uk</a>&hellip; First things first &ndash; you can&rsquo;t get a custom domain name in the Free Tier. So you can now start to see where the confusion comes in? People say SSL is not available for Free sites because of that. But as you&rsquo;ve just seen, you do get SSL, only it comes with a collection of limitations. You have to move up to Basic or Standard to get SSL on custom domain names.</p>
<p>To set up a custom domain name you have to set up a mapping between the IP address of the web server and the DNS name. You do this at a Domain Registrar. I use Go Daddy. The record you add is called an A (address) record. So plankytronixx.co.uk might get mapped to say 104.45.81.79. It&rsquo;s dead easy to configure this at a domain registrar &ndash; you just update the zone file. They&rsquo;ll give you some kind of tool to do it, usually web-based. This is what it looks like on Go Daddy&hellip;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0871.image_592F1F96.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0871.image_5F00_592F1F96.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1586.image_thumb_7DC33DCB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1586.image_5F00_thumb_5F00_7DC33DCB.png" alt="image" width="692" height="260" border="0" /></a></p>
<p>&nbsp;</p>
<p>To get Azure to recognise it involves a hurdle to jump. If you just update the A record and nothing else, Azure will give you this error:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1732.image_188F63D8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1732.image_5F00_188F63D8.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7723.image_thumb_5CD25BD5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7723.image_5F00_thumb_5F00_5CD25BD5.png" alt="image" width="423" height="261" border="0" /></a></p>
<p>It&rsquo;s because Azure wants to be assured that you &ldquo;own&rdquo; this domain. It wants you to prove that you own it. It does this using the &ldquo;azure websites verify&rdquo; process &ndash; more normally known as <em>awverify</em>.</p>
<h4>Anatomy of an HTTP GET request</h4>
<p>Let&rsquo;s have a quick review of what happens when you type <a href="http://plankytronixx.com.uk">http://plankytronixx.com.uk</a> in to a web browser.</p>
<ol>
<li>The browser does a DNS query against the name plankytronixx.couk.</li>
<li>The DNS server returns the IP address &ndash; let&rsquo;s say it&rsquo;s 104.45.81.79.</li>
<li>The web browser formats an HTTP GET and sends it to IP address 104.45.81.79.</li>
<li>In the header of the GET request is the host name &ndash; plankytronixx..co.uk</li>
<li>Azure is sat at IP address 104.45.81.79; it inspects the host name in the header and looks to see if it has a site that matches the name. If it does&hellip;</li>
<li>It returns the page.</li>
<li>If it doesn&rsquo;t &ndash; you get the error in the screenshot above.</li>
</ol>
<p>When you are setting this up for the first time, Azure gives you a piece of DNS information which you add to your DNS registrar&rsquo;s zone file for your domain (plankytronixx.co,uk in this case). When you set up the Azure end of the configuration, Azure sends a query to your domain registrar and expects to see the DNS information it gave you. By this mechanism you are proving that you have control of the records in the domain you are trying to configure: that you &ldquo;own&rdquo; the domain.</p>
<p>If this works, any requests received in steps 5 and 6 above return the correct page. If you can&rsquo;t prove you &ldquo;own&rdquo; the domain, Azure won&rsquo;t configure the domain for you and it returns the blue-page 404 you can see in the screenshot above.</p>
<h3>Proving Domain Ownership</h3>
<p>To prove you own the domain, Azure gives you some instructions on the Domains configuration page&hellip;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2308.image_258BD49A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2308.image_5F00_258BD49A.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0257.image_thumb_1513639F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0257.image_5F00_thumb_5F00_1513639F.png" alt="image" width="453" height="270" border="0" /></a></p>
<p>I&rsquo;ll go through it assuming the custom domain name I want is plankytronixx.co.uk and the default Azure Website/WebApps name is plankytronixx.azurewebsites.net.</p>
<ol>
<li>Add a CNAME record called &ldquo;awverify&rdquo; and point it to &ldquo;awverify.plankytronixx.azurewebsites.net&rdquo;. I&rsquo;m showing this in the Go Daddy screen below:</li>
<li><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6557.image_44D10C1E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6557.image_5F00_44D10C1E.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8561.image_thumb_7B41BE20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8561.image_5F00_thumb_5F00_7B41BE20.png" alt="image" width="502" height="241" border="0" /></a></li>
<li>You might have to wait a few minutes (or even a few hours in some cases) for the DNS records to propagate (don&rsquo;t forget to save the changes)&hellip;</li>
<li>If you get it right, when you type your domain name in to the Azure configuration page &ndash; you&rsquo;ll get a little green tick in the text-box.</li>
<li><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3716.image_3CDBFA6D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3716.image_5F00_3CDBFA6D.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2570.image_thumb_68232225.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2570.image_5F00_thumb_5F00_68232225.png" alt="image" width="445" height="278" border="0" /></a></li>
<li>If something has gone wrong (or the domain update hasn&rsquo;t yet propagated), you get a little red exclamation mark.</li>
<li>You can now save the configuration. You&rsquo;ll see both the custom domain name and the raw Azure Websites/WebApps name in the portal screen.</li>
<li><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4744.image_17E0CAA5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4744.image_5F00_17E0CAA5.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6242.image_thumb_7A0246A3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6242.image_5F00_thumb_5F00_7A0246A3.png" alt="image" width="244" height="176" border="0" /></a></li>
</ol>
<p>Essentially what Azure did during this process was send a DNS query for awverify.plankytronixx.co.uk and it expected to see back, exactly what it told you to configure in the first place &ndash; awverify.plankytronixx.azurewebsites.net. If it gets that back, it reasons that you must have the power to make that record change at the DNS registrar and you must therefore own that domain name.</p>
<h2>Custom Domain SSL</h2>
<p>Now you have a custom domain name, you can set up SSL for it (in this case, plankytronixx.co.uk). But there are 2 types of SSL certificate. Traditional certificates, known as IP-based SSL certs. And SNI certs (Server Name Indication).</p>
<p>Let&rsquo;s go back to 1994 when SSL was first introduced by Netscape. There weren&rsquo;t really all that many web servers running. And the assumption made at the time was that each web site ran on a single server with a single IP address. But these days, IP addresses are very scarce resources. It&rsquo;s not unusual to have many thousands, or even tens of thousands of web sites all running at the same IP address. One of the things that helped this was the introduction of the host name in the HTTP header as mentioned in <span style="color: #800080;">Anatomy of an HTTP GET request</span> above.</p>
<p>You can still use IP-based certificates for SSL with Azure. But there&rsquo;s a 1:1 mapping between the certificate and the site it&rsquo;s attached to. For an IP-based certificate, it will run on exactly one IP address. You&rsquo;d think it must be possible to use the host-header trick I mentioned above. But the trouble is that the SSL session is set up before the HTTP request is executed. It&rsquo;s therefore not possible for the server to see what site to route the traffic to. When there&rsquo;s only one site to send the traffic to, there&rsquo;s no decision to make. But it means the site needs to have its own dedicated public IP address. The disadvantage is that it costs more as a result.</p>
<p>SNI certificates were introduced to get round the problem of the 1:1 mapping between sites and IP addresses. When an SNI certificate is used, the browser sends the host name as part of the SSL setup. But you&rsquo;ve probably already spotted the problem? Older browsers that don&rsquo;t support SNI certificates won&rsquo;t work. So you have to decide between high coverage and higher costs (IP-based certs) or lower coverage and lower costs (SNI-based certs). Your ball&hellip;</p>
<p>The certificate needs to be in a format that can transport not only the public key, but also the private key. This usually means there is some form of protection on the file that contains the certificate, like a password. But there&rsquo;s another problem. Normally, the server on which the certificate sits will generate both the public and the private key. You will then send the public key, plus some information about your site (it&rsquo;s DNS name for example) and yourself as the site admin. All this gets wrapped up in to a Certificate Signing Request (CSR). Azure Websites don&rsquo;t give you access to the underlying server (in the way that say Cloud Services do). You keep the private key, well, private (you don&rsquo;t even reveal the private key to the certificate provider). You add the private key in to the certificate file. THe file has to be in .pfx format.</p>
<p>Probably the easiest way to do this is to fire up IIS Manager on a machine and create a Certificate Request on it. Open the root then on the main pane double-click <em>Server Certificates</em>. You&rsquo;ll see an option in the panel on the right hand side to <em>Create&nbsp; Certificate Request.</em> Go through the wizard and save the text file in a convenient location. This process generates a public and a private key. The public key is in the CSR text file. The private key is kept on the machine and is, well, private.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8345.image_5504862A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8345.image_5F00_5504862A.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3566.image_thumb_6030A125.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3566.image_5F00_thumb_5F00_6030A125.png" alt="image" width="400" height="303" border="0" /></a></p>
<p>Now you need to present this Certificate Request to a Cert Issuer such as VeriSign, InstantSSL, Thawte and so on. Or your own CA&hellip; Quite a few of the providers will give you a 30-day or 90-day trial certificate. Typically if you apply for a certificate for say, plankytronixx.co.uk, you&rsquo;ll need an email address at plankytronixx.co.uk. Each issuer has its own process: some ask for lots of information, others ask for a little. What you will end up with is a signed certificate. They will email the response to you.</p>
<p>Remember that when you created the request, the private key was kept private? Well, it&rsquo;s still hanging around. When you complete the certificate request in IIS, it will marry up with the file the CA sent you in email. You go back and click "<em>Complete Certificate Request.</em></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7635.image_542EB0F1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7635.image_5F00_542EB0F1.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4024.image_thumb_4A694979.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4024.image_5F00_thumb_5F00_4A694979.png" alt="image" width="359" height="281" border="0" /></a></p>
<p>You&rsquo;ll be asked for the file the CA sent you. Put all the details in and click <em>OK.</em></p>
<p>You now get the option to export the certificate and it and that&rsquo;s a good thing because you can export the certificate in .pfx format which is exactly what Azure WebSites/WebApps requires.</p>
<p>The easiest way to do this is to find your certificate in the <em>Server Certificates</em> section of IIS. Identify your certificate, right-click it and select <em>Export.</em> You&rsquo;ll end up with a .pfx file.</p>
<p>You go to the Azure Portal and click <em>upload a certificate</em> on the <em>Configure</em> page (this is as long as you are in the Basic or higher tier).</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8267.image_1A41FEB6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8267.image_5F00_1A41FEB6.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8105.image_thumb_511EE3AD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8105.image_5F00_thumb_5F00_511EE3AD.png" alt="image" width="408" height="132" border="0" /></a></p>
<p>That&rsquo;s not the end of the process. You now have a certificate in Azure &ndash; to get your Azure Website/WebApp to use it &ndash; you need to configure the <em>SSL Bindings</em> section of the page. You&rsquo;ll specify which DNS name you want to protect with SSL, you&rsquo;ll select the certificate you just uploaded and, depending on the type of cert you bought, you&rsquo;ll select either SNI or IP based certificate.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0513.image_1E4EDD39.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0513.image_5F00_1E4EDD39.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3125.image_thumb_64F9F9B3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3125.image_5F00_thumb_5F00_64F9F9B3.png" alt="image" width="401" height="94" border="0" /></a></p>
<p>Once you save those settings you&rsquo;re done. Try it out by connecting a browser to your site. If you used an EV certificate, the address bar turns green. A padlock icon appears in the address bar of most browsers. If you click it in IE you can actually view the certificate plus its certification path &ndash; all the way up to the root authority.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6403.image_471B75B2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6403.image_5F00_471B75B2.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1524.image_thumb_76D91E31.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1524.image_5F00_thumb_5F00_76D91E31.png" alt="image" width="259" height="327" border="0" /></a></p>
<p>I hope you found this useful. Remember, I made a video of how to do it here. <a href="https://channel9.msdn.com/Blogs/Plankytronixx/Azure-WebsitesWebApps-SSL-step-by-step-click-by-click-instructions">Click Here</a>.</p>
<p>&nbsp;</p>
<p>@plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure Exam Prep – Virtual Networks</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/azure-exam-prep-virtual-networks</link>
      <pubDate>Tue, 05 May 2015 14:22:59 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/05/05/azure-exam-prep-virtual-networks/</guid>
      <description><![CDATA[Continuing the theme of exam prep, I thought I’d write a little about Azure Virtual Networks, or...]]></description>
      <content:encoded><![CDATA[<p>Continuing the theme of exam prep, I thought I’d write a little about Azure Virtual Networks, or VNets.</p>  <p>If you see any of the “martetecture” material on the Internet, you’d rapidly come to the conclusion that VNets are a way to securely bind your on-premises corporate-network to the network you have in Azure on which all your servers and resources are sat. The idea behind this is that the stuff you have in Azure becomes a bit like a branch-office attached to your private network. The connection medium between the 2 is the Internet and the traffic is carried over SSL, which makes it very difficult for an eavesdropper to listen in on your communications. But did you know you can use VNets to also connect let’s say some servers in the Azure Dublin data centre to some servers in the Azure Singapore data centre? You can also use it to connect say an Azure Website running WordPress to an Azure VM running MySQL: it’s a way of bridging the gap between <a href="http://blogs.msdn.com/b/hanuk/archive/2013/12/03/which-windows-azure-cloud-architecture-paas-or-iaas.aspx">PaaS and IaaS</a> services in Azure. It also gives you a good degree of control over the way the internal network works. This might be important if you intend to deploy core infrastructure such as Active Directory where the sites and services architecture assumes you have control over such things as sites and subnets.</p>  <p>There are 2 things to get your head around: address spaces and subnets. An address space is the contiguous universe of IP addresses between 2 limits – the lower address and the upper address. The subnet is an IP subnet in the traditional sense of the word but in this case, it lives within an address space.</p>  <h2>Address Spaces</h2>  <p>Address spaces and subnets are usually declared in CIDR notation. A number like 10.0.0.0/8. That’s a 32-bit base IP address plus a mask. This example means “mask off the top 8 bits, and the range of addresses that are left in the last 24 bits is the address space.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3617.image_3209011E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3617.image_5F00_3209011E.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5488.image_thumb_68E5E615.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5488.image_5F00_thumb_5F00_68E5E615.png" width="386" height="220" /></a> </p>  <p><font color="#800040">Figure 1: Address Space map for 10.0.0.0/8</font></p>  <p>The above example shows an address space from 10.0.0.0 (the lower address) to 10.255.255.255 (the upper address). Another example might be 10.0.0.0/16 as shown in the following figure.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6886.image_1CADDC67.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6886.image_5F00_1CADDC67.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7713.image_thumb_538AC15E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7713.image_5F00_thumb_5F00_538AC15E.png" width="380" height="206" /></a> </p>  <p><font color="#800040">Figure 2: Address Space map for 10.0.0.0/16</font></p>  <p>That would mask off the top 16 bits and leave the final 16 bits for an address space range of 10.0.0.0 to 10.0.255.255.</p>  <p>Whatever address space you define, you are creating a “space” with a collection of addresses (from the lowest to the highest), hence the term “address space”. Let’s imagine you had a VNet with a couple of IaaS VMs connected to it like the figure below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8802.image_757623E2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8802.image_5F00_757623E2.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3124.image_thumb_3E9BCF9C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3124.image_5F00_thumb_5F00_3E9BCF9C.png" width="334" height="196" /></a> </p>  <p><font color="#800040">Figure 3: VMs connected to a VNet</font></p>  <p>The text in red represents the address space. Note it’s the same for each VM. The text in black represents the individual address within that space. These 2 machines can communicate with each other on the VNet. Their addresses are within the permitted range for this address space of 10.0.0.0 to 10.0.255.255. But imagine if the IP address of the machine of the right had somehow got set to <font color="#ff0000">10.1.</font>20.31. It would be unable to communicate because it’s outside the range. Azure’s infrastructure would specifically prevent communication to or from that machine. It would become an island on its own.</p>  <h2>Subnets</h2>  <p>A subnet must exist within an address space. That means the range of addresses in a subnet must fit inside the address space. So hopefully you can see how subnetting an address space gives you a way to logically divide up the address space.</p>  <p>Look back up at figure 1. The lowest-order 24 bits represent all the possible addresses you could have in the address space. By further dividing those 24 bits, you could segment the network. The higher order bits would determine which subnet you are in, and the lower order bits would define which host on that particular network you are on.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6204.image_60873220.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6204.image_5F00_60873220.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7142.image_thumb_16F7E423.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7142.image_5F00_thumb_5F00_16F7E423.png" width="364" height="211" /></a> </p>  <p><font color="#800040">Figure 4: Subnet within an address space.</font></p>  <p>Figure 4 shows how the remaining 24 bits have been subnetted. The following table gives a few examples of how to break these ideas down.</p>  <p>The table below assumes an address space of 10.0.0.0/8</p>  <table cellspacing="0" cellpadding="2" width="400" border="0"><tbody>     <tr>       <td valign="top" width="133"><strong>IP Address</strong></td>        <td valign="top" width="133"><strong>Subnet</strong></td>        <td valign="top" width="133"><strong>Host (within subnet)</strong></td>     </tr>      <tr>       <td valign="top" width="133">10.0.0.20</td>        <td valign="top" width="133">0</td>        <td valign="top" width="133">0.20</td>     </tr>      <tr>       <td valign="top" width="133">10.1.0.20</td>        <td valign="top" width="133">1</td>        <td valign="top" width="133">0.20</td>     </tr>      <tr>       <td valign="top" width="133">10.50.2.20</td>        <td valign="top" width="133">50</td>        <td valign="top" width="133">2.20</td>     </tr>      <tr>       <td valign="top" width="133">10.200.0.200</td>        <td valign="top" width="133">200</td>        <td valign="top" width="133">0.200</td>     </tr>      <tr>       <td valign="top" width="133">10.250.255.147</td>        <td valign="top" width="133">250</td>        <td valign="top" width="133">255.147</td>     </tr>      <tr>       <td valign="top" width="133">11.0.0.10</td>        <td valign="top" width="133">invalid (it’s outside the address space)</td>        <td valign="top" width="133">invalid (it’s outside the address space)</td>     </tr>      <tr>       <td valign="top" width="133">8.0.0.12</td>        <td valign="top" width="133">invalid (it’s outside the address space)</td>        <td valign="top" width="133">invalid (it’s outside the address space)</td>     </tr>   </tbody></table>  <p>This is all very easy because I’ve divided the address space and subnet boundaries up on very neat byte boundaries. So the numbers fit exactly in the dotted address notation. But you can also create address spaces and subnets that don’t divide on these boundaries. You could for example have a subnet defined by the top say, 13 bits of a 32-bit address. The reason it makes things more difficult is because part of the subnet identifier would come from the second number and part of it would come from the third number of an IP address. And there’s nothing to be done other than visualise the address space in your mind, or draw it out.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8233.image_5FB15CE7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8233.image_5F00_5FB15CE7.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7510.image_thumb_4166A5F1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7510.image_5F00_thumb_5F00_4166A5F1.png" width="405" height="164" /></a> </p>  <p><font color="#800040">Figure 5: Non byte-boundary subnet.</font></p>  <p>This would give a CIDR address for the address space as 10.0.0.0/8 and a subnet address of 10.0.0.0/13. If you count in from the most-significant-bit, you can see the subnet ends on the 13th bit. It certainly makes for complexity when trying to do calculations in your head in an exam! I’m hoping you can see that as you make the number of bits you use for the subnet bigger, you take them away from the maximum number of hosts you can have within a subnet. So these things are a compromise against each other. If you have no need (and foresee no need way in to the future) to be really tight up against the boundaries with subnets and address spaces, and you’re not at or near the limit – make life easy for yourself – set address space and subnets up on byte-boundaries. I reckon in the exam, if they want you to calculate something like this – they’ll give you a question with everything lining up on byte boundaries. After all, it’s not a TCP/IP exam…</p>  <h2>What’s in a Virtual Network.</h2>  <p>The security in Azure works in such a way that IP addresses that are not known to the infrastructure (on other words it didn’t issue them in the first place) are not routed anywhere. The result is that if you want things to talk to each other, you’ve got to let Azure’s infrastructure give you a dynamically assigned IP address. You might be getting all uppity at this point thinking you want to deploy something like an AD Domain Controller and best practice says to avoid DHCP. Well, with VNets you can relax. You will be issued an address over the DHCP protocol, but the lease duration is set to either 168 years or until you delete the VNet, whichever comes first. I’m pretty sure you’ll delete the VNet first and in fact, I haven’t thought about what will happen in 168 years. It’ll be somebody else’s problem by then.</p>  <p>This means whenever you shut a machine down, when it reboots, it’ll get the same IP address back again. So now you can relax about your AD Domain Controller deployments in Azure. The fact that every time you boot the machine and it gets the same address makes it just as good as a statically assigned IP address.</p>  <p>Each VNet reserves a few addresses. You might have noticed whenever you fire up the first machine in a VNet it gets a .4 address. That’s because .0 is reserved for broadcast requests while .1 is reserved for the default gateway (router). .2 and .3 are reserved for a special sort of gateway that you might later configure to communicate with your on-premises network. Note that .255 is also a broadcast address. </p>  <p>In the following figure, I configured a VNet thus:</p>  <table cellspacing="0" cellpadding="2" width="400" border="0"><tbody>     <tr>       <td valign="top" width="200">10.0.0.0/8</td>        <td valign="top" width="200">Address space = PlankyNet</td>     </tr>      <tr>       <td valign="top" width="200">10.0.0.0/16</td>        <td valign="top" width="200">subnet = SubNet-1</td>     </tr>   </tbody></table>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4314.image_510941B3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4314.image_5F00_510941B3.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5736.image_thumb_63549926.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5736.image_5F00_thumb_5F00_63549926.png" width="591" height="305" /></a> </p>  <p>F<font color="#800040">igure 6: ipconfig output for a VNet.</font></p>  <p>You can see this is the first host in the subnet because it is assigned a .4 address. You can see it’s a 16-bit subnet, because the subnet mask (255.255.0.0) masks off the top 16 bits. You can also see the default gateway (router) is at 10.0.0.1 as predicted.</p>  <p>It doesn’t matter how large or small the subnet is, any range of available addresses are automatically reduced by 5 (because of the 5 reserved addresses mentioned above). So for example a 16-bit subnet (which gives a total of 65536 host addresses) is reduced to 65531. An 8 bit subnet has a maximum of 251 addresses (256-5). You can see this illustrated in the following figure.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5270.image_04D3C8B6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5270.image_5F00_04D3C8B6.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4705.image_thumb_4263B730.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4705.image_5F00_thumb_5F00_4263B730.png" width="444" height="138" /></a> </p>  <p><font color="#800040">Figure 7: Subnet range displayed in the Azure portal.</font></p>  <p>In Figure 7 you can see the 16 bit subnet mask results in 65531 available addresses giving a usable address range of 10.0.0.4 to 10.0.255.254.</p>  <h2>Practice Questions</h2>  <p><strong>Q</strong>: How many hosts can occupy a single subnet in the following VNet?</p>  <p>Address space: 10.0.0.0/16</p>  <p>Subnet: 10.0.0.0/24</p>  <p><strong>A</strong>: the “/24” means the first 3 octets fill in from the most significant bit and mask off the first 3 bytes. That leaves one byte (or 8 bits) of subnet space– or 256 hosts. But 5 addresses have to be subtracted which leaves 251 hosts.</p>  <p>&#160;</p>  <p><strong>Q:</strong> How many hosts can occupy a single subnet in the following VNet?</p>  <p>Address space: 10.0.0.0/8</p>  <p>Subnet: 10.0.0.0/24</p>  <p><strong>A:</strong> THis is just a question to test that you understand the difference between the address space and the subnet. The subnet definition in this question is the same as the first question, the number of hosts doesn’t change. 251.</p>  <p>&#160;</p>  <p><strong>Q:</strong> You have the following VNet:</p>  <p>Address space: 10.0.0.0/8</p>  <p>Subnet: 10.0.0.0/16</p>  <p>You connect to a VM on this network over RDP and assign the following fixed IP address 10.0.0.100. Will you be able to connect to a VM at IP address 10.0.0.101?</p>  <p><strong>A:</strong> No – the Azure VNet infrastructure prevents traffic to/from hosts it didn't assign an IP address to.</p>  <p>&#160;</p>  <p>I hope this will help you if you’re taking the Azure Infrastructure Exam (533)…</p>  <p>&#160;</p>  <p>Planky == @plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure Exam Prep – Fault Domains and Update Domains</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/azure-exam-prep-fault-domains-and-update-domains</link>
      <pubDate>Fri, 01 May 2015 05:41:56 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/05/01/azure-exam-prep-fault-domains-and-update-domains/</guid>
      <description><![CDATA[I’ve booked a couple of exams. The Azure Infrastructure Exam (533) on 15th May. and the Dev exam...]]></description>
      <content:encoded><![CDATA[<p>I’ve booked a couple of exams. The Azure Infrastructure Exam (533) on 15th May. and the Dev exam (532) on 29th May.</p>  <p>I thought I’d just write a few articles about stuff I’ve found out between now and then which others who are taking the exam might find interesting.</p>  <p>This post: <strong>Fault Domains and Update Domains: </strong>I’ve known about them for years but never really thought about how they are actually calculated and how machines are provisioned in to them.</p>  <h2>First – Azure VMs.</h2>  <h3>Fault Domains</h3>  <p><strong></strong> When you put VMs in to an availability set, Azure guarantees to spread them across Fault Domains and Update Domains. A Fault Domain (FD) is essentially a rack of servers. It consumes subsystems like network, power, cooling etc. So 2 VMs in the same availability set means Azure will provision them in to 2 different racks so that if say, the network or the power failed, only one rack would be affected.</p>  <p>I discovered there are always only 2 fault domains: FD0 and FD1. It makes it seem like your VMs only get spread across 2 racks but that’s not the case. They can be spread across more racks if you’ve got lots of VMs. But as far as your availability set is concerned FD0 and FD1 are a way of saying “This bit of infrastructure (FD0) is <strong>different</strong> to this bit (FD1).&#160; As you boot VMs in to an availability set, they get allocated like this – FD0, FD1, FD0, FD1, FD0, FD1 and so on. The pattern never changes. You’ve probably seen this diagram hundreds of times:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1513.image_593B4476.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1513.image_5F00_593B4476.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6232.image_thumb_016D7D89.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6232.image_5F00_thumb_5F00_016D7D89.png" width="376" height="238" /></a> </p>  <p><font color="#800040">Figure 1: Fault Domains and Availability Sets</font></p>  <p>You can see IIS1 and 2 are the web-front end. They’re both in different fault domains. If something happens to the power going to rack 1, IIS1 will fail and so will SQL1 but the other 2 servers will continue to operate. </p>  <p>Now, if you add more servers to each availability set, this is what happens:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3036.image_1110194B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3036.image_5F00_1110194B.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/4478.image_thumb_756E1E05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/4478.image_5F00_thumb_5F00_756E1E05.png" width="378" height="239" /></a> </p>  <p><font color="#800040">Figure 2: FD0 and FD1 are populated.</font></p>  <p>Azure continues to distribute them across fault domains. Looking at a list of the 4 IIS VMs would give a table like this:</p>  <table cellspacing="0" cellpadding="2" width="362" border="0"><tbody>     <tr>       <td valign="top" width="199">VM</td>        <td valign="top" width="161">Fault Domain</td>     </tr>      <tr>       <td valign="top" width="219">IIS1</td>        <td valign="top" width="169">0</td>     </tr>      <tr>       <td valign="top" width="223">IIS2</td>        <td valign="top" width="172">1</td>     </tr>      <tr>       <td valign="top" width="223">IIS3</td>        <td valign="top" width="174">0</td>     </tr>      <tr>       <td valign="top" width="222">IIS4</td>        <td valign="top" width="175">1</td>     </tr>   </tbody></table>  <p>They are allocated to FDs in the order in which they boot. So if I’d booted these systems in reverse order then they’d all be in different FDs.</p>  <p>&#160;</p>  <h3>Update Domains</h3>  <p>Sometimes you need to update your app, or Microsoft needs to update the host on which your VM(s) are running. Note that with IaaS VMs, Microsoft does not automatically update your VMs. You have complete control (and responsibility) over that. But say if a serious security vulnerability is identified and a patch created. It’s in Microosft’s interest to get that applied to the host underneath your VM as soon as possible. So how is that done without taking your service offline? Update Domains. It’s similar to the FD methods, only this time, instead of an accidental failure, there is a purposeful move to take down one (or more) of your servers. So to make sure your service doesn’t go offline because of an update, it will walk through your update domains one after the other.</p>  <p>Whereas FDs are assigned in the pattern 0, 1, 0, 1, 0, 1, 0, 1…. UDs are assigned 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4….</p>  <p>Both FDs and UDs are assigned in the order that Azure discovers them as they are provisioned. So if you provision machines in the order Srv0, Srv1, Srv2, Srv3, Srv4, Srv5, Srv6, Srv7, Srv8, Srv9, Srv10, Srv11 you’ll end up with a table that looks like this:</p>  <table cellspacing="0" cellpadding="2" width="398" border="0"><tbody>     <tr>       <td valign="top" width="132">VM</td>        <td valign="top" width="132">Fault Domain</td>        <td valign="top" width="132">Update Domain</td>     </tr>      <tr>       <td valign="top" width="132">Srv0</td>        <td valign="top" width="132">0</td>        <td valign="top" width="132">0</td>     </tr>      <tr>       <td valign="top" width="132">Srv1</td>        <td valign="top" width="132">1</td>        <td valign="top" width="132">1</td>     </tr>      <tr>       <td valign="top" width="132">Srv2</td>        <td valign="top" width="132">0</td>        <td valign="top" width="132">2</td>     </tr>      <tr>       <td valign="top" width="132">Srv3</td>        <td valign="top" width="132">1</td>        <td valign="top" width="132">3</td>     </tr>      <tr>       <td valign="top" width="132">Srv4</td>        <td valign="top" width="132">0</td>        <td valign="top" width="132">4</td>     </tr>      <tr>       <td valign="top" width="132">Srv5</td>        <td valign="top" width="132">1</td>        <td valign="top" width="132">0</td>     </tr>      <tr>       <td valign="top" width="132">Srv6</td>        <td valign="top" width="132">0</td>        <td valign="top" width="132">1</td>     </tr>      <tr>       <td valign="top" width="132">Srv7</td>        <td valign="top" width="132">1</td>        <td valign="top" width="132">2</td>     </tr>      <tr>       <td valign="top" width="132">Srv8</td>        <td valign="top" width="132">0</td>        <td valign="top" width="132">3</td>     </tr>      <tr>       <td valign="top" width="132">Srv9</td>        <td valign="top" width="148">1</td>        <td valign="top" width="164">4</td>     </tr>      <tr>       <td valign="top" width="132">Srv10</td>        <td valign="top" width="148">0</td>        <td valign="top" width="164">0</td>     </tr>      <tr>       <td valign="top" width="132">Srv11</td>        <td valign="top" width="148">1</td>        <td valign="top" width="164">1</td>     </tr>   </tbody></table>  <p>…you can see that UDs loop around a count of 5 (0, 1, 2, 3, 4).</p>  <p>You can see that in the following screen shot of a collection of 9 VMs in a single availability set.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2746.image_1E0C8A0D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2746.image_5F00_1E0C8A0D.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6683.image_thumb_2DAF25CF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6683.image_5F00_thumb_5F00_2DAF25CF.png" width="539" height="290" /></a> </p>  <p><font color="#800040">Figure 3: Fault and Update Domains in a Cloud Service comprised of Azure VMs</font></p>  <p>&#160;</p>  <h2>Second – Azure Cloud Services</h2>  <p>With Azure VMs, FDs and UDs are assigned to the VMs in an availability set in the order in which they are provisioned. With Cloud Servces it’s almost the same but roles are used instead of availability sets. For example you might have a web role with 8 instances. The role would be assigned FDs and UDs as the instances are provisioned and discovered by Azure. The order of the instance numbers is not necessarily the order in which they are successfully provisioned. It’s just a fact of life that some machines that start the provisioning process slow down in the middle and machines that started later, catch up and overtake them.   <br />    <br /></p>  <table cellspacing="0" cellpadding="2" width="400" border="0"><tbody>     <tr>       <td valign="top" width="133">Instance Number</td>        <td valign="top" width="133">Fault Domain</td>        <td valign="top" width="133">Update Domain</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN0</td>        <td valign="top" width="133">0</td>        <td valign="top" width="133">0</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN1</td>        <td valign="top" width="133">1</td>        <td valign="top" width="133">1</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN2</td>        <td valign="top" width="133">0</td>        <td valign="top" width="133">2</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN3</td>        <td valign="top" width="133">1</td>        <td valign="top" width="133">3</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN4</td>        <td valign="top" width="133">0</td>        <td valign="top" width="133">4</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN5</td>        <td valign="top" width="133">1</td>        <td valign="top" width="133">0</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN6</td>        <td valign="top" width="133">0</td>        <td valign="top" width="133">1</td>     </tr>      <tr>       <td valign="top" width="133">WebRole_IN7</td>        <td valign="top" width="133">1</td>        <td valign="top" width="133">2</td>     </tr>   </tbody></table>  <p>You can also see in this shot of a Cloud Service, the same pattern:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0763.image_52434404.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0763.image_5F00_52434404.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3821.image_thumb_73C27393.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3821.image_5F00_thumb_5F00_73C27393.png" width="544" height="364" /></a> </p>  <p>…but notice how by the time we get to page three (there are 100 servers in this cloud service), it starts to break down:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/5023.image_783B850B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/5023.image_5F00_783B850B.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2727.image_thumb_278CFA96.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2727.image_5F00_thumb_5F00_278CFA96.png" width="548" height="462" /></a> </p>  <p>…that’s because UDs and FDs are assigned in the order that instances are provisioned. Some of them provision more quickly than others and that causes the pattern to break down. But there are still the correct number of FDs and UDs.</p>  <p>In Cloud Services, you can also set the number of update domains in the service model’s .csdef file. By default it’s set to 5 but you can increase that to a maximum of 20.</p>  <h3>Practice Questions: </h3>  <p><strong>Q:</strong> If you add a new VM to an availability set, how many extra fault domains and update domains will you get if there are already 4 instances in the availability set?</p>  <p><strong>A:</strong></p>  <table cellspacing="0" cellpadding="2" width="462" border="0"><tbody>     <tr>       <td valign="top" width="137">VMs</td>        <td valign="top" width="92">UD</td>        <td valign="top" width="88">FD</td>        <td valign="top" width="143">&#160;</td>     </tr>      <tr>       <td valign="top" width="137">Srv0</td>        <td valign="top" width="92">0</td>        <td valign="top" width="88">0</td>        <td valign="top" width="143">1 UD and 1 FD</td>     </tr>      <tr>       <td valign="top" width="137">Srv1</td>        <td valign="top" width="92">1</td>        <td valign="top" width="88">1</td>        <td valign="top" width="143">2 UDs (UD0 &amp; UD1) and 2 FD (FD0 &amp; FD1)</td>     </tr>      <tr>       <td valign="top" width="137">Srv2</td>        <td valign="top" width="92">2</td>        <td valign="top" width="88">0</td>        <td valign="top" width="143">3 UDs and 2 FDs</td>     </tr>      <tr>       <td valign="top" width="137">Srv3</td>        <td valign="top" width="92">3</td>        <td valign="top" width="88">1</td>        <td valign="top" width="143">4 UDs and 2 FDs</td>     </tr>      <tr>       <td valign="top" width="137">Add new VM = Srv4</td>        <td valign="top" width="92">4</td>        <td valign="top" width="88">0</td>        <td valign="top" width="143">You get one extra UD (UD4), but no extra FDs</td>     </tr>   </tbody></table>  <p><strong>Q:</strong> In a Cloud Service that has a Web Role with 12 instances, how many FDs and UDs will you get by default?</p>  <p><strong>A:</strong> 2 FDs (FD0 and FD1). 5 UDs (UD0, UD1, UD2, UD3, UD4).</p>  <p>&#160;</p>  <p><strong>Q:</strong> You have set the maximum number of UDs in the .csdef for a Cloud Service to 20. You use Azure Virtual Machines to provision 18 VMs. How many Update Domains will you have as a result?</p>  <p><strong>A:</strong> This is a bit of a trick question – the .csdef is only used for Cloud Services, not for VMs. So regardless of what you set or even how you try to do it, Azure VM UDs come in groups of 5. With 18 VMs, that means you’ll have 5 UDs. UD0 – to – UD4 a la:</p>  <table cellspacing="0" cellpadding="2" width="400" border="0"><tbody>     <tr>       <td valign="top" width="200">VM</td>        <td valign="top" width="200">Update Domain</td>     </tr>      <tr>       <td valign="top" width="200">VM0</td>        <td valign="top" width="200">0</td>     </tr>      <tr>       <td valign="top" width="200">VM1</td>        <td valign="top" width="200">1</td>     </tr>      <tr>       <td valign="top" width="200">VM2</td>        <td valign="top" width="200">2</td>     </tr>      <tr>       <td valign="top" width="200">VM3</td>        <td valign="top" width="200">3</td>     </tr>      <tr>       <td valign="top" width="200">VM4</td>        <td valign="top" width="200">4</td>     </tr>      <tr>       <td valign="top" width="200">VM5</td>        <td valign="top" width="200">0</td>     </tr>      <tr>       <td valign="top" width="200">VM6</td>        <td valign="top" width="200">1</td>     </tr>      <tr>       <td valign="top" width="200">VM7</td>        <td valign="top" width="200">2</td>     </tr>      <tr>       <td valign="top" width="200">VM8</td>        <td valign="top" width="200">3</td>     </tr>      <tr>       <td valign="top" width="200">VM9</td>        <td valign="top" width="200">4</td>     </tr>      <tr>       <td valign="top" width="200">VM10</td>        <td valign="top" width="200">0</td>     </tr>      <tr>       <td valign="top" width="200">VM11</td>        <td valign="top" width="200">1</td>     </tr>      <tr>       <td valign="top" width="200">VM12</td>        <td valign="top" width="200">2</td>     </tr>      <tr>       <td valign="top" width="200">VM13</td>        <td valign="top" width="200">3</td>     </tr>      <tr>       <td valign="top" width="200">VM14</td>        <td valign="top" width="200">4</td>     </tr>      <tr>       <td valign="top" width="200">VM15</td>        <td valign="top" width="200">0</td>     </tr>      <tr>       <td valign="top" width="200">VM16</td>        <td valign="top" width="200">1</td>     </tr>      <tr>       <td valign="top" width="200">VM17</td>        <td valign="top" width="200">2</td>     </tr>   </tbody></table>  <p><strong>Q:</strong> If you have 13 VMs in an availability set, how many VMs will be in UD0?</p>  <p><strong>A:</strong> Use the table above. You can see UD0 lines up with VM0, VM5 and VM10. So there will be 3 VMs in UD0.</p>  <p>&#160;</p>  <p>I hope you find this useful, if you’re going to take the Azure Infrastructure exam (533).</p>  <p>Planky == @plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>Confusion with Azure Cloud Service SHA1 and SHA256 Certificates</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/confusion-with-azure-cloud-service-sha1-and-sha256-certificates</link>
      <pubDate>Thu, 23 Apr 2015 12:06:23 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2015/04/23/confusion-with-azure-cloud-service-sha1-and-sha256-certificates/</guid>
      <description><![CDATA[This came up on a camp I ran yesterday. Somebody noticed in Visual Studio, that the algorithm used...]]></description>
      <content:encoded><![CDATA[<p>This came up on a camp I ran yesterday. Somebody noticed in Visual Studio, that the algorithm used for the certificate thumbprint is SHA1. There isn’t an option to change it to SHA256. And all recent advice about SHA1 is to avoid using it and use SHA256.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/1145.image_631D9520.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/1145.image_5F00_631D9520.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3730.image_thumb_126F0AAB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3730.image_5F00_thumb_5F00_126F0AAB.png" width="717" height="185" /></a> </p>  <p><font color="#800000">Figure 1: The Certificates tab in Visual Studio.</font> </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/2570.image_28C4AFF0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/2570.image_5F00_28C4AFF0.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/3187.image_thumb_31B4422F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/3187.image_5F00_thumb_5F00_31B4422F.png" width="730" height="86" /></a> </p>  <p>Fi<font color="#800000">gure 2: If you drill in to the underlying file, you get only one option – SHA1:</font></p>  <p>Well, you can relax. This has nothing to do with making the security of any data transmission less secure, or with validating the data, the certificate or any key material. </p>  <p>Over the years, various encryption and hashing algorithms have been found to have weaknesses and subsequently security experts have recommended using more modern, more secure equivalents. That’s where we are with SHA1 and SHA256.</p>  <p>But that is dealing with all the crypto material <strong>inside</strong> the certificate. The thumbprint is essentially a moniker for the <strong>name</strong> of the certificate. In the same way that I have a couple of names that people use to identify me. I will respond to either “Steve” or (more usually) “Planky”. You can do the same thing with certificates. You could use maybe the Subject field to identify a certificate. Maybe the CN (Common Name). Maybe some concatenation of the 2 fields. Some other field maybe.</p>  <p>In a certificate store on a computer, you could have 2 certificates with the same subject name. It’d be like walking in to a room and saying “Steve?” and hitting a momentary period of confusion as both me and my colleague, Steve, say “Yes?”.</p>  <p>That’s no good in the world of computing. So you need a way of absolutely identifying the certificate you want to use. It’s a little bit like the way my thumbprint exactly identifies me and nobody else in the world (as far as we know). That’s what the thumbprint of a certificate is.</p>  <p>It’s not a value that is stored <strong>inside</strong> the certificate. It’s a <strong>calculated value.</strong> What happens is that all the binary data that makes up the certificate is run through an algorithm and it produces a value. It gets run through the SHA1 algorithm. SHA1 is a hashing algorithm. That means you can put a string of data in to it and you get a fixed length string out of it. It produces a 160-bit value. That gives you a 40 character hexadecimal value. Look at the value in figure 2 above (and figure 3 below) and you can see the hexadecimal representation of that 160 bit value.<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/6266.image_25B251FB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/6266.image_5F00_25B251FB.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/8838.image_thumb_0A1056B6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/8838.image_5F00_thumb_5F00_0A1056B6.png" width="754" height="145" /></a></p>  <p><font color="#800000">Figure 3: SHA1 certificate thumbprint</font></p>  <p>So, when you want to use a certificate in your Azure Cloud Service you’ve got 2 things to do. One is to upload the certificate, so it ends up in the certificate store of the machine(s) your cloud service is running on. The other job is to <strong>tell the machine which certificate you want to use</strong>. The machine has a pretty wide choice of certificates in its certificate store. You want to be sure it selects the right one. You do this by identifying the certificate with its thumbprint.</p>  <p>What will happen is when your app passes over the thumbprint from the .cscfg file, the system will go through every certificate in its store and find one with a thumbprint that matches the one you are talking about in the .cscfg.</p>  <p>How does the machine know the thumbprints of all the certificates in its certificate store if it’s not a value that is contained in the certificate? It calculates it. It simply runs the naked binary data of each cert through the SHA1 algorithm (as shown in figure 3 above) and look for a value that matches. If it finds one, then it’s got the right certificate.</p>  <p>The algorithm used for the thumbprint has now done its job. All the crypto material <strong>inside</strong> the certificate will be used to protect any data you transfer to and from the server. So – when you see sha1 in the .cscfg for the certificate thumbprint, you don’t have to worry that your website/app/data is insecure, it’s simply using it as a way of identifying the certificateit wants to use…</p>  <p>If any of the detail in this post is confusing and you feel you need a bit of a crypto primer, can I recommend you <a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/23/crypto-primer-understanding-encryption-public-private-key-signatures-and-certificates.aspx">read this post</a>, or watch <a href="http://blogs.msdn.com/b/plankytronixx/archive/2013/06/12/video-crypto-primer-understanding-cryptography-certificates-public-private-key-and-digital-signatures.aspx">this video</a>.</p>  <p>Have fun – and relax, a SHA1 cert thumbprint is not going to compromise your system security….</p>  <p></p>  <p>@plankytronixx</p>]]></content:encoded>
    </item>
    <item>
      <title>“Cartoony” Video of Azure AD Admin Units</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/cartoony-video-of-azure-ad-admin-units</link>
      <pubDate>Fri, 12 Dec 2014 05:36:39 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2014/12/12/cartoony-video-of-azure-ad-admin-units/</guid>
      <description><![CDATA[I just published a video I made on to Channel 9 describing the major features of Azure AD...]]></description>
      <content:encoded><![CDATA[<p>I just published a video I made on to Channel 9 describing the major features of Azure AD Administrative Units as part of the slew of stuff that was released today. It’s in the “cartoony” style which seems to be the way a lot of people like to consume these “principles of…” notions.</p>  <p>&#160;</p> <iframe height="315" allowfullscreen="allowfullscreen" src="https://channel9.msdn.com/Series/Windows-Azure-Active-Directory/Introduction-to-Azure-Active-Directory-Administrative-Units/player" frameborder="0" width="560"></iframe>   <p>&#160;</p>  <p>Or the <a href="https://channel9.msdn.com/Series/Windows-Azure-Active-Directory/Introduction-to-Azure-Active-Directory-Administrative-Units">full-sized video is here.</a></p>  <p>Hope you like it.</p>  <p>Planky - @plankytronixx == <a href="https://aka.ms/gbr257">GBR-257</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Provision a dev workstation in 6 minutes and $0.00</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/provision-a-dev-workstation-in-6-minutes-and-0-00</link>
      <pubDate>Fri, 21 Nov 2014 05:27:43 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2014/11/21/provision-a-dev-workstation-in-6-minutes-and-0-00/</guid>
      <description><![CDATA[A couple of weeks ago, Microsoft announced that Visual Studio would be a free development tool. A...]]></description>
      <content:encoded><![CDATA[<p>A couple of weeks ago, Microsoft announced that Visual Studio would be a free development tool. A special version, called the Community Edition (Visual Studio 2013 Community Edition) which is roughly equivalent to the current Visual Studio Professional – in other words a pretty high-end featured version (certainly compared to the up-to-now free “Express” editions) would be made available to individuals and also to organisations that had less than 5 developers using the tool and with a turnover of less than $1 million.</p>  <p>Then something really cool happened a few days later. It ended up as an image in the Microsoft Azure VM portal.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/0508.image_6625889A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/0508.image_5F00_6625889A.png"><img title="image" style="display: inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/40/06/metablogapi/7875.image_thumb_55AD179F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-06-metablogapi/7875.image_5F00_thumb_5F00_55AD179F.png" width="340" height="374" /></a> </p>  <p>You can now provision a Windows Server 2012 R2 with VSCE already installed (and it happens to also have the Azure SDK installed as well). Windows Server 2012 R2 is pretty close to Windows 8/8.1. So you get a very modern development environment which can be provisioned in 9 clicks and a short wait of between 5 and 8 minutes….</p>  <p>You then simply make a remote desktop connection to the machine over the Internet. This has even been made easy by the provision of a “Connect” button in the portal.</p>  <p>What makes this even more incredible is that with a free Azure trial subscription – you can provision this system and use it for free for the 30-day duration of the subscription.</p>  <p>I ran a cloud dev camp yesterday and added this in as the first lab-task. We’ve normally required the delegates to turn up with their laptops pre-configured. But yesterday, they provisioned their own dev machine in the cloud and then used that machine to build further services which they provisioned to the cloud. It’s the very start of one of the huge use-cases we’re seeing for Azure: Dev-and-Test in the cloud. From the conversations I had with people afterwards, it’s really fired a few imaginations as they think of the range of possibilities for their own companies’ dev and test environments.</p>  <p>The first few minutes of this video I just recorded shows you how to use a free Azure subscription (you can sign up for that <a href="https://aka.ms/mscloudtrial">right here</a>) to provision a dev workstation. I then go on to show you, very quickly, how to provision a couple of Azure services: an Azure website and an Azure Cloud Service. Really just because you might as well use Azure if you’ve got a free subscription. </p>  <p>&#160;</p> <object width="560" height="315"><param name="movie" value="https://www.youtube.com/v/zvbIw5twLXk?version=3&amp;hl=en_GB"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/zvbIw5twLXk?version=3&amp;hl=en_GB" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>   <p>&#160;</p>  <p>Have fun.</p>  <p>Planky <a href="https://aka.ms/gbr257">GBR-257</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Document everything you want to know about your Azure IaaS VMs in one line of PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/plankytronixx/document-everything-you-want-to-know-about-your-azure-iaas-vms-in-one-line-of-powershell</link>
      <pubDate>Mon, 27 Oct 2014 03:58:16 GMT</pubDate>
      <dc:creator><![CDATA[...Planky]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/plankytronixx/2014/10/27/document-everything-you-want-to-know-about-your-azure-iaas-vms-in-one-line-of-powershell/</guid>
      <description><![CDATA[Mark Renoden, one of my colleagues from Microsoft Australia/New Zealand has come up with this great...]]></description>
      <content:encoded><![CDATA[<p>Mark Renoden, one of my colleagues from Microsoft Australia/New Zealand has come up with this great single line of powershell that spits out everything you want to know about your VMs</p>  <h5>…</h5>  <h5><font face="cou">Get-AzureVM | ForEach-Object { $vm = $_.name ; Write-Output &quot;$vm VM Properties&quot; ; Write-Output &quot;---------------&quot; ; Format-List -InputObject $_ -Property * ; Write-Output &quot;$vm VM Endpoints&quot; ; Write-Output &quot;---------------&quot; ; Get-AzureEndpoint -VM $_ ; Write-Output &quot;$vm Virtual Disks&quot; ; Write-Output &quot;---------------&quot; ; Get-AzureDisk | where {$_.AttachedTo.RoleName -eq $vm} ; Write-Output &quot;==================================`n&quot; } | Out-File -FilePath &quot;.\myVMs.txt”</font></h5>  <p>Here’s an example output:::</p>  <p>DeploymentName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : planky1   <br /> Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : planky1    <br /> Label&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br /> VM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVM    <br />InstanceStatus&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : ReadyRole    <br />IpAddress&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 100.74.110.11    <br />InstanceStateDetails&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />PowerState&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Started    <br />InstanceErrorCode&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />InstanceFaultDomain&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0    <br />InstanceName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : planky1    <br />InstanceUpgradeDomain&#160;&#160;&#160;&#160;&#160;&#160; : 0    <br />InstanceSize&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Small    <br />AvailabilitySetName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />DNSName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : <a href="http://planky.cloudapp.net/">http://planky.cloudapp.net/</a>    <br /> Status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : ReadyRole    <br />GuestAgentStatus&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVMModel.Guest    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AgentStatus    <br />ResourceExtensionStatusList : {Microsoft.Compute.BGInfo}    <br />PublicIPAddress&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />PublicIPName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />ServiceName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : planky    <br />OperationDescription&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Get-AzureVM    <br />OperationId&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 26f35d0c908f2ad8961a2516f4b8c8a1    <br />OperationStatus&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : OK </p>  <p>planky1 VM Endpoints   <br /> --------------- </p>  <p>LBSetName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :    <br />LocalPort&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 5986    <br /> Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : PowerShell    <br /> Port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 5986    <br /> Protocol&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : tcp    <br />Vip&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 191.239.212.49    <br />ProbePath&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />ProbePort&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0    <br />ProbeProtocol&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />ProbeIntervalInSeconds&#160;&#160; :     <br />ProbeTimeoutInSeconds&#160;&#160;&#160; :     <br />EnableDirectServerReturn : False    <br />Acl&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : {}    <br />InternalLoadBalancerName : </p>  <p>LBSetName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :    <br />LocalPort&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 3389    <br /> Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Remote Desktop    <br /> Port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 58168    <br /> Protocol&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : tcp    <br />Vip&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 191.239.212.49    <br />ProbePath&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />ProbePort&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0    <br />ProbeProtocol&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />ProbeIntervalInSeconds&#160;&#160; :     <br />ProbeTimeoutInSeconds&#160;&#160;&#160; :     <br />EnableDirectServerReturn : False    <br />Acl&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : {}    <br />InternalLoadBalancerName : </p>  <p>planky1 Virtual Disks   <br /> ---------------    <br />AffinityGroup&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br />AttachedTo&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : RoleName: planky1     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DeploymentName: planky1     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; HostedServiceName: planky    <br />IsCorrupted&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : False    <br /> Label&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; :     <br /> Location&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : North Europe    <br />DiskSizeInGB&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 128    <br />MediaLink&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : <a href="https://plankydevcamp.blob.core.windows.net/vhds/planky-planky1-2014-09-25.vhd">https://plankydevcamp.blob.core.windows.net/vhds/planky-planky1-2014-09-25.vhd</a>    <br />DiskName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : planky1-planky1-0-201409250848400102    <br />SourceImageName&#160;&#160;&#160;&#160;&#160; : a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201409.01-en.us-127GB.vhd    <br /> OS&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Windows    <br />OperationDescription : Get-AzureDisk    <br />OperationId&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0f3e0975-06d0-2059-856c-3c6f6d9d1953    <br />OperationStatus&#160;&#160;&#160;&#160;&#160; : Succeeded </p>  <p>==================================</p>  <p>&#160;</p>  <p>Isn’t that just soooo cool. Thanks Mark!</p>  <p>&#160;</p>  <p>Yours etc,</p>  <p>&#160;</p>  <p>Planky</p>]]></content:encoded>
    </item>
  </channel>
</rss>