필터 AWS CLI 출력 - AWS Command Line Interface

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

필터 AWS CLI 출력

AWS Command Line Interface (AWS CLI) 에는 출력을 필터링하는 데 개별적으로 또는 함께 사용할 수 있는 서버 측 필터링과 클라이언트 측 필터링이 모두 있습니다. AWS CLI 서버 측 필터링이 먼저 처리되고 클라이언트 측 필터링에 대한 출력을 반환합니다.

  • 서버 측 필터링은 API에서 지원되며, 일반적으로 --filter 매개 변수를 사용하여 구현합니다. 이 서비스는 대량 데이터 세트에 대한 HTTP 응답 시간을 단축할 수 있는 일치하는 결과만 반환합니다.

  • 클라이언트측 필터링은 클라이언트가 매개변수를 사용하여 지원합니다. AWS CLI --query 이 파라미터에는 서버 측 필터링에 없을 수 있는 기능이 있습니다.

서버 측 필터링

의 서버측 AWS CLI 필터링은 서비스 API에서 제공합니다. AWS AWS 서비스는 필터와 일치하는 HTTP 응답의 레코드만 반환하며, 이렇게 되면 대량 데이터 세트에 대한 HTTP 응답 시간을 단축할 수 있습니다. 서버 측 필터링은 서비스 API에 의해 정의되므로, 매개 변수 이름과 함수는 서비스마다 달라집니다. 필터링에 사용되는 몇 가지 일반적인 매개 변수 이름은 다음과 같습니다.

특정 명령에 서버 측 필터링이 있는지 여부와 필터링 규칙에 대한 자세한 내용은 참조하십시오.

클라이언트 측 필터링

는 매개 변수와 함께 내장된 JSON 기반 클라이언트측 필터링 AWS CLI 기능을 제공합니다. --query --query 매개 변수는 출력의 내용과 스타일을 사용자 지정하는 데 사용할 수 있는 강력한 도구입니다. --query 매개 변수는 서버에서 다시 오는 HTTP 응답을 받아, 결과를 필터링한 후에 이를 표시합니다. 필터링하기 전에 전체 HTTP 응답이 클라이언트로 전송되므로, 클라이언트 측 필터링은 대량 데이터 세트에 대한 서버 측 필터링보다 느릴 수 있습니다.

쿼리는 JMESPath 구문을 사용하여 출력을 필터링하는 표현식을 만듭니다. JMESPath 구문에 대해 알아보려면 JMESPath 웹사이트에서 자습서를 참조하세요.

중요

지정한 출력 유형에 따라 --query 옵션 작동 방식이 변경됩니다.

  • 지정하는 --output text 경우 --query 필터가 적용되기 전에 출력에 페이지가 매겨지고 는 출력의 각 페이지에서 쿼리를 한 번씩 AWS CLI 실행합니다. 이로 인해, 쿼리에는 예상치 못한 추가 출력이 발생할 수 있는 각 페이지의 첫 번째 일치하는 요소가 포함됩니다. 출력을 추가로 필터링하려면 head 또는 tail 등 다른 명령줄 도구를 사용할 수 있습니다.

  • --output json, --output yaml 또는 --output yaml-stream을 지정하면 해당 출력을 하나의 네이티브 구조로 완전히 처리한 뒤에 --query 필터를 적용합니다. 는 전체 구조에 대해 쿼리를 한 번만 AWS CLI 실행하여 필터링된 결과를 생성한 다음 출력합니다.

시작하기 전에

이 예제에서 사용된 필터 표현식을 사용할 때는 터미널 셸에 올바른 인용 규칙을 사용해야 합니다. 자세한 내용은 AWS CLI에서 문자열에 따옴표 사용 단원을 참조하세요.

다음 JSON 출력은 --query 매개 변수가 생성할 수 있는 결과물의 예를 보여줍니다. 이 출력은 별도의 Amazon EC2 인스턴스에 연결된 세 가지 Amazon EBS 볼륨을 설명합니다.

$ 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 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }

식별자

