What's your plan B when the Azure Portal is not responding

(Ce billet en aussi disponible en français.)

You are about to test the last version of your solution. You just need to change some configuration in the Micosoft Azure Portal, and you are good to go. To do it, you log in the portal at http://portal.azure.com and navigate to your component and... Error! What you see is a little sad cloud.

OneSadCloud

The Problem

This just happened to the team I'm working with. They needed to change the traffic manager's endpoint to do a traffic test. Unfortunately, the grid that contains the Endpoint was in a bad status and was not available. It looked like a deadened!

ManySadClouds

But it is really? Of course not. Here what you can do.

The Solution

Remember Microsoft is sharing the same API the Azure portal is using. That the beauty of the Azure Portal, you can use it has a convivial way to do your what you need, or you can access it via many different SDKs that are available today: .Net, Java, Node.js, Php, Python, Ruby and more! You also have command line tools that could help to manage your Azure services and apps using scripts.
To know more about all the SDK available or the command-line refer to the Azure SDKs documentation pages online.

Remember

This time we were in a Windows environment, and we needed to modify one Endpoint of a Taffic Manager. Here what we did using Azure PowerShell Cmdlets:

# Login to our account
Login-AzureRmAccount

# Set the context we will work in. Use Get-AzureRmSubscription to list all your subscriptions. 
Set-AzureRmContext -SubscriptionName "MySubscriptionName"

# List All Traffic Manager Profile 
Azure Get-AzureTrafficManagerProfile 

# Load our endpoint in a variable, change the value we need and put it back.
$endpoint = Get-AzureRmTrafficManagerEndpoint -Name myendpoint -ProfileName myprofile -ResourceGroupName "MyResourceGroupName" -Type ExternalEndpoints
$endpoint.Weight = 50
Set-AzureRmTrafficManagerEndpoint -TrafficManagerEndpoint $endpoint


In this case, we used the Azure Resource Manager (ARM) commands, but all the commands are also available in the service mode. To know more about how to deploy with ARM you can read my previous post. To see all the command available supported with ARM to configure your solution, go see the documentation online.
Happy testing!


References:


Reading Notes #234

tree in a blue skySuggestion of the week


Cloud


Programming


Miscellaneous



Reading Notes #233

mprofileCloud


Programming


Miscellaneous



Azure Resource Manager (ARM) for beginners

(Ce billet en aussi disponible en français: Azure Resource Manager (ARM) pour débutants)

You know that image where you see people pulling a cart with square wheels, a man on the side wants to show them a circle wheel but the group reply they are too busy to care... Well, that was me with Azure Resource Manager (ARM). I knew it was good, but it looks too complicated, so I was waiting. Last weekend, I decided it was enough I needed to learn it! Right after few minutes, you cannot imagine my disappointment! It's so simple, so powerful and also so fast. This post explains how to deploy an ARM template, and how it works.

squarewheels

5 easy steps to deploy our first ARM template


To get started the easiest way possible I decided to use Visual Studio. For this sample let's create simple Windows Virtual Machine (VM). Only five steps are required to do it:

Step #1 - Create an Azure Resource Project

From Visual Studio create a new project of type Azure Resource Group. Be sure to have already installed on your machine the latest version of Azure SDK and Visual Studio updates.

step-1-Create_arm_project.1

Step #2 - Select the Arm template

This is where we select what we want in our template. Many options are available in VisualStudio and a lot more can be found on Github at: Azure Arm Git Template. In our case, let's select the sample Windows Virtual Machine, and click the Ok button.

step-2-Select_Tempplate

Step #3 - Deploy the new template

Visual Studio will now generate multiple files, we will come back to it later, right now we will only deploy our solution. Right-click on the project et select Deploy.

step-3-Start_deploy

Step #4 - Configure the deployment

Our first deployment is mostly ready, we just need to specify few details like the subscription and the resource group. Once you click Deploy, one last thing will be asked: the adminPassword.

step-4-Config_deploy

Step #5 (the easiest one) - Enjoy

