Showing posts with label resourcemanager. Show all posts
Showing posts with label resourcemanager. Show all posts

Reading Notes #296





Need to Nuke an Azure Subscription?

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

I use very intensely my my.visualstudio (aka MSDN) Azure subscription, to create content for a demo or just to try new feature. So frequently I need to do some cleaning.


Here a little script that will completely delete all resources of every resources group inside a specific subscription. To be able to execute this script you will need Azure PowerShell cmdlets.

The script asks you to login-in then list all the subscriptions that this account has access. Once you specify which one, it will list all the resource grouped by resource group. Then as a final warning, it will require one last validation before nuking everything.

Be careful.

#= Very dangerous interactive script that delete all rescources 
#= from all rescourcegroup in a specific subscription

# How to install and configure Azure PowerShell

# Login

# Get a list of all Azure subscript that the user can access
$allSubs = Get-AzureRmSubscription 

>$allSubs | Sort-Object Name | Format-Table -Property ame, SubscriptionId, State

$theSub = Read-Host "Enter the subscriptionId you want to clean"

Write-Host "You select the following subscription. (it will be display 15 sec.)" -ForegroundColor Cyan
Get-AzureRmSubscription -SubscriptionId $theSub | Select-AzureRmSubscription 

#Get all the resources groups
$allRG = Get-AzureRmResourceGroup

foreach ( $g in $allRG){
    Write-Host $g.ResourceGroupName -ForegroundColor Yellow 
    Write-Host "------------------------------------------------------`n" -ForegroundColor Yellow 
    $allResources = Find-AzureRmResource -ResourceGroupNameContains $g.ResourceGroupName
        $allResources | Format-Table -Property Name, ResourceName
        Write-Host "-- empty--`n"
    Write-Host "`n`n------------------------------------------------------" -ForegroundColor Yellow 

$lastValidation = Read-Host "Do you wich to delete ALL the resouces previously listed? (YES/ NO)"
    foreach ( $g in $allRG){
        Write-Host "Deleting " $g.ResourceGroupName 
        Remove-AzureRmResourceGroup -Name $g.ResourceGroupName -Force -WhatIf
    Write-Host "Aborded. Nothing was deleted." -ForegroundColor Cyan

The code is also available on Github:

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.


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 #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 #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 #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 #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.


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


~ Frank

Reading Notes #225

Postman Cloud



Reading Notes #224




Reading Notes #206



  • Learn You Node with VS Code (G. Andrew) - This post is really an excellent starting point to learn Node.js. It gives good references, tools, and tips.


  • MVP Award Update - Oct 2015 - This post explains the changes done to the MVP program to improve it. A must to all current and future MVP candidates.

Reading Notes 193

chaos-monkey-3_480Suggestion of the week




Image from  Inside Azure Search: Chaos Engineering

Reading Notes #189

2015-06-15_0745Suggestion of the week




Reading Notes #187

2015-05-30 12.54.59




Reading Notes #173

longscarfSuggestion of the week



C# Tips
C# Tips_coverBy Jason Roberts
Publisher: Leanpub
Released: December 2014

This book it undoubtedly for people who already know C#. If you want to learn C# by doing the best practices, I would strongly suggest to start with something else. However, if you already know how to code, and you want to improve your, or got this little plus; this book is a must.

It’s not a very big book, but all the zones are covered. It’s split into three parts. The first one will provides many good this to improve the performance of your code, customizes your debug experience, and more. The second part will focus on the very useful design patterns that we should all have in our back pocket. Finally, the third and last section introduces tools and frameworks (NUnits, Moq, etc.) to facilitate your work.

I would definitely recommend this book to any developer. The book is available in all the digital format for free, but if you like it consider giving a donation. :)


~Frank Boucher