Have you heard about the Azure Instance Metadata Service?
When I implemented my blog in Azure I used a handy PowerShell “one-liner” to easily query specific information about the VM I was currently logged into.
The code uses the Metadata Service URL scheme do “drill” into the Data Categories.
So here is the code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# “One-liner” for easily querying the Azure Instance Metadata Service. | |
"network/interface/0/ipv4/ipAddress/0/publicIpAddress" | Tee-Object –Variable p | Out-Null ; Invoke-RestMethod –Headers @{"Metadata"="true"} –URI "http://169.254.169.254/metadata/instance/$($p)?api-version=2017-08-01&format=text" | |
# Instead of "network/interface/0/ipv4/ipAddress/0/publicIpAddress" you can use any | |
# path throgh the instance metadata json structure. | |
# You can find a sample json structure here: | |
# { | |
# "compute": { | |
# "location": "westus2", | |
# "name": "Win10", | |
# "offer": "Windows", | |
# "osType": "Windows", | |
# "placementGroupId": "", | |
# "platformFaultDomain": "0", | |
# "platformUpdateDomain": "0", | |
# "publisher": "MicrosoftVisualStudio", | |
# "resourceGroupName": "****", | |
# "sku": "Windows-10-N-x64", | |
# "subscriptionId": "****", | |
# "tags": "", | |
# "version": "2017.10.12", | |
# "vmId": "****", | |
# "vmSize": "Standard_B2s" | |
# }, | |
# "network": { | |
# "interface": [ | |
# { | |
# "ipv4": { | |
# "ipAddress": [ | |
# { | |
# "privateIpAddress": "10.1.2.4", | |
# "publicIpAddress": "51.143.***.***" | |
# } | |
# ], | |
# "subnet": [ | |
# { | |
# "address": "10.1.2.0", | |
# "prefix": "24" | |
# } | |
# ] | |
# }, | |
# "ipv6": { | |
# "ipAddress": [] | |
# }, | |
# "macAddress": "******" | |
# } | |
# ] | |
# } | |
# } |
You can also create a function which gives a much easier flow of repetitive usage:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Function for easily querying the Azure Instance Metadata Service | |
Function AzMeta { | |
Param( [Parameter(ValueFromPipeline)] $p ) | |
Invoke-RestMethod ` | |
–Headers @{"Metadata"="true"} ` | |
–URI "http://169.254.169.254/metadata/instance/$($p)?api-version=2017-08-01&format=text" | |
} | |
# Get the public IP if your Azure instance | |
"network/interface/0/ipv4/ipAddress/0/publicIpAddress" | AzMeta | |
# Get the Virtual Machine Size/SKU, e.g. "Standard_B2s" | |
"compute/vmSize" | AzMeta |
Note: During the creation of this blog I experimented with different instance types: virtual machines, containers, App Services. But I ended up using App Service for Containers and it mostly seems to work great.
Header photo by Rodger_Evans