Archives For azure

powershellOver the past couple of days I gave several talks at the Windows Azure Boot Camp in Minneapolis. Most of these talks, and associated demos, were talks I had already given over the past four months as part of the boot camp series, with one notable exception. One of the last talks I give over the course of the two day boot camps has to do with Azure diagnostics and deployment models. Typically I just show a quick diagnostics demo of how to set up various diagnostic data sources and create scheduled transfers. Today I wanted to add another demo and show how to automate various aspects of deployment using Powershell. To do so I wrote five small scripts you can download here. The following is a description of each script included in the download:

start.ps1 – This script will start the current deployment in the Production slot.

suspend.ps1 – This script will stop the current deployment in the Production slot.

remove.ps1 – This script will delete the current deployment from the Production slot.

increase.ps1 – This script will increase the number of instances of the specified role in the Production slot by 1.

decrease.ps1 – This script will decrease the number of instances of the specified role in the Production slot by 1.

A few notes about the scripts:

  1. I am not a Powershell guru. Allow me to repeat I AM NOT A POWERSHELL GURU. I have no doubt these scripts could be written better, and I plan on improving them as my Powershell knowledge increases. However, I believe they serve the purpose of providing simple examples of how to leverage Powershell and Azure together.
  2. All of the scripts require you to specify the management certificate, subscription id, and service name of the deployment you want to manage. Make sure you update the scripts appropriately with your information.
  3. All of the scripts target the Production slot. If you want to change this to Staging simply replace Production with Staging in the appropriate script.
  4. These scripts don’t show you how to deploy to Production/Staging or how to perform a VIP swap. I’ll be creating scripts to do this over the next week or so.

Happy Powershelling!

(No that’s not a typo)

In a recent post I talked about how you could use Windows Azure Connect to create a virtual private network. Of course, Connect was initially designed to help you connect your instances running in Azure to your on-premises services, data, etc. It’s a great technology and I’ve used it numerous times to demo how you can connect a website running in Azure to an on-premises SQL Server database. However, after installing the Windows Azure SDK 1.4 refresh that was released at MIX, I noticed a slight problem. Specifically, if I deployed code that was configured to leverage Windows Azure Connect and the code was built and packaged with this particular version of the SDK, the Windows Azure Connect local endpoint would not be installed on instances running in Azure after deployment. It had no effect on the personal vpn I setup as part of that recent post, but for the life of me I couldn’t get an endpoint installed in Azure, which, of course, wreaked havoc on several demos. However, I was pretty much convinced it was something I had done wrong (I have been known to make a mistake every now and then).

As of today, I can take some consolidation in the fact that I didn’t do anything wrong (in this particular case). It turns out there was an issue with the refresh, so Microsoft has refreshed the refreshed (thus the title for the post). You can learn more about the issue here. Basically, if you installed the refresh that was released prior to April 25, 2011, you’ll need to uninstall the current version and install the newer version (which you can do with the Web Platform Installer). I’m pleased to say that I went through the uninstall/reinstall process on my machine and was able to get Azure Connect successfully working with instances deployed in Azure after doing so. Problem solved!

By the way, if you want to read more on using Windows Azure Connect to set up a vpn, you should check out this article by the Windows Azure Connect Team – it mentions a certain someone’s post Winking smile.

Back in October of 2010 Microsoft announced the new Virtual Machine (VM) role for its Windows Azure Platform at PDC. As opposed to the Web (link) and Worker (link) roles, the VM role allows you to define the configuration of the operating system you deploy in the Azure environment (with some limitations). You can also control (and are actually responsible for) updates to the operating system. For an overview of the VM role I recommend you read this article on MSDN.

 