식별자는 출력 값의 레이블입니다. 필터를 만들 때 식별자를 사용하여 쿼리 결과 범위를 좁힙니다. 다음 출력 예제에서는 Volumes, AvailabilityZone, AttachTime 등 모든 식별자가 강조 표시됩니다.

$ 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 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }

자세한 내용은 JMESPath 웹사이트식별자를 참조하세요.

목록에서 선택

목록 또는 배열은 [VolumesAttachments 등 대괄호 “시작하기 전에” 뒤에 오는 식별자입니다.

구문

<listName>[ ]

배열의 모든 출력을 필터링하려면 와일드 카드 표기법을 사용할 수 있습니다. 와일드카드 표현식은 * 표기법을 사용하여 요소를 반환하는 데 사용되는 표현식입니다.

다음 예제에서는 모든 Volumes 내용을 쿼리합니다.

$ aws ec2 describe-volumes \ --query '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": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]

인덱스별로 배열의 특정 볼륨을 보려면 배열 인덱스를 호출합니다. 예를 들어, Volumes 배열의 첫 번째 항목은 인덱스가 0이고 Volumes[0] 쿼리가 생성됩니다. 배열 인덱스에 대한 자세한 내용은 JMESPath 웹 사이트인덱스 표현식을 참조하세요.

$ 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 }

인덱스별로 특정 범위의 볼륨을 보려면 다음 구문과 함께 slice를 사용합니다. 여기서 start는 시작 배열 인덱스이고, stop은 필터가 처리를 중지하는 인덱스이고, step은 건너뛰기 간격입니다.

구문

<arrayName>[<start>:<stop>:<step>]

다음 항목 중 하나라도 슬라이스 표현식에서 생략된 경우, 다음 기본값을 사용합니다.

  • 시작 - 목록의 첫 번째 인덱스, 0.

  • 중지 - 목록의 마지막 인덱스.

  • 단계 - 건너뛰기 단계 없음. 여기서 값은 1입니다.

처음 두 볼륨만 반환하려면 다음 예제와 같이 시작 값 0, 중지 값 2, 단계 값 1을 사용합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[0:2:1]' [ { "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[0:2:1]에서 Volumes[:2](으)로 줄일 수 있습니다.

다음 예제에서는 기본값을 생략하고 전체 배열에서 두 볼륨마다 반환합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[::2]' [ { "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": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]

단계는 다음 예제와 같이 배열의 역순으로 필터링하는 음수를 사용할 수도 있습니다.

$ aws ec2 describe-volumes \ --query 'Volumes[::-2]' [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 }, { "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 } ]

자세한 내용은 JMESPath 웹사이트슬라이스를 참조하세요.

중첩된 데이터 필터링

중첩된 값의 Volumes[*] 필터링 범위를 좁히려면 마침표 및 필터 기준을 추가하여 하위 표현식을 사용합니다.

구문

<expression>.<expression>

다음 예제에서는 모든 볼륨에 대한 모든 Attachments 정보를 보여줍니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments' [ [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ] ]

중첩된 값으로 추가로 필터링하려면 중첩된 각 식별자에 대한 표현식을 추가합니다. 다음 예제에서는 모든 State에 대한 Volumes이(가) 나와 있습니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[*].State' [ [ "attached" ], [ "attached" ], [ "attached" ] ]

결과 병합

자세한 내용은 JMesPath 웹 사이트를 참조하십시오 SubExpressions.

와일드카드 표기법을 제거함으로써 Volumes[*].Attachments[*].State에 대한 결과를 병합하여 Volumes[*].Attachments[].State 쿼리를 생성할 수 있습니다. 병합은 흔히 결과의 가독성을 높이는 데 유용합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].State' [ "attached", "attached", "attached" ]

자세한 내용은 JMESPath 웹사이트병합을 참조하세요.

특정 값에 대한 필터링

목록의 특정 값을 필터링하려면 다음 구문과 같이 필터 표현식을 사용합니다.

구문

? <expression> <comparator> <expression>]

표현식 비교기에는 ==, !=, <, <=, >, >=이(가) 포함됩니다. 다음 예제에서는 VolumeIdsVolumes의 모든 Attached에 대해 State을(를) 필터링합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId' [ [ "vol-e11a5288" ], [ "vol-2e410a47" ], [ "vol-a1b3c7nd" ] ]

