練習 - 查詢有關 VM 的系統和執行階段資訊
既然已建立虛擬機器,我們可以透過其他命令取得其相關資訊。
讓我們從執行 vm list
開始。
az vm list
此命令會傳回此訂用帳戶中定義的「所有」虛擬機器。 您可以透過 --resource-group
參數將輸出篩選至特定資源群組。
輸出類型
請注意,我們到目前為止執行之所有命令的預設回應類型為 JSON。 這很適用於指令碼,但大多數人發現它難以閱讀。 您可以透過 --output
旗標變更任何回應的輸出樣式。 例如,在 Azure Cloud Shell 中執行下列命令以查看不同的輸出樣式。
az vm list --output table
除了 table
,您還可以指定 json
(預設)、jsonc
(以色彩標示的 JSON) 或 tsv
(定位字元分隔值)。 請使用上述命令嘗試一些變化形式,以查看差異。
取得 IP 位址
另一個有用的命令是 vm list-ip-addresses
,其會列出 VM 的公用和私人 IP 位址。 如果這些位址已變更,或者您未在建立期間擷取它們,則可以隨時擷取這些位址。
az vm list-ip-addresses -n SampleVM -o table
這會傳回如下輸出:
VirtualMachine PublicIPAddresses PrivateIPAddresses
---------------- ------------------- --------------------
SampleVM 168.61.54.62 10.0.0.4
提示
請注意,我們會以 -o
的形式使用 --output
旗標的縮寫語法。 您可以將 Azure CLI 命令的大部分參數縮短為單一虛線和字母。 例如,您可以將 --name
縮短為 -n
,並將 --resource-group
縮短為 -g
。 這便於輸入鍵盤字元,但為了清楚起見,建議您在指令碼中使用完整選項名稱。 如需每個命令的詳細資料,請參閱文件。
取得 VM 詳細資料
我們可以執行 vm show
命令,依名稱或識別碼取得特定虛擬機器的詳細資訊。
az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM
這會傳回相當大的 JSON 區塊,其中包含關於 VM 的各種資訊,包括連結的存放裝置、網路介面,以及 VM 所連接之資源的所有物件識別碼。 同樣地,我們可以變更為表格格式,但這會省略幾乎所有有趣的資料。 反之,我們可以轉為使用 JSON 的內建查詢語言,稱為 JMESPath。
使用 JMESPath 將篩選新增至查詢
JMESPath 是一種專為 JSON 物件建置的業界標準查詢語言。 最簡單的查詢是指定可在 JSON 物件中選取索引鍵的識別碼。
例如,給定物件:
{
"people": [
{
"name": "Fred",
"age": 28
},
{
"name": "Barney",
"age": 25
},
{
"name": "Wilma",
"age": 27
}
]
}
我們可以使用查詢 people
來傳回 people
陣列的值陣列。 如果我們只想要其中一位人員,則可以使用索引子。 例如,people[1]
會傳回:
{
"name": "Barney",
"age": 25
}
我們也可以新增特定的限定詞,這些限定詞會根據某些準則傳回物件子集。 例如,新增限定詞 people[?age > '25']
會傳回:
[
{
"name": "Fred",
"age": 28
},
{
"name": "Wilma",
"age": 27
}
]
最後,我們可以藉由新增只傳回名稱的 select: people[?age > '25'].[name]
來限制結果:
[
[
"Fred"
],
[
"Wilma"
]
]
JMESQuery 有其他幾個有趣的查詢功能。 當您有空時,請參閱 JMESPath.org 網站上提供的線上教學課程。
篩選我們的 Azure CLI 查詢
在對 JMES 查詢有基本了解之後,可將篩選新增至像是 vm show
命令等查詢所傳回的資料。 例如,我們可以擷取系統管理員的使用者名稱:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "osProfile.adminUsername"
我們可以取得指派給 VM 的大小:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query hardwareProfile.vmSize
或者,若要擷取網路介面的所有識別碼,我們可以執行此查詢:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id"
此查詢技術適用於所有 Azure CLI 命令,而且您可加以使用以在命令列上提取特定資料。 其也可用於指令碼。 例如,您可以從 Azure 帳戶提取值,並將其儲存在環境或指令碼變數中。 如果您決定以這種方式加以使用,新增 --output tsv
參數 (這可以縮短為 -o tsv
) 將很實用。 這會傳回只包含具有定位字元分隔符號之實際資料值的結果。
例如:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id" -o tsv
傳回文字:/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic