Skip to main content

Azure Subscription Limits

During my time of doing a migrate of IaaS workload in to Azure I came across an issue where it reported that I had ran out of "core" resources. I was thinking how could I run out of resources? this is the cloud isn't it? is it not unlimited? After a quick case logged with Microsoft I was told we hit our "default limits" set by Microsoft.  You can raise these default limits by raising a case and as long as it is not an Azure limit you are hitting then they increase it free of charge for you. Every subscription for Azure has service limits, quotas, and constraints which are documented here on their website. To see your usage in your subscription you would select your "subscription", then "usage + quotas" and it will then display all your service quotas and how much you have used. You will see a button where you can request to increase the quotas.


This is good visually but ultimately we want to run a script where we can get the information so that  we can be manipulated it. For example we may want to run the script daily and then if the usage is above 75% then alert me then at least I can be more proactive. As you can see the above diagram has service limits for networks, IP addresses and NSG which at the moment I am not working on. As I am using Azure as a IaaS platform the information I am interested are related to CPU, storage accounts and number of VMs. There is a powershell command "Get-AzureRMVMUsage" which I will demostrate below on my script below. The script just goes through the subscription and every Azure location and returns the information about VM usages in each of the Azure location. The full script is available here at github. So here is the breakdown of my script

First we store some variables such as your Subscription name and the file name where we will store all the output of the information. The file will write to the current working directory that you are in. If there is a specific location you want to write the file to then please put in the full path and name of the file you want.
# Variables
$SubName = "Your Subscription Name"
# The file will be written in current directory that you have ran this script from
$FileName = "you file name.txt"

Next we login to your subscription and select the subscription you have defined above in the variable. We select the subscription in case your account has multiple subscriptions attached to it and we want to focus on a specific one
# Login to Azure Account
Login-AzureRmAccount
# Select Subscription to be used
Select-AzureRmSubscription -SubscriptionName $SubName

We run a command to store all the locations Azure has in a variable
# Get all available locations in Azure
$locations = Get-azureRmLocation

We are now at the heart of the script where we are looping through all the locations in Azure and running the command to gather all the VM usage in that particular location and write that information out to the text file
Foreach ($location in $Locations)
{
# Print to screen which location we are looping through
Write-Host $Location.Location
# Write the location to the file
$Location.Location | Out-File $FileName -Append
# Write the usage to the file
Get-AzureRMVMUsage -Location $location.Location | Out-File $FileName -Append
}

That's all in my script to get going. Once you run the script you will see something similar to what I have below showing just one of the Azure locations.

As you can see there are important information such as "current value" and "limits" against resources. So my example above you can see for "Total Regional vCPUs" for West Europe. I am currently using 6 and my limit is 20. As this information is retrieved via script it means that we can think of ways to apply some logic to only alert us when maybe a certain value is hit or a % value is met. Hope this script will get you started to expand and make it more powerful.

Comments

Popular posts from this blog

Rolling back a version of ESXi

There is an option in VMware where after you have performed an major upgrade of ESXi you can roll back to your previous version. The benefit of this is that you would not need to reinstall your ESXi and its configuration if you had issues with the new software. I had to do this on one occassion in my lab where I upgraded from 6.5 to 6.7 and my VMs would not run because the CPU was not supported in 6.7. Please remember if you are using ISO method to upgrade ESXi please ensure you select "Upgrade ESXi, preserve VMFS datastore". Selecting "Install ESXi, preserve VMFS datastore" does not mean preserving datastore means retaining ESXi as it will still do a clean install of ESXi. This method does not work for vSphere 7.0 as there are changes to the partitions on the boot device. Below are the steps to roll back to a previous version which is quite straight forward. As always perform an backup of your host configuration before you upgrade or rollback ( KB2042141 ). I have

Configuring ESXi 6 host to send logs to Syslog Server

In my previous post I talked about configuring VMware Syslog server for Windows which is installed and enabled by default on installation of vCenter 6 for Windows. I will now describe the basic configuration that is required on an ESXi 6 host to be able to send logs out to a syslog server using my vCenter as the example. 1) Navigate to your ESXi host within vCenter. Go to "Manage" tab and select "Settings" followed by "Advanced System Settings". Look for the settings "Syslog.global.loghost" and highlight this settings. Click the pencil icon to edit the configuration for this setting. 2) You can now add the host name or ip address of your syslog server/s. You can enter just hostname or IP address, use udp://hostname:514 or ssl://hostname:1514 to be more specific on the port and protocol to be used. If you have multiple hosts then you use the comma (,) to separate each server i.e. udp://192.168.0.1:514,udp://192.168.0.2:514 3)We n

Custom ESXi Image - ISO using PowerCLI

There comes a time when you have purchased a new hardware to run your ESXi software and discover that the installable base media provided by VMware does not include the drivers or the drivers are out of date. In the world of Windows (Plug and Play) it would discover the hardware and prompt you to provide the drivers so that Windows would install/update the drivers for the hardware. For ESXi if the drivers are not present during load time then the hardware will possibly not work. VMware uses VIB (vSphere Installation Bundle) as a way for vendors to distribute their drivers. To install these VIBs you can either use Update Manager or command line (esxcli). Now this is all good but it does mean you have to first install the base ESXi then use one of the steps above to install/update the drivers.   Some people might feel that it is OK to update the drivers using the above methods but what if it was the network card that was the new hardware and you needed new drivers. Without the net