AWS CLI 출력 형식 설정 - AWS Command Line Interface

AWS CLI 출력 형식 설정

이 주제에서는 AWS Command Line Interface(AWS CLI)의 다양한 출력 형식에 대해 설명합니다. AWS CLI은(는) 다음 출력 형식을 지원합니다.

  • json - 출력은 JSON 문자열로 형식이 지정됩니다.

  • yaml - 출력은 YAML 문자열로 형식이 지정됩니다.

  • yaml-stream - 출력은 스트리밍되고 YAML 문자열로 형식이 지정됩니다. 스트리밍을 통해 대용량 데이터 유형을 빠르게 처리할 수 있습니다.

  • text - 출력은 여러 줄의 탭으로 구분된 문자열 값으로 형식이 지정됩니다. 출력을 grep, sed 또는 awk와 같은 텍스트 프로세서로 전달하는 데 사용할 수 있습니다.

  • table - 출력은 셀 테두리를 형성하기 위해 +|- 문자를 사용하여 표로 형식이 지정됩니다. 일반적으로 읽기는 쉽지만 프로그래밍 방식으로는 유용하지 않은 "인간 친화적" 형식으로 정보를 표시합니다.

출력 형식을 선택하는 방법

구성 주제의 설명과 같이, 다음 세 가지 방법으로 출력 형식을 지정할 수 있습니다.

  • output 파일의 명명된 프로파일에서 config 옵션 사용 - 다음 예제에서는 기본 출력 형식을 text로 설정합니다.

    [default] output=text
  • AWS_DEFAULT_OUTPUT 환경 변수 사용 - 다음 출력은 변수가 변경되거나 세션이 끝날 때까지 이 명령줄 세션의 명령 형식을 table로 지정합니다. 이 환경 변수를 사용하면 config 파일에 설정된 값을 재정의합니다.

    $ export AWS_DEFAULT_OUTPUT="table"
  • 명령줄에서 --output 옵션 사용 - 다음 예제에서는 이 명령의 출력만 json으로 설정합니다. 명령에 이 옵션을 사용하면 현재 설정된 환경 변수 또는 config 파일의 값을 재정의합니다.

    $ aws swf list-domains --registration-status REGISTERED --output json

JSON 출력 형식

JSON은 AWS CLI의 기본 출력 형식입니다. 대부분의 프로그래밍 언어는 내장된 기능 또는 공개적으로 사용 가능한 라이브러리를 사용하여 JSON 문자열을 쉽게 디코딩할 수 있습니다. JSON 출력을 강력한 방법으로 --query 옵션과 결합하여 AWS CLI JSON 형식의 출력을 필터링하고 서식을 지정할 수 있습니다.

--query로 수행할 수 없는 고급 필터링의 경우 명령줄 JSON 프로세서인 jq를 고려할 수 있습니다. http://stedolan.github.io/jq/에서 이 처리기를 다운로드하고 공식 자습서를 찾아볼 수 있습니다.

다음은 JSON 출력의 예제입니다.

$ aws iam list-users --output json
{ "Users": [ { "Path": "/", "UserName": "Admin", "UserId": "AIDA1111111111EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/Admin", "CreateDate": "2014-10-16T16:03:09+00:00", "PasswordLastUsed": "2016-06-03T18:37:29+00:00" }, { "Path": "/backup/", "UserName": "backup-user", "UserId": "AIDA2222222222EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/backup/backup-user", "CreateDate": "2019-09-17T19:30:40+00:00" }, { "Path": "/", "UserName": "cli-user", "UserId": "AIDA3333333333EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/cli-user", "CreateDate": "2019-09-17T19:11:39+00:00" } ] }

YAML 출력 형식

YAMLYAML 형식의 문자열을 출력하거나 소비하는 AWS CloudFormation 같은 서비스 및 도구와 YAML 형식의 템플릿 지원을 이용하여 프로그래밍 방식으로 출력을 처리하는 데 적합합니다.

--query로 수행할 수 없는 고급 필터링의 경우 명령줄 YAML 프로세서인 yq를 고려할 수 있습니다. 다운로드할 수 있으며 에 설명서가 있습니다https://mikefarah.gitbook.io/yq/

다음은 YAML 출력의 예제입니다.

$ aws iam list-users --output yaml
Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

YAML 스트림 출력 형식

yaml-stream 형식을 사용하면 YAML 형식을 활용하는 동시에 데이터를 스트리밍하여 대용량 데이터 세트를 더 응답성이 우수하고 빠르게 볼 수 있습니다. 전체 쿼리가 다운로드되기 전에 YAML 데이터를 보고 사용할 수 있습니다.