Voila! After few minutes, the virtual machine will be created, and we should be able to connect remotely to it.

Let's explain the magic


When the project was created, three folders were populated: Script, Template, and Tools. The last one is a bit obvious, it contains AzCopy, a tool to copy files. If you don't know AzCopy, you can learn more in a post I wrote recently.

Open the Deploy-AzureResourceGroup.ps1 contained in the Scripts folder. It's this script that will do all the hard lifting to deploy our rescourceGroup. If we look a bit closer, you will notice some parameters are declared, at the beginning of the file. Two of then should catch our attention.
    [string] $TemplateFile = '..\Templates\WindowsVirtualMachine.json',
    [string] $TemplateParametersFile = '..\Templates\WindowsVirtualMachine.parameters.json',

TemplateFile is the path of our template (the one we selected previously), and the second TemplateParametersFile will contained all the parameters values to fill the blank of our template. This will be especially useful to deploy the same template in a different environment. In fact, this is a really big advantage. You can deploy the exact same schema to your development and production environment just by having two parameters.json file.

Let's have a peek at the template, in this case WindowsVirtualMachine.json. It's a 'json' file, so it's human-friendly, but it can be a bit scary at first. In the image just below, I collapse the collections to be able to emphases the visibility of the three prime elements: parameters, variables, and resources.

jsonTemplate

We already know parameters, so let's jump the variables. This section contains a list of key pair value like: imagePublisher, vmSize, virtualNetworkName, diagnosticsStorageAccountName, etc. Those can be fixed value or dynamics by using other variables or parameters. Here some example:
    "vmSize": "Standard_A2"
    "vhdStorageName": "[concat('vhdstorage', uniqueString(resourceGroup().id))]"
    "virtualNetworkName": "[parameters('virtualNetworkName')]"

Last section but not least: the resources. This is where everything is put together to build the solution you will deploy. The resources are defined by specifying their type, name, and properties. You can assign any value from a static string, parameter value or a variable value.

Now that we know it works, why should we use it


Explain all the advantages to use ARM template could be a post by itself, and go further of the scope of that post. However, here few reasons:
  • A template file is light and easy to keep in a repository.
  • It's very simple to have the exact same template deployed in multiple environments.
  • ARM templates are really fast to deploy.
  • Easy to edit/ customize/ expand.
  • Easy to delete.

In Video Please


If you prefer, I also have a video version of this post.



What's Next


This post was voluntary very simple to be easy to understand. Now it's your turn deploy a modest schema or something more complex. Many different templates can be found at various places: Visual Studio, Azure Arm Git Template, and Azure Quickstart Templates. Great tools exist also to help you to visualize or edit these templates: Azure Resource Explorer and Download Azure Resource Manager Tools for VS Code

Resources:

~ Frank


Reading Notes #232

Microsoft-Canadian-Cloud, from Lixar blobSuggestion of the week


Cloud



Reading Notes #231

tulipSuggestion of the week

  • Introducing docs.microsoft.com - Great post that explains all the nice features of the first glimpse of the new Microsoft documentation. They did a fantastic work, a post to read; a site to remember.

Cloud


Programming


Data


Miscellaneous




Reading Notes #230

15288837503_ba2b786d93_zSuggestion of the week

  • Data Locality - Great troubleshooting session explained, definitely a post to read.

Cloud


Programming


Photo credit: Claus Tom via Foter.com / CC BY-NC-ND


Reading Notes #229

NewLogicAppDesignerCloud


Data


Programming

  • Become a Visual Studio 2015 Power User (Allison Buchholtz-Au, Andrew Hall) - All Visual Studio developers must watch this video, big chance you had a d in your hand and didn't know about it.

Miscellaneous

  • It's a new blog! (Troy Hunt) - A delicious post, thanks Troy to share that with us.


A practical overview of Service Fabric

(Ce billet en aussi disponible en français: Un aperçu pratique de Microsoft Azure Service Fabric)