그런 다음 이를 병합하여 다음 예제처럼 되게 할 수 있습니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId[]' [ "vol-e11a5288", "vol-2e410a47", "vol-a1b3c7nd" ]

다음 예제에서는 크기가 20보다 작은 모든 VolumeIdsVolumes을(를) 필터링합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[?Size < `20`].VolumeId' [ "vol-2e410a47", "vol-a1b3c7nd" ]

자세한 내용은 JMESPath 웹 사이트필터 표현식을 참조하세요.

파이핑 표현식

필터 결과를 새 목록으로 파이핑한 후, 다음 구문을 사용하여 다른 표현식으로 결과를 필터링할 수 있습니다.

구문

<expression> | <expression>]

다음 예제에서는 Volumes[*].Attachments[].InstanceId 표현식의 필터 결과를 가져와 배열의 첫 번째 결과를 출력합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId | [0]' "i-a071c394"

이 예제는 먼저 다음 표현식에서 배열을 생작성하여 이 작업을 수행합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId' "i-a071c394", "i-4b41a37c", "i-1jd73kv8"

그런 다음 해당 배열의 첫 번째 요소를 반환합니다.

"i-a071c394"

자세한 내용은 JMESPath 웹 사이트파이프 표현식을 참조하세요.

여러 식별자 값에 대한 필터링

여러 식별자를 필터링하려면 다음 구문을 사용하여 다중 선택 목록을 사용합니다.

구문

<listName>[].[<expression>, <expression>]

다음 예제에서는 VolumeIdVolumeType이(가) Volumes 목록에서 필터링되어 다음 표현식이 생성됩니다.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType]' [ [ "vol-e11a5288", "standard" ], [ "vol-2e410a47", "standard" ], [ "vol-a1b3c7nd", "standard" ] ]

중첩된 데이터를 목록에 추가하려면 다른 다중 선택 목록을 추가합니다. 다음 예제에서는 중첩 InstanceId 목록에서 StateAttachments도 필터링하여 이전 예제를 확장합니다. 그러면 다음과 같은 표현식이 생성됩니다.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State]]' [ [ "vol-e11a5288", "standard", [ [ "i-a071c394", "attached" ] ] ], [ "vol-2e410a47", "standard", [ [ "i-4b41a37c", "attached" ] ] ], [ "vol-a1b3c7nd", "standard", [ [ "i-1jd73kv8", "attached" ] ] ] ]

더 읽기 쉽게 하려면 다음 예제와 같이 표현식을 병합합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State][]][]' [ "vol-e11a5288", "standard", [ "i-a071c394", "attached" ], "vol-2e410a47", "standard", [ "i-4b41a37c", "attached" ], "vol-a1b3c7nd", "standard", [ "i-1jd73kv8", "attached" ] ]

자세한 내용은 JMESPath 웹 사이트다중 선택 목록을 참조하세요.

식별자 값에 레이블 추가

이 출력을 더 읽기 쉽게 하려면 다음 구문을 사용하여 다중 선택 해시를 사용합니다.

구문

<listName>[].{<label>: <expression>, <label>: <expression>}

식별자 레이블이 식별자 이름과 같을 필요는 없습니다. 다음 예제에서는 VolumeType 값에 VolumeType 레이블을 사용합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}' [ { "VolumeType": "standard", }, { "VolumeType": "standard", }, { "VolumeType": "standard", } ]

간단히, 다음 예제에서는 각 레이블의 식별자 이름을 유지하고 모든 볼륨에 대해 VolumeId, VolumeType, InstanceIdState을(를) 표시합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}' [ { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" }, { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" } ]

자세한 내용은 JMESPath 웹 사이트다중 선택 해시를 참조하세요.

함수

JMESPath 구문에는 쿼리에 사용할 수 있는 많은 함수가 포함되어 있습니다. JMESPath 함수에 대한 자세한 내용은 JMESPath 웹 사이트기본 제공 함수를 참조하세요.

함수를 쿼리에 통합하는 방법을 보여주기 위해 다음 예제에서는 sort_by 함수를 사용합니다. sort_by 함수는 다음 구문을 사용하여 표현식을 정렬 키로 사용해 배열을 정렬합니다.

구문

sort_by(<listName>, <sort expression>)[].<expression>

다음 예제에서는 이전의 다중 선택 해시 예제를 사용하고 VolumeId(으)로 출력을 정렬합니다.

$ aws ec2 describe-volumes \ --query 'sort_by(Volumes, &VolumeId)[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}' [ { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" }, { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" } ]

자세한 내용은 JMESPath 웹 사이트sort_by를 참조하세요.

고급 --query 예제

특정 항목에서 정보를 추출하는 방법

다음 예제에서는 목록에서 특정 항목을 찾은 다음 해당 항목에서 정보를 추출하는 데 --query 파라미터를 사용합니다. 이 예제에서는 지정된 서비스 엔드포인트에 연결된 모든 AvailabilityZones을(를) 나열합니다. 지정된 ServiceDetails을 가진 ServiceName 목록에서 해당 항목을 추출한 다음, 선택한 항목에서 AvailabilityZones 필드를 출력합니다.

$ aws --region us-east-1 ec2 describe-vpc-endpoint-services \ --query 'ServiceDetails[?ServiceName==`com.amazonaws.us-east-1.ecs`].AvailabilityZones' [ [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e", "us-east-1f" ] ]

지정된 생성 날짜 이후 스냅샷을 표시하는 방법

다음 예제에서는 출력에 사용 가능한 필드를 몇 개만 포함하여 지정된 날짜 이후에 생성된 모든 스냅샷을 나열하는 방법을 보여줍니다.

$ aws ec2 describe-snapshots --owner self \ --output json \ --query 'Snapshots[?StartTime>=`2018-02-07`].{Id:SnapshotId,VId:VolumeId,Size:VolumeSize}' [ { "id": "snap-0effb42b7a1b2c3d4", "vid": "vol-0be9bb0bf12345678", "Size": 8 } ]

최신 AMI를 표시하는 방법

다음 예제에서는 가장 최근에 생성된 5개의 Amazon Machine Image(AMI)를 가장 최근부터 가장 오래된 순으로 정렬하여 나열합니다.

$ aws ec2 describe-images \ --owners self \ --query 'reverse(sort_by(Images,&CreationDate))[:5].{id:ImageId,date:CreationDate}' [ { "id": "ami-0a1b2c3d4e5f60001", "date": "2018-11-28T17:16:38.000Z" }, { "id": "ami-0a1b2c3d4e5f60002", "date": "2018-09-15T13:51:22.000Z" }, { "id": "ami-0a1b2c3d4e5f60003", "date": "2018-08-19T10:22:45.000Z" }, { "id": "ami-0a1b2c3d4e5f60004", "date": "2018-05-03T12:04:02.000Z" }, { "id": "ami-0a1b2c3d4e5f60005", "date": "2017-12-13T17:16:38.000Z" } ]

비정상 Auto Scaling 인스턴스를 표시하려면

다음 예제에서는 지정된 AutoScaling 그룹의 비정상 인스턴스에 대한 InstanceId만 보여줍니다.

$ aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-name My-AutoScaling-Group-Name \ --output text \ --query 'AutoScalingGroups[*].Instances[?HealthStatus==`Unhealthy`].InstanceId'

지정된 태그가 있는 볼륨을 포함하는 방법

다음 예제에서는 test 태그가 있는 모든 인스턴스에 대해 설명합니다. 볼륨에 연결된 test 옆에 또 다른 태그가 있으면, 볼륨은 여전히 결과에 반환됩니다.

아래 표현식은 test 태그가 있는 모든 태그를 배열에 반환합니다. test 태그가 아닌 모든 태그에는 null 값이 포함됩니다.

$ aws ec2 describe-volumes \ --query 'Volumes.Tags[?Value == `test`]'

지정된 태그가 있는 볼륨을 제외하는 방법

다음 예제에서는 test 태그가 없는 모든 인스턴스에 대해 설명합니다. 볼륨에 여러 태그가 있을 수 있으므로 단순 ?Value != `test` 표현식을 사용하면 볼륨을 제외하지 않습니다. 볼륨에 연결된 test 옆에 또 다른 태그가 있으면, 볼륨은 여전히 결과에 반환됩니다.

test 태그가 있는 모든 볼륨을 제외하려면 아래 표현식으로 시작하여 test 태그가 있는 모든 태그를 배열에 반환합니다. test 태그가 아닌 모든 태그에는 null 값이 포함됩니다.

$ aws ec2 describe-volumes \ --query 'Volumes.Tags[?Value == `test`]'

그런 다음 test 함수를 사용하여 모든 양의 not_null 결과를 필터링합니다.

$ aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)]'

결과를 파이핑하여 결과를 병합하면 다음 쿼리가 생성됩니다.

$ aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)] | []'

서버 측 필터링과 클라이언트 측 필터링 결합

서버 측 필터링과 클라이언트 측 필터링을 함께 사용할 수 있습니다. 서버 측 필터링이 먼저 완료되어, --query 매개 변수가 필터링하는 데이터를 클라이언트로 보냅니다. 대규모 데이터 세트를 사용하는 경우 서버 측 필터링을 먼저 사용하면 클라이언트 측 필터링이 제공하는 강력한 사용자 지정을 유지하면서 각 AWS CLI 호출에 대해 클라이언트로 전송되는 데이터 양을 줄일 수 있습니다.

다음 예제에서는 서버 측 필터링과 클라이언트 측 필터링을 둘 다 사용하는 Amazon EC2 볼륨을 나열합니다. 이 서비스는 us-west-2a 가용 영역에서 연결된 모든 볼륨의 목록을 필터링합니다. --query 파라미터는 또한 출력을 50보다 큰 Size 값을 가진 볼륨으로만 제한하며 사용자 정의 이름으로 지정된 필드만 표시합니다.

$ aws ec2 describe-volumes \ --filters "Name=availability-zone,Values=us-west-2a" "Name=status,Values=attached" \ --query 'Volumes[?Size > `50`].{Id:VolumeId,Size:Size,Type:VolumeType}' [ { "Id": "vol-0be9bb0bf12345678", "Size": 80, "VolumeType": "gp2" } ]

다음 예제에서는 여러 기준을 충족하는 이미지의 목록을 가져옵니다. 그런 다음 --query 파라미터를 사용하여 CreationDate를 기준으로 출력을 정렬하고 가장 최근 항목만 선택합니다. 마지막으로 해당 이미지의 ImageId를 표시합니다.

$ aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn*gp2" "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" \ --output text ami-00ced3122871a4921

다음 예제에서는 length로 목록의 항목 수를 계산하여 1000 IOPS 이상인 사용 가능한 볼륨 수를 표시합니다.

$ aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])' 3

추가 리소스

AWS CLI 자동 프롬프트

필터 표현식을 사용하기 시작하면 AWS CLI 버전 2의 자동 프롬프트 기능을 사용할 수 있습니다. 자동 프롬프트 기능은 F5 키를 누를 때 미리 보기를 제공합니다. 자세한 내용은 명령에 AWS CLI 프롬프트 사용 단원을 참조하세요.

JMESPath Terminal

JMESPath Terminal은 클라이언트 측 필터링에 사용되는 JMESPath 표현식을 실험하는 대화형 터미널 명령입니다. jpterm 명령을 사용하면 사용자가 입력할 때 터미널에 즉시 쿼리 결과가 표시됩니다. AWS CLI 출력을 터미널로 직접 파이프하여 고급 쿼리 실험이 가능합니다.

다음 예제에서는 aws ec2 describe-volumes 출력을 JMESPath Terminal에 직접 파이핑합니다.

$ aws ec2 describe-volumes | jpterm

JMesPath 터미널 및 설치 지침에 대한 자세한 내용은 JMesPath 터미널 온을 참조하십시오. GitHub

jq 유틸리티

jq 유틸리티는 클라이언트 측의 출력을 사용자가 원하는 출력 형식으로 변환하는 방법을 제공합니다. 설치 지침에 대한 자세한 내용 jq 및 지침은 jq on을 참조하십시오. GitHub