--query로 수행할 수 없는 고급 필터링의 경우 명령줄 YAML 프로세서인 yq를 고려할 수 있습니다. 다운로드할 수 있으며 에 설명서가 있습니다http://mikefarah.github.io/yq/

다음은 yaml-stream 출력의 예제입니다.

$ aws iam list-users --output yaml-stream
- IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

다음은 yaml-stream 파라미터를 사용하여 스트리밍된 YAML 콘텐츠의 페이지 매김과 함께 --page-size 출력의 예입니다.

$ aws iam list-users --output yaml-stream --page-size 2
- IsTruncated: true Marker: ab1234cdef5ghi67jk8lmo9p/q012rs3t445uv6789w0x1y2z/345a6b78c9d00/1efgh234ij56klmno78pqrstu90vwxyx Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

텍스트 출력 형식

text 형식은 AWS CLI 출력을 탭으로 구분된 줄로 구성합니다. grep, sedawk와 같은 기존 Unix 텍스트 도구 및 PowerShell에서 수행하는 텍스트 처리에 효과적입니다.

text 출력 형식은 아래와 같은 기본 구조를 따릅니다. 열은 기본 JSON 객체의 해당 키 이름을 기준으로 알파벳 순서로 정렬됩니다.

IDENTIFIER sorted-column1 sorted-column2 IDENTIFIER2 sorted-column1 sorted-column2

다음은 text 출력의 예제입니다. 각 필드는 다른 항목과 구분된 탭이며 빈 필드가 있는 추가 탭이 있습니다.

$ aws iam list-users --output text
USERS arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 / AIDA1111111111EXAMPLE Admin USERS arn:aws:iam::123456789012:user/backup/backup-user 2019-09-17T19:30:40+00:00 /backup/ AIDA2222222222EXAMPLE backup-user USERS arn:aws:iam::123456789012:user/cli-user 2019-09-17T19:11:39+00:00 / AIDA3333333333EXAMPLE cli-user

네 번째 열은 PasswordLastUsed 필드이며, 해당 사용자가 AWS Management Console 콘솔에 로그인하지 않기 때문에 마지막 두 항목은 비어 있습니다.

중요

text 출력을 지정하는 경우 일관된 동작을 보장하기 위해 항상 --query 옵션도 사용하는 것이 좋습니다.

텍스트 형식이 출력 열을 AWS 서비스에서 반환하는 기본 JSON 객체의 키 이름에 따라 알파벳 순서로 정렬하고, 유사한 리소스에 항상 동일한 키 이름이 있는 것은 아니기 때문입니다. 예를 들어 Linux 기반 Amazon EC2 인스턴스의 JSON 표시에는 Windows 기반 인스턴스의 JSON 표시에 없는 요소가 있을 수 있으며 반대의 경우도 마찬가지입니다. 또한 리소스에는 향후 업데이트에서 추가되거나 제거되어 열 순서를 변경하는 키-값 요소가 있을 수 있습니다. 이러한 경우 --query를 사용하면 출력 형식을 완전히 제어할 수 있도록 text 출력의 기능이 향상됩니다.

다음 예제에서 명령은 표시할 요소를 지정하고 목록 표기법 [key1, key2, ...]를 사용하여 열의 순서를 정의합니다. 이렇게 하면 예상 열에 올바른 키 값이 항상 표시된다는 완전한 확신을 사용자에게 제공할 수 있습니다. 마지막으로 AWS CLI에서 존재하지 않는 키 값으로 None을 출력하는 방식을 살펴보십시오.

$ aws iam list-users --output text --query 'Users[*].[UserName,Arn,CreateDate,PasswordLastUsed,UserId]'
Admin arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 AIDA1111111111EXAMPLE backup-user arn:aws:iam::123456789012:user/backup-user 2019-09-17T19:30:40+00:00 None AIDA2222222222EXAMPLE cli-user arn:aws:iam::123456789012:user/cli-backup 2019-09-17T19:11:39+00:00 None AIDA3333333333EXAMPLE