fabric
During the last Global Azure Bootcamp (April 16), the Montreal edition focused on Azure Service Fabric. The schedule for that day was packed with dynamic presentation and hand-on labs. Either because you were unable to be present or just because you want to learn more, it is not too late. The MsDevMtl team is happy to share with you all our documents we used.

Before you start

  • To be able to do the Hand on Labs you will need:
  • A PC with Windows 7, 8, 8.1 or 10
  • VisualStudio 2015 Update 1 or 2
  • Service Fabric SDK v2.0.135 (or more recent)
  • A Microsoft Azure subscription. If you don't already have one, here a free trial to get you started aka.ms/azuretrialmtl

The One-day Schedule

As you see the complete edition of the Azure Fabric Learning Path contains much more details and labs. Since we had only one day we decided to cherry picked what we thought was the best to get started, but feel free do more.

OneDayLearningPath

  • Intro to services and Service Fabric Overview
  • Labs 1 & 2
  • Application Packaging & deployment
  • Diner
  • Labs 3 & 4
  • MS at scale & High Availability
  • Lab 5
  • Diagnostics & Health policies
  • Lab 6
  • Who is using SF, AoA, Testing
  • Lab 7 & 8
  • Upgrades
  • Lab 9
  • Conclusion

Where to find everything you need


Questions?

All the presentations were done by Alexandre Brisebois (@Brisebois), Stepahne Laporte (@s_lapointe), myself (@fboucheros), and under the supervision of our fantastic bandmaster Guy Barette (@GuyBarrette). Feel free to ask us questions if you get blocked during your journey.




.

Reading Notes #228

IMG_20160416_085010Cloud

  • But Why Do You Trust Your Data? (Buck Woody) - I consider this post as a really great teaser. After ready his post most chances are you will check the video it recommended... and next give a shot to Azure data Catalog.

Programming


Data

  • Analyzing your Azure Search traffic (Berni Torres Garayar) - Great post that explains how to improve our services by listening to our client's search requests, leveraging the new Azure Search Analytics and PowerBi.

Miscellaneous


~Frank


Reading Notes #227

Suggestion of the week


2016-logo-250x169Cloud



MVP Award 2016!

MVP2016_paque

Thank you

Since two years now, the first of April is very special for me. Not because of all the April fool, but because that the date you made me a Microsoft Azure MVP.

I'm very proud and happy to be renew this year again. I wanted to take time to thank you all. I will continue to write and talk about my passions!
See you soon...






Up-comming events



Reading Notes #226

build-2016Microsoft Build 2016


Cloud


Programming



Reading Notes #225

Postman Cloud


Programming


Databases


Reading Notes #224

Cloud


Programming


Miscellaneous


Reading Notes #223

P1020050Cloud


Databases


Programming


Miscellaneous



6 ways to go from Markdown to Azure Web App

Everything started when I wanted to share a blog post in progress to someone for review. I didn't want to create a copy, and I was looking for an extremely simple way to share; like an url. This blog post is about all my journey to find that method and all the great possibilities available. I was really happy to that Azure Web App.
I'm writing in Markdown, it's a syntax I really like because it's simple no special application is required to use it. To know more about it see my previous post: Why I switch to Markdown, First VSCode Tasks in less than 5 minutes and Meet my new best friend: Visual Studio Code. The more I use it, the more I like it. I started using it not only not only for blogging, but also for all kinds of notes.

DropBox

One very good thing about Markdown is the fact that is compatible with all platforms. Because of that, I keep my texts in Dropbox. Why not Google Drive or OneDrive? Because Dropbox automatically generates the HTML version so my reviewer could read it in a beautiful format. The file is share-able very easily and if authenticated my reviewer could write comment.
dropboxpostsharing
In the PRO version, of DropBox, you can give access only to specific user. That would be very nice for sharing files inside a business or more sensible information.
Unfortunately for me, I don't want to force my reviewer to register. Another interesting fact is that relative paths for images aren't supported. So all images/ charts need also to be share individually before added in the text.

Repositories: GitHub, Bitbucket, etc.