Numerous people in the industry heralded this move as Microsoft’s entry into the Infrastructure as a Service (IaaS) space. I, on the other hand, cringed. There are two specific issues I have with the VM role as it exists today. The first is an issue of perception. As I’ve mentioned in other posts I’ve spent the first half of this year helping Microsoft deliver Windows Azure Boot Camps in the central region. During the third module of these events I talk about advanced roles in Windows Azure, and one of the roles I discuss, as you can probably guess, is the VM role. If people aren’t familiar with the Platform as a Service (PaaS) model, they can have a hard time understanding the execution environment of a Web or Worker role. However when I bring up VM role the eyes of the attendees light up. They know what VM’s are, they use them all the time. All of a sudden, they think it just got a whole lot easier to uplift their on-premises installations to Azure. I then get bombarded with questions, lots of questions. Below are just a sampling of questions I’ve received during these sessions:

 

  • “Can I overcome the current SQL Azure size limitations by deploying SQL Server in a VM role?”
  • “Can I deploy a domain controller to Azure using the VM role?”
  • “Can I deploy a SharePoint farm using the VM role?”
  • “Can I deploy Dynamics using the VM role?”

 

What I don’t like about these questions is that I have to answer “Yes, it is technically feasible to deploy [insert technology] with the VM role.” However, I’m usually quick to follow that response with,”…but just because it is technically feasible doesn’t mean you should.” Let’s use SQL Server as an example. If I created a VM with SQL installed I could probably get it running in Azure. My applications could then leverage this database to store more than 50 GB of data. But, what if the rack where my VM running SQL goes down? Well the Azure fabric controller, will take the base VM image with SQL installed and spin up a new instance. Which is great. Except all the data that was on my other VM is gone. You know, that 50+ GB of data. This is because Azure is a stateless environment. If you want your custom built VM’s to run in Azure they need to be stateless as well, which rules out a number of scenarios.

 

Another train of thought is that VM role is intended for legacy applications. I can understand how one could arrive at this conclusion. There is one slight complication. Typically legacy applications don’t run on the latest operating system, hence the term legacy. As of this post, the Windows Azure VM role requires that the VM you build be Windows Server 2008 R2 Enterprise Edition, not exactly your legacy OS. So, if you had grand visions of creating a Windows Server 2003 VM for your application that is dependent on that particular flavor of OS so you could move them to Azure, and yes those apps do exist, it isn’t going to happen. At PDC Microsoft mentioned that they were *looking* at providing support in the VM role for Windows Server 2003 and later, but no official roadmap has been announced.

 

You’re probably thinking to yourself, “Enough already! So, when should I use the VM role?” Well if you read this MSDN article, you’ll see that Microsoft gives three scenarios as valid uses of the role. I’ll take them on one at a time.

 

Long running setup – If you are creating an application that requires a long running setup, you may want to use a VM role to do this processing.

 

Maybe your application does take a long time to get up and running, some apps do. What you have to ask yourself is this, “Is it really worth the additional work required (i.e. patching the OS, deploying updated VM’s,etc.)?” I would argue that in most cases it isn’t. While the VM role isn’t IaaS it is not entirely PaaS, as you are taking on a number of responsibilities that, in a true PaaS model, should fall to the vendor.

 

Error prone installations – If your application has a higher percentage of possible installation problems, you can make sure that the installation finishes successfully before you deploy the image to Windows Azure.

 

Wow! Really?! Is this suggesting that you mask the fact that your application has significant install issues by throwing it in a VM? I’m speechless. This doesn’t pass my smell test for solid guidance. Maybe, just maybe, you should look at fixing your problematic installation. Of course, that’s just my opinion.

.

Manual interaction in the installation – You must use a VM role if your application requires any type of manual interaction in the installation.

 

Hmmm. This one I just don’t get. With the introduction of admin rights and startup tasks in version 1.3 of the Azure SDK, I’m wondering if this scenario is actually valid where people think it may apply.

 

I know you’re probably screaming at your screen by now, “But tell me WHEN to use the VM role!” (Either that or you stopped reading this post altogether.) I honestly wish I could, but the truth is I don’t know. In my opinion, until more guidance is provided and the concerns I raised above have been addressed, it should be avoided altogether.

(Glad I got that off of my chest.)

 

Additional Resources

iStock_000001171816SmallBack in October 2010 at PDC, Microsoft unveiled a new feature of the Windows Azure platform called Windows Azure Connect (which is part of the larger Windows Azure Virtual Network stack). The goal of Windows Azure Connect is as follows:

Windows Azure Connect provides a simple and easy-to-manage mechanism to setup IP-based network connectivity between on-premises and Windows Azure resources. This capability makes it easier for an organization to migrate their existing applications to the cloud by enabling direct IP-based network connectivity with their existing on-premises infrastructure. For example, a company can deploy a Windows Azure application that connects to an on-premises SQL Server database, or domain-join Windows Azure services to their Active Directory deployment. In addition, Windows Azure Connect makes it simple for developers to setup direct connectivity to their cloud-hosted virtual machines, enabling remote administration and troubleshooting using the same tools that they use for on-premises applications.

The basic idea is to enable hybrid solutions that can easily leverage both on-premises and cloud based assets. This is a great resource for enterprises who want to leverage the Windows Azure platform but have some assets that can’t or shouldn’t move to the cloud. However, the cloud just doesn’t have to be for business, you can use it too!

 

This initial idea came to me while getting ready for a business trip. In the past I’ve used things like Windows Live Mesh and Dropbox to sync files to the cloud so I can access them while on the go if needed. I’ve also set up my own vpn to connect to my home network to accomplish the same purpose, but there’s a lot of work and maintenance involved, things I’d rather not spend time doing. So I began to wonder if I could use Windows Azure Connect to set up a vpn back to my home network while on the road. Typically when you see Windows Azure Connect on-premises services are connecting to various roles running in Azure, but I didn’t see a reason why you couldn’t just have remote machines connect to one another using the same technology. Here’s what I did to give it a go:

First I logged on to the Windows Azure Management Portal and click the Virtual Network option that appears in the lower left-hand side menu.

image

I then clicked  on the Install Local Endpoint option and run the installer. This will install a small agent on the machine that will be used to connect to the cloud.

image

Next I repeated steps 1 and 2 for each machine I want to connect through the cloud

However, having the agent on each machine wasn’t enough, a group had to be created in the management portal. The group enabled me to specify which endpoints (read machines) could talk to one another. I created a group by clicking the Create Group button

image

Which resulted in the following dialog appeared

image

Obviously I needed to provide a name and description, but there are a couple of other things to note:

(a) When I clicked the Add button I received a list of all the machines I installed the agent on. I selected them as endpoints I wanted to connect.

(b) I also had to be sure to click the “Allow connections between endpoints in group” checkbox to enable my machines to talk to one another.

Since I was only connecting my machines to each other and not any Azure roles I ignored the bottom half of the dialog.

All I then had to do was wait for the group configuration to get pushed to each machine that was part of the group I created (it took < 5 minutes).

And that’s it. Within 15 minutes I created a VPN that enabled me to access my network from anywhere.

Yay Cloud!

Additional Windows Azure Connect Resources

Windows Azure Virtual Network

Connecting Local Computers to Windows Azure Roles

Getting Started with Windows Azure Connect

Tutorial: Setting up Windows Azure Connect

Overview of Windows Azure Connect

Checklist for Configuring Connections for Windows Azure Roles

Checklist for Joining a Windows Azure Role to Your Domain

How to: Configure Windows Azure Connect

Troubleshooting Windows Azure Connect

On April 12th I’m speaking at an Innovations in Integration event RBA is co-sponsoring with Microsoft. I’ll be speaking on cloud integration tools. It’s shaping up to be a great event. The details are below. I hope to see you there!

Register Here

Logistics

Date
April 12, 2011

Time
11:30am – 4:15pm

Location
Microsoft
8300 Norman Center Drive
Suite 950
Bloomington, MN 55437

Overview

Most large organizations today typically work in a fairly heterogeneous environment with disparate systems. Connecting the systems and applications sitting across the diverse platforms and tying them to the business processes has become one of the top priorities for most organizations. As they continue to evolve towards a cloud strategy – to take advantage of the economic and scale benefits – the need to have a robust Integration Platform escalates. Microsoft offers a tremendous opportunity for customers to make a paradigm shift in the way they do business to maximize their benefits and profitability while maintaining an optimized cost structure.
 
Don’t miss this exciting opportunity to learn how we can help you beat the demands of today’s difficult economy, about our commitment to BizTalk Server and how we plan to continue to innovate in the integration space helping you begin your journey to the Cloud.