다음 예제는 grep 명령의 awk 출력에 textaws ec2 describe-instances를 사용하는 방법을 보여줍니다. 첫 번째 명령은 text 출력에 각 인스턴스의 가용 영역, 현재 상태 및 인스턴스 ID를 표시합니다. 두 번째 명령은 us-west-2a 가용 영역에서 실행 중인 모든 인스턴스의 인스턴스 ID만 표시하는 출력을 처리합니다.

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text
us-west-2a running i-4b41a37c us-west-2a stopped i-a071c394 us-west-2b stopped i-97a217a0 us-west-2a running i-3045b007 us-west-2a running i-6fc67758
$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | grep us-west-2a | grep running | awk '{print $3}'
i-4b41a37c i-3045b007 i-6fc67758

다음 예제는 한 단계 더 나아가 출력을 필터링하는 방법뿐만 아니라 출력을 사용하여 중지된 각 인스턴스의 인스턴스 유형 변경을 자동화하는 방법을 보여줍니다.

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[State.Name, InstanceId]' --output text | > grep stopped | > awk '{print $2}' | > while read line; > do aws ec2 modify-instance-attribute --instance-id $line --instance-type '{"Value": "m1.medium"}'; > done

text 출력은 PowerShell에서도 유용할 수 있습니다. text 출력의 열은 탭으로 구분되어 있으므로 PowerShell의 `t 구분 기호를 사용하여 출력을 배열로 쉽게 분할할 수 있습니다. 다음 명령은 첫 번째 열(InstanceId)이 AvailabilityZone 문자열과 일치할 경우 세 번째 열(us-west-2a)의 값을 표시합니다.

PS C:\>aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | %{if ($_.split("`t")[0] -match "us-west-2a") { $_.split("`t")[2]; } }
-4b41a37c i-a071c394 i-3045b007 i-6fc67758

이전 예제에서 --query 파라미터를 사용하여 기본 JSON 객체를 구문 분석하고 원하는 열을 추출하는 방법을 알아보았지만, 교차 플랫폼 호환성이 문제가 되지 않을 경우 PowerShell 자체 기능으로 JSON을 처리할 수 있습니다. 대부분의 명령 셸에서 요구하듯이 출력을 텍스트로 처리하는 대신, PowerShell에서는 ConvertFrom-JSON cmdlet을 사용하여 계층적으로 구조화된 객체를 생성할 수 있습니다. 그런 다음 해당 객체에서 직접 원하는 멤버에 액세스할 수 있습니다.

(aws ec2 describe-instances --output json | ConvertFrom-Json).Reservations.Instances.InstanceId
작은 정보

텍스트를 출력하고 --query 파라미터를 사용하여 단일 필드로 필터링하는 경우, 탭으로 구분된 값이 한 줄로 출력됩니다. 각 값을 별개의 줄로 가져오려면 다음 예제에 표시된 대로 출력 필드를 괄호 안에 넣으면 됩니다.

탭으로 구분되어 한 줄로 출력:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].GroupName"
HRDepartment Developers SpreadsheetUsers LocalAdmins

[GroupName]을 괄호 안에 넣어서 각 값을 자체의 줄에 출력:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].[GroupName]"
HRDepartment Developers SpreadsheetUsers LocalAdmins

테이블 출력 형식

table 형식은 사람이 읽을 수 있는 복잡한 AWS CLI 출력 표시를 표 형식으로 생성합니다.

$ aws iam list-users --output table
----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ListUsers | +---------------------------------------------------------------------------------------------------------------------------------------------------------------+ || Users || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || Arn | CreateDate | PasswordLastUsed | Path | UserId | UserName || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || arn:aws:iam::123456789012:user/Admin | 2014-10-16T16:03:09+00:00 | 2016-06-03T18:37:29+00:00 | / | AIDA1111111111EXAMPLE | Admin || || arn:aws:iam::123456789012:user/backup/backup-user | 2019-09-17T19:30:40+00:00 | | /backup/ | AIDA2222222222EXAMPLE | backup-user || || arn:aws:iam::123456789012:user/cli-user | 2019-09-17T19:11:39+00:00 | | / | AIDA3333333333EXAMPLE | cli-user || +---------------------------------------------------------------------------------------------------------------------------------------------------------------+

--query 옵션을 table 형식과 결합하여 원시 출력에서 미리 선택한 요소 집합을 표시할 수 있습니다. 사전 표기법과 목록 표기법의 출력 차이에 주의하십시오. 첫 번째 예제에서는 열 이름이 알파벳 순서로 정렬되고 두 번째 예제에서는 이름 없는 열이 사용자가 정의한 방식으로 정렬됩니다. --query 옵션에 대한 자세한 내용은 AWS CLI 출력 필터링 단원을 참조하십시오.

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