AWS Command Line Interface (CLI) 출력을 `--query`로 제어하고 파이프 라인에서 활용
이것을
% aws organizations describe-organization
{
"Organization": {
"MasterAccountEmail": "[email protected]",
"MasterAccountArn": "arn:aws:organizations::111111111111:account/o-xxxxxxxxxx/111111111111",
"MasterAccountId": "111111111111",
"Id": "o-xxxxxxxxxx",
"AvailablePolicyTypes": [
{
"Status": "ENABLED",
"Type": "SERVICE_CONTROL_POLICY"
}
],
"FeatureSet": "ALL",
"Arn": "arn:aws:organizations::111111111111:organization/o-xxxxxxxxxx"
}
}
이렇게 하는 이야기입니다
% aws organizations describe-organization --query 'Organization.MasterAccountEmail' --output text
[email protected]
그리고 예를 들면 이렇게 적용
% aws ec2 describe-regions --query 'Regions[].{Name:RegionName}' --output text | xargs -I{} aws ec2 describe-availability-zones --region {} --query 'AvailabilityZones[].{c1:RegionName,c2:ZoneName,c3:State}' --output text
eu-north-1 eu-north-1a available
eu-north-1 eu-north-1b available
eu-north-1 eu-north-1c available
ap-south-1 ap-south-1a available
ap-south-1 ap-south-1b available
...(省略)
왜 awscli
--query
옵션을 고집하는가? 먼저 JSON 구문 분석을 일부 도구에 의존하고 싶지 않기 때문입니다.jq 은 이마이치이고, JSON 어째서 JavaScript로 쓰는 것이 가장 자연스러운 생각은 하지만, Node.js 로 실제로 해 보면 이것은 이것으로 귀찮게 느껴 버린다.
첫 번째
describe-organization
자바 스크립트를 사용한다면 이런 느낌입니까?% aws organizations describe-organization | node -e "
const data = [];
process.stdin
.on('readable', () => {
let chunk;
while ((chunk = process.stdin.read()) !== null) {
data.push( chunk );
}
} )
.on('end', () => {
process.stdout.write( JSON.parse( data.join( '' ) ).Organization.MasterAccountEmail );
} );
"
readline 그렇다면 이런 느낌인가
% aws organizations describe-organization | node -e "
const data = [];
require( 'readline' )
.createInterface( { input: process.stdin } )
.on( 'line', ( l ) => {
data.push( l );
} )
.on( 'close', () => {
process.stdout.write( JSON.parse( data.join( '' ) ).Organization.MasterAccountEmail );
} );
"
역시
--query
파라메타로 하는 것이 편한 생각이 듭니다. 이점은 다음과 같은 느낌입니까?--output text
와의 조합으로 이후의 처리에도 파이프로 연결하기 쉽다 --filters
도 유용 원래 이러한 출력 제어라고 하는 것은, 본질적으로 노력하고 싶은 처리가 아니기 때문에, 최대한 최소화시키고 싶은 것입니다
최소화하면, 작은 처리를 조합한 복잡한 것도 보다 쓰기 쉬워집니다
organizations 하지만
aws organizations list-accounts --query 'Accounts[].{Id:Id,Name:Name}' --output text | while read a; do printf "$a\n"; aws organizations list-tags-for-resource --resource-id "`echo $a | awk '{print $1}'`" --query 'Tags[].{Key:Key,Value:Value}' --output table; done
궁리 나름으로 여러가지 활용할 수 있습니다만, 리전이나 계정을 횡단한 조직 통제계의 오퍼레이션등도, 일부러 브라우저에 갈 것도 없고, 이렇게 빨리 CLI로 하면 즐겁습니다.
Reference
이 문제에 관하여(AWS Command Line Interface (CLI) 출력을 `--query`로 제어하고 파이프 라인에서 활용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/o2346/items/a8a00a54002f0485108e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)