By default, most repositories convert markdown file to HTML so very easy to read. It's also a very good way to have a saved copy. But then you need to have a public repository or give access to people...
Only using repository was not good enough in my case because I don't wish to share unfinished work with everyone.

Jekyll


Option 1 - Jekyll

Jekyll is a static website generator written in Ruby. It's really well integrated to Github, and you can even host your blog in a Github repository. However, since I would prefer to keep my in progress work more private, I decided to go with Bitbucket. Bitbucket is a great repository that supports Git and Mercurial system and allowed private repositories.
We could have Jekyll in a Git repository host on Bitbucket that would be hook-up to an Azure Web App with a continuous deployment.
Here the steps:
  1. First create a private repository from Bitbucket.
  2. Clone that fresh repository on your local machine.
  3. Now it's time to create your Jekyll site.
    • If you don't have Ruby or Jekyll already installed on your machine now it's time. It's very easy just follow the instruction on the official website.
    • To create a new site, open a command prompt and type the command: jekyll new NameOfMySite then cd ./NameOfMySite and jekyll serve
    To see your new site you just need to browse to http:localhost:4000. Add your Markdown files to the folder _posts and be sure they respect the naming convention YYYY-MM-DD-Title.md
  4. Now it's time to add all the files to our Git repository with the command git add -A, and before pushing let create a new Azure Web App.
  5. Go to http://portal.azure.com a create a new Azure Web App.
    CreateAzureWebApp
    • From the top left click the "+ New" button.
    • Select Web+ Mobile, then click on Web App
    • Fill-up the name, subscription plan and click the create button.
  6. After few second, the Web App will be ready. It's time to add a continuous deployment to it.
    AddContinuous
    Note: that right now the deployment settings are FTP.
    • In the Web App blade, if not already go in the Setting section.
    • Scroll done the Settings to Continuous deployment and click on it.
    • Now choose your source control, in this case Bitbucket.
  7. It's now time to publish our site to our Remote repository with git push.
  8. In the Azure portal, you will see the deployment progress and history.
    DeploymentHistory
The combination Jekyll / Bitbucket / Azure Web App work great, but we need to generate the code locally and checked-in both source and generated content in the repository. Furthermore, since we need to generate the code, Ruby and Jekyll need to be installed on every machine we will be using.

Option 2 - Jekyll Extension to Azure Web App

I found a really great Azure Web App Extension Jekyll Extenstion on GitHub. That will simplify a lot the process thanks to Cory's works. To use it simple follow the four steps explain on the Github page:

  1. Create an Azure Web App 
  2. Set an App Setting for SCM_COMMAND_IDLE_TIMEOUT to 600. From the Web App blade click on Settings and select Application settings.  Add the new line, and click the save button.
     SCM_AppSetting
  3. Install the Jekyll Site Extension
    • Always From the Web App blade click on Tools, then select Extension
    • Click Add button
    • Found and select Jekyll Extension AddJekyllExtension
  4. Now we need to hook up your Git repository or Push a local (in Azure) Git repository with your Jekyll site.
I really liked this solution. It's very simple to install. Because it used a repository, I can keep a historic of all my texts. Moreover, only the texts and images are in the repository, and since the site is generated in the cloud, no need to install anything on other machines.
WriteFromVSCode
Directly from Visual Studio Code, I can write my article, and when I'm read I just need to do a push (still inside VSCode). The site will automatically be built and deployed in my Azure Web App.

Santra.Snow

NancylogoWhile doing my research, I found Sandra.Snow another static site generator inspired from Jekyll but in .Net using Nancy library.
To use it, a little bit of work is required. The easiest way is to fork the Github project and compile the solution to get dlls and exes.
  • Create a new folder for your site [MySnowSite].
  • In MySnowSite folder, create another folder Sandra.Snow.Processor and copy/paste: Nancy.dll, Nancy.Testing.dll, Nancy.ViewEngines.Razor.dll and Snow.exe generated previously.
  • You can now copy the Sandra.Snow/SnowSite/Snow folder into MySnowSite folder.
  • Add deployment and deploy.cmd files from Sandra.Snow/SnowSite into MySnowSite folder.
