1. 程式人生 > >AWS CLI 命令參數學習 如何使用 --query 選項篩選輸出

AWS CLI 命令參數學習 如何使用 --query 選項篩選輸出

使用 post 十分 來看 use nap 樣式 snapshot .org

AWS CLI 使用 --query 選項提供內置輸出篩選功能。為演示其工作方式,我們首先來看看下面的默認 JSON 輸出,它描述了連接到不同 EC2 實例的兩個 EBS (Elastic Block Storage) 卷。

$ aws ec2 describe-volumes
{
 "Volumes": [
 {
 "AvailabilityZone": "us-west-2a",
 "Attachments": [
 {
 "AttachTime": "2013-09-17T00:55:03.000Z",
 "InstanceId": "i-a071c394",
 "VolumeId": "vol-e11a5288
", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ {
"AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z
", "Size": 8 } ] }

首先,我們可以使用以下命令僅顯示 Volumes 列表中的第一個卷。

$ aws ec2 describe-volumes --query Volumes[0]
{
 "AvailabilityZone": "us-west-2a",
 "Attachments": [
 {
 "AttachTime": "2013-09-17T00:55:03.000Z",
 "InstanceId": "i-a071c394",
 "VolumeId": "vol-e11a5288",
 "State": "attached",
 "DeleteOnTermination": true,
 "Device": "/dev/sda1"
 }
 ],
 "VolumeType": "standard",
 "VolumeId": "vol-e11a5288",
 "State": "in-use",
 "SnapshotId": "snap-f23ec1c8",
 "CreateTime": "2013-09-17T00:55:03.000Z",
 "Size": 30
}

現在,我們使用通配符表示法 [*] 循環訪問整個列表,並篩選出三個元 素:VolumeId、AvailabilityZone 和 Size。請註意,詞典表示法要求您為每個鍵提供一個別名,如: {Alias1:Key1,Alias2:Key2}。詞典本身是無序的,因此,此種結構中的鍵別名的順序在某些情況下可能不一 致。

$ aws ec2 describe-volumes --query Volumes[*].{ID:VolumeId,AZ:AvailabilityZone,Size:Size}
[
 {
 "AZ": "us-west-2a",
 "ID": "vol-e11a5288",
 "Size": 30
 },
 {
 "AZ": "us-west-2a",
 "ID": "vol-2e410a47",
 "Size": 8
 }
]

在使用詞典表示法時,您也可以使用串聯的鍵(如 key1.key2[0].key3)來篩選深度嵌套在結構中的元 素。下面的示例通過 Attachments[0].InstanceId 鍵(其別名為簡單的 InstanceId)對此進行演 示。

$ aws ec2 describe-volumes --query Volumes[*].
{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}[
 {
 "InstanceId": "i-a071c394",
 "AZ": "us-west-2a",
 "ID": "vol-e11a5288",
 "Size": 30
 },
 {
 "InstanceId": "i-4b41a37c",
 "AZ": "us-west-2a",
 "ID": "vol-2e410a47",
 "Size": 8
 }
]

您也可以使用列表表示法篩選多個元素:[key1, key2]。這樣做會對每個對象將篩選出的所有屬性格式化 為一個排序 列表,而不管類型如何。

$ aws ec2 describe-volumes --query Volumes[*].[VolumeId, Attachments[0].InstanceId,
 AvailabilityZone, Size][
 [
 "vol-e11a5288",
 "i-a071c394",
 "us-west-2a",
 30
 ],
 [
 "vol-2e410a47",
 "i-4b41a37c",
 "us-west-2a",
 8
 ]
]

要按特定字段的值篩選結果,請使用 JMESPath "?" 運算符。以下示例查詢僅輸出 us-west-2a 可用區中的 卷:

$ aws ec2 describe-volumes --query Volumes[?AvailabilityZone==`us-west-2a`]

Note 在指定諸如以上 JMESPath 查詢表達式中的“us-west-2”這樣的文字值時,必須將該值放在反引號 (`) 中,以便使它能夠正確讀取。 在以下部分中將更詳細地解釋如何組合使用這三種輸出格式。--query 選項是十分強大的工具,您可用 它來自定義輸出的內容和樣式。有關底層 JSON 處理庫 JMESPath 的更多示例和完整規範,請訪問 http:// jmespath.org/specification.html。

AWS CLI 命令參數學習 如何使用 --query 選項篩選輸出