Agenda

11:30am – 12:00pm: Registration and Lunch

12:00pm – 12:50pm: Opening Keynote – Innovations in Integration and the Future Roadmap
Speaker: Tony Meleg, Microsoft
This session will provide an overview of Microsoft’s on-premise and cloud integration technologies as well as discuss their future roadmap.

1:00pm – 1:50pm: Customer Case Study – Ceridian
Speaker: Ceridian Corporation
Ceridian’s technical leadership team will discuss how they are utilizing a full complement of Microsoft integration technologies to transform their business with their Ceridian InViewTM Workforce Management product line.

2:00pm – 2:50pm: Technical Drilldown – Cloud Integration Tools
Speakers: Adam Grocholski, RBA Consulting and Rajinder Singh, Microsoft
This session will include a discussion and demonstration of Azure’s integration technologies including AppFabric Service Bus, Access Control, Caching and Windows Azure Connect.

3:00pm – 3:50pm: Technical Drilldown – On-Premise Integration Tools
Speaker: Andy Morrison, RBA Consulting
Microsoft BizTalk Server 2010’s new features and Windows Server AppFabric will be discussed. Their complementary features will also be demonstrated.

4:00pm – 4:15pm: Speaker Roundtable Discussion: When to Use What? Q & A

4:15pm: Prize Drawing and Wrap-up

Register Here

wabcI am please to announce that my company (RBA) is partnering with Microsoft to host a one day Azure bootcamp in Denver, CO on April 20th. The event will be held at the Microsoft office located at 7595 Technology Way, Suite 400, Denver, CO 80237 from 8:00 AM to 4:00 PM. The agenda I have lined up for the day is below.

You can get more info and register for the event here.

I recommend that you reserve your spot now as these are popular events that fill up fast. I hope to see you there!!

Agenda

Time Session
7:45 AM – 8:00 AM Welcome/Continental Breakfast
Provided by RBA Consulting
8:00 AM – 9:00 AM Windows Azure Platform Overview
This session provides an overview of the Windows Azure Platform. After this presentation you will understand the services Microsoft is providing as part of the Windows Azure Platform, the key concepts, and how to get started.
9:00 AM – 10:00 AM Windows Azure Compute
This session covers the basic concepts of Windows Azure compute such as roles, instances, service models
and configuration.
10:00 AM – 11:00 AM Windows Azure Storage
This session covers the Windows Azure storage services. Blobs, tables, queues, drives, and the CDN are
discussed in this presentation.
11:00 AM – 12:00 PM Lab: Intro to Windows Azure
In this hands-on lab, you will explore the basic elements of a Windows Azure service by creating a simple
GuestBook application that demonstrates many features of the Windows Azure platform, including web and worker roles, blob storage, table storage, and queues.
12:00 PM – 1:00 PM Lunch
Provided by RBA Consulting
1:00 PM – 2:00 PM Intro to SQL Azure
This session provides a high-level overview of SQL Azure from a developer perspective.
2:00 PM – 3:00 PM Lab: Intro to SQL Azure
In this lab, you will walk through a series of simple use cases for SQL Azure such as: managing logins, creating database objects and query your database.
3:00 PM – 4:00 PM Managing, Debugging, and Monitoring Windows Azure Applications
Learn how to manage your Windows Azure subscriptions, how to deploy, how to monitor, and how to troubleshoot your running instances in this session.

I’m pleased to announce that RBA, in partnership with Microsoft is kicking off the Azure in the Cloud User Group in Dallas on March 3, 2011. Here are the details:

Azure in the Cloud User Group – facilitated by RBA Consulting in partnership with Microsoft

Kick-off Lunch Event
Thursday, March 3, 2011
11:30am – 1:30pm
Location: Microsoft Office, Irving – Visual Basic 4060 Conf. Room  

Come for lunch and meet with others as we seek to:

  • Understand Windows Azure as it evolves
  • Share techniques, patterns, trends, and practices
  • Connect with people that have a cloud strategy

Kick-off Event Agenda

  • Lunch, Welcome and Introductions
  • Remarks by Microsoft Specialists
  • Vision of Azure in the Cloud User Group
  • Presentation: Azure Forming a Cloud: Ask Why, What, When, Where, and How
    By Greg Cowin, RBA Consulting

You can register for the event here: http://www.clicktoattend.com/?id=153957

If you’re in the Dallas area, I recommend you find time to attend this kick-off event. It promises to be a great one.

Enjoy!

At today’s Azure Boot Camp in Dallas, a number of people had issues working with the demos for the Access Control Service labs. This was due in large part to IIS not being completely configured on their local machines. At one point in time their was a single document on MSDN that outlined everything you need to do to configure your machine to run the emulator. That document is now obsolete. The content that was in that document is now in several documents on MSDN. To ensure you have IIS configured correctly, you can take a look at the following two documents:

However, these won’t get you all the way there for the labs. You’ll also need to install the following components for IIS6 compatiblity:

  • IIS Metabase
  • IIS6 Configuration Compatiblity

To do this, follow these steps:

  1. Open Control Panel
  2. Open Programs
  3. Click on Turn Windows features  on or off
  4. Navigate to the Internet Information Services node
  5. Open the Web Management Tools node
  6. Open IIS6 Management Compatibility
  7. Check IIS Metabase and IIS6 Configuration compatibility
  8. Click OK

Hope this helps!

Yesterday Mike Benkovich hosted a webcast on Windows Azure AppFabric. Mike did most of the talking and I answered questions as they popped up during the course of the event. The bulk of the presentation was focused on Access Control. As I Mike said in a post webcast call

Access Control is kind of like flossing your teeth. Everybody knows they should do, but nobody gets excited about it.

While this may be true, you should take a look at Windows Azure AppFabric Access Control as it is fairly straightforward to implement and takes the burden of authentication away from your applications.

The presentation also touches on two other pieces Windows Azure AppFabric, the Service Bus and Caching. I highly recommend you take some time out of your day (or night) to take a listen to the replay of the meeting. You can get it here.

{Every now and then I find that I have to do some kind of configuration magic to get my development environment working the way I want it to. I promptly forget it until I have to do it again 3-6 months later when I replace my machine. By then I have no idea what I did so I have to look it up again. The point of this Note to Self series is to remind me of exactly what I did so I don’t have to try to remember the name of some odd command line tool and the various parameters that go along with it.}

As I’ve mentioned in previous posts, I’m helping to facilitate a number of Azure Bootcamps around the US. One of the technologies I’m really excited about showing off Windows Azure Connect. If you don’t know what Windows Azure Connect is, here’s a 10,000 foot description:

With Windows Azure Connect, you can use a simple user interface to configure IPsec protected connections between computers or virtual machines (VMs) in your organization’s network, and roles running in Windows Azure. After you configure these connections, role instances in Windows Azure use IP addressing like that of your other networked resources, rather than having to use some form of external virtual IP addressing.

To demo the technology I thought I’d try to use one of the hands-on-labs that comes with the Windows Azure Platform Training Kit. The goal behind the demo is to get an hosted in Windows Azure to connect to an instance of SQL Server running on your local (i.e. non-cloud) machine. I went through the demo several times with absolutely no luck. Now, admittedly, I’m not one to read and follow directions that closely, so my initial thought was that I skipped a step or twelve somewhere along the way. However, after carefully going through the lab several additional times I figured something might be missing from the lab, or there was a certain configuration not taken into account. Sure enough there was. During the course of the hands-on-lab I had to create an inbound rule for my firewall to enable my Azure app to talk to SQL Server on my laptop via TCP port 1433. By default, when you create a rule edge traversal is blocked. If you don’t know what edge traversal is, here’s a quick summary:

Edge traversal allows your computer to accept unsolicited inbound packets that have passed through an edge device such as a Network Address Translation (NAT) router or firewall.

In order for SQL Server on my laptop to receive traffic (unsolicited) from Azure, I had to change the edge traversal setting for my rule to “Allow edge traversal” (this setting can be found under the advanced tab of the firewall rule). Once I made this minor change Azure was able to connect to my local SQL database. Pure awesomeness!