SandraSnowFolder
Few changes were required in deploy.cmd (line: 29, 31, 56, 57)
@echo off

:: ----------------------
:: KUDU Deployment Script
:: ----------------------

:: Setup
:: -----

setlocal enabledelayedexpansion

SET ARTIFACTS=%~dp0%artifacts

IF NOT DEFINED DEPLOYMENT_SOURCE (
  SET DEPLOYMENT_SOURCE=%~dp0%.
)

IF NOT DEFINED DEPLOYMENT_TARGET (
  SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------

:: 3. Build Snow Site
echo -----
echo Start - Building the Snow Site
echo Running Snow.exe config=%DEPLOYMENT_SOURCE%\Snow\
pushd %DEPLOYMENT_SOURCE%
call  %DEPLOYMENT_SOURCE%\Sandra.Snow.Processor\Snow.exe config=%DEPLOYMENT_SOURCE%\Snow\
IF !ERRORLEVEL! NEQ 0 goto error
echo Finish - Building the Snow Site
echo -----


IF NOT DEFINED NEXT_MANIFEST_PATH (
  SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest

  IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
  )
)

IF NOT DEFINED KUDU_SYNC_COMMAND (
  :: Install kudu sync
  echo Installing Kudu Sync
  call npm install kudusync -g --silent
  IF !ERRORLEVEL! NEQ 0 goto error

  :: Locally just running "kuduSync" would also work
  SET KUDU_SYNC_COMMAND=node "%appdata%\npm\node_modules\kuduSync\bin\kuduSync"
)


echo Kudu Sync from "%DEPLOYMENT_SOURCE%\Snow\Website" to "%DEPLOYMENT_TARGET%"
call %KUDU_SYNC_COMMAND% -q -f "%DEPLOYMENT_SOURCE%\Snow\Website" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.deployment;deploy.cmd" 2>nul
IF !ERRORLEVEL! NEQ 0 goto error

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

goto end

:error
echo An error has occured during web site deployment.
exit /b 1

:end
echo Finished successfully.
Like previously created a Azure Web App and hook up a Git repository or push to an Azure one. You can find a lot of information on the blog of Sandra.Snow creator Phillip Haydon.

Bonus

For both Jekyll (option 2) and Sandra.Snow that used Azure Web App continuous deployment use can use Dropbox instead of Git repository. Why would you use Dropbox? Well, since Dropbox is available on any kind of platform, you would be able to write from your iPad or android tablet, or anything! To learn more about how to do it, see one of my previous post: Setup an automatic deployment on Azure with Dropbox in 5 minutes.
Just for the fun, I created one theme for Sandra.Snow that I put on GitHub: Sandra.Snow.NotesTheme, feel free to use it.

Enjoy!

~Frank Boucher

Reading Notes #222

hourglassSuggestion of the week


Cloud


Data



Reading Notes #221

logo_JavaScriptSuggestion of the week

  • Why You Should Learn JavaScript in 2016 (Ken Powers) - I eared a lot of people complaining about Javascript, this excellent post explains why you undeniably, we should all know it, an if it's not the case why 2016 is a great time to learn it.

Cloud


Programming


Data

  • Power BI Service February Update (Amanda Cofsky) - Fantastic! This update will give us the possibility to share outside ou organization... And many other things.

Miscellaneous


~Frank


Reading Notes #220

Logic-AppSuggestion of the week


Cloud


Programming


Data

Book

  • Software Development Book Giveaway! - Cool! A great opportunity, 3 free books are given: Building Microservices, Working Effectively with Legacy Code, and Javascript: The Good Parts.

Miscellaneous



Reading Notes #219

AzureSDK2-8-2Suggestion of the week


Cloud


Programming


Books



Reading Notes #218

GuyAndErikSuggestion of the week


Cloud


Programming


Data



Reading Notes #217

yoman_asciiSuggestion of the week


Cloud


Programming


Miscellaneous