Aws-cli: ๋ชจ๋“  ์ง€์—ญ์˜ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 02์›” 08์ผ  ยท  17์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: aws/aws-cli

aws ์ œ์–ดํŒ์—์„œ cli๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ „ํ™˜ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋งค์šฐ ์ด์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€์—ญ ๋‚ด ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ง€์—ญ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค๋ช…ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” ์ ์–ด๋„ ๋ชจ๋“  ec2 ์˜์—ญ์˜ ์ถœ๋ ฅ์„ ์–ป์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‚˜์”ฉ(์˜ˆ: aws ec2 list-regions ) ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cli๊ฐ€ ์ œ์–ดํŒ๊ณผ ๋‹ค๋ฅธ ์˜์—ญ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ถ„๋ช…ํžˆ ๋‚ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ "us-west-2" ์ง€์—ญ์—์„œ ์‹œ์ž‘๋˜๊ณ  ์žˆ์ง€๋งŒ(์ ์–ด๋„ ์ง€๊ธˆ๊นŒ์ง€๋Š”) ์ œ์–ดํŒ ์–ด๋””์—์„œ๋„ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋‚ด ๊ธฐ๋ณธ ์ง€์—ญ์„ ๋‚˜์—ดํ•˜๋Š” ๊ณณ์„ ์ „ํ˜€ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

aws ๋‚ด๋ถ€์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Google์—์„œ ์—ฌ๊ธฐ๋กœ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ์€ AWS CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ง€์—ญ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜์—ดํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์œ„์˜ ๋…ผ์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ).

for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region
done

๋ชจ๋“  17 ๋Œ“๊ธ€

์ฝ˜์†”์—์„œ๋Š” ์ง€์—ญ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋” ์ž์„ธํ•œ ์„ค๋ช… ํ…์ŠคํŠธ๋กœ ์ง€์—ญ ์‹๋ณ„์ž๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค. us-west-2 ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋ฆฌ๊ฑด์— ์œ„์น˜ํ•œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์ž…๋‹ˆ๋‹ค. ์ฝ˜์†” ํŽ˜์ด์ง€์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์ง€์—ญ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋“œ๋กญ๋‹ค์šด์ด ์žˆ์Šต๋‹ˆ๋‹ค(์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ์กฐ).

๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์—ญ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด ์—†์œผ๋ฏ€๋กœ ์ด ๋ชฉ๋ก ์„ ์ฐธ์กฐํ•ด์•ผ describe-regions ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. CLI๋Š” ์„œ๋น„์Šค API์— ๋Œ€ํ•œ ๋ž˜ํผ์ด๋ฏ€๋กœ ์„œ๋น„์Šค๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋‹ค์ค‘ ์ง€์—ญ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด S3๋Š” ๋Œ€๋ถ€๋ถ„ ์ง€์—ญ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ๋‹ค๋ฅธ ์ง€์—ญ์—์„œ ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด ์ง€์—ญ์— --region ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ง€์—ญ์€ ๊ตฌ์„ฑ ํŒŒ์ผ(UNIX ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ~/.aws/config ์— ์žˆ์œผ๋ฉฐ aws configure ๋ช…๋ น์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

regions

Google์—์„œ ์—ฌ๊ธฐ๋กœ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ์€ AWS CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ง€์—ญ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜์—ดํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์œ„์˜ ๋…ผ์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ).

for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region
done

๋ˆˆ์œผ๋กœ JSON์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋ถ„๋“ค์„ ์œ„ํ•ด jq ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข€ ๋” ์ •ํ™•ํ•œ ์š”์•ฝ์„ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region | jq '.Reservations[] | ( .Instances[] | {state: .State.Name, name: .KeyName, type: .InstanceType, key: .KeyName})'
done

์ถœ๋ ฅ ์˜ˆ:

Listing Instances in region:'us-west-1'...
{
  "state": "stopped",
  "name": "scanner-1",
  "type": "t2.micro",
  "key": "scan1"
}
{
  "state": "stopped",
  "name": "cors",
  "type": "t2.micro",
  "key": "cors"
}
{
  "state": "stopped",
  "name": "scanner-2",
  "type": "t2.medium",
  "key": "scan2"
}

@nonbeing ๋ฉ‹์ง€๋‹ค ! ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ„์นญ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ Linux, Mac ๋ฐ Windows์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” AWS PowerShell .NET Core ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

foreach ($Region in (Get-AWSRegion)) {
  Get-EC2Instance -Region $Region.Region
}

๊ฒฐ๊ณผ

GroupNames    : {}
Groups        : {}
Instances     : {asdf}
OwnerId       : 123
RequesterId   : 123
ReservationId : r-asdf

GroupNames    : {}
Groups        : {}
Instances     : {asdf}
OwnerId       : 123
RequesterId   : 123
ReservationId : r-asdf

GroupNames    : {}
Groups        : {}
Instances     : {asdf}
OwnerId       : 123
RequesterId   : 123
ReservationId : r-asdf

Format-Table์„ ์‚ฌ์šฉํ•œ ์ถœ๋ ฅ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ๋ฒ„์ „์˜ AWS PowerShell ๋ชจ๋“ˆ์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋Š” PowerShell "๋ชฉ๋ก" ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Format-Table ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ ํ˜•์‹์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$InstanceList = @()
foreach ($Region in (Get-AWSRegion)) {
  $InstanceList += Get-EC2Instance -Region $Region.Region -ProfileName CIDBTest
}
$InstanceList | Format-Table

๊ฒฐ๊ณผ

GroupNames Groups Instances   OwnerId      RequesterId  ReservationId       RunningInstance
---------- ------ ---------   -------      -----------  -------------       ---------------
{}         {}     {asdf222}   123          123                  r-123               {asdf222}
{}         {}     {asdf222}   123          123                  r-123               {asdf222}
{}         {}     {asdf222}   123          123                  r-123               {asdf222}

์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ jq ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ AWS CLI์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต --query ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
aws --profile whatever ec2 describe-instances --query 'Reservations[].Instances[].[State.Name,InstanceType]' [ [ "running", "t2.small" ], [ "running", "t2.small" ], [ "running", "m3.medium" ] ]

์ฝ๋Š” ๋™์•ˆ -rr ; ์—์ฝ” ์‹œ์ž‘ ์˜์—ญ: $r ; ์ฝ๋Š” ๋™์•ˆ ์ˆ˜ํ–‰ -ri ; echo instance-id: $i 2>&1 ; ์™„๋ฃŒ < <(aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId" --region $r --profile prd|perl -nl -e 's/\s+/\n/g;print '); echo "์ •์ง€ ์ง€์—ญ: $r" ; ์™„๋ฃŒ < <(aws ec2 describe-regions --output text --profile prd| cut -f 3)


for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region | jq '.Reservations[] | ( .Instances[] | {state: .State.Name, name: .KeyName, Tag_Name: .Tags[].Value,type: .InstanceType, key: .KeyName})'
done

๋ฐฉ๊ธˆ ์“ด ๋˜ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค!
์ด ์ž‘์€ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ์ง€์—ญ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์˜ˆ:
sudo ./aws-x.sh ec2 ์„ค๋ช… ์ธ์Šคํ„ด์Šค
sudo ./aws-x.sh ec2 ์ธ์Šคํ„ด์Šค ์„ค๋ช… | grep PrivateDnsName

!/bin/bash

echo "AWS ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ „ ๊ฐ€์ ธ์˜ค๊ธฐ:"
sudo aws ec2 describe-regions --region eu-west-2 |grep RegionName |cut -d '"' -f 4 > /tmp/regions.txt
๊ณ ์–‘์ด /tmp/regions.txt

์‹คํ–‰ ์‹œ์ž‘

์˜์—ญ์„ ์ฝ๋Š” ๋™์•ˆ; ํ•˜๋‹ค
echo "" $region "์—์„œ " $@ " ์‹คํ–‰ ์ค‘:"
aws --์ง€์—ญ $์ง€์—ญ $@
์™„๋ฃŒ

๋Œ€์ฒญ์†Œ

rm /tmp/regions.txt

!/bin/bash

echo ๋ชจ๋“  ์ง€์—ญ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ์ฃผ์‹ญ์‹œ์˜ค.
aws ec2 describe-regions --output text | cut -f3
ํ•˜๋‹ค
aws ec2 describe-instances --region $region --query 'Reservations[].Instances[].[State.Name,InstanceType,PublicIpAddress,Placement.AvailabilityZone]' --์ถœ๋ ฅ ํ…์ŠคํŠธ
์™„๋ฃŒ

------์‚ฐ์ถœ-------

./get-instances.sh

๋ชจ๋“  ์ง€์—ญ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ์ฃผ์‹ญ์‹œ์˜ค.

์‹คํ–‰ t2.micro 54.93.120.174 eu-central-1b

์‹คํ–‰ t2.micro 54.86.91.202 us-east-1d

๋ˆˆ์œผ๋กœ JSON์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋ถ„๋“ค์„ ์œ„ํ•ด jq ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข€ ๋” ์ •ํ™•ํ•œ ์š”์•ฝ์„ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

aws cli๋Š” ์ด ์ž‘์—…์„ ๋‚ด์žฅ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”

๊ณ ๋งˆ์›Œ์š” ์˜ค๋น„์ž”! ์ €๋Š” ๋ช‡ ๋‹ฌ ์ „์— jq๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ œ ์ธ์ƒ์„ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค. :)

AWS Cli Docs ๋Š” ๊ณ ๊ธ‰ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์—ฌ์ „ํžˆ JQ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

--query๋กœ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ๋” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ช…๋ น์ค„ JSON ํ”„๋กœ์„ธ์„œ์ธ jq๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://stedolan.github.io/jq/ ์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

IMHO, --query ๋Š” AWS CLI์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•œ์ง€ ์—ฌ์ „ํžˆ ์‚ดํŽด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ 2013/10/18 ์— ๋ฆด๋ฆฌ์Šค๋œ aws cli v. 1.2.0 ์—

--query ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์–ธ์–ด๋กœ ํŠœํ† ๋ฆฌ์–ผ ๋„ ์ถฉ๋ถ„ํžˆ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ์˜ ์ƒ˜ํ”Œ ๋น„๊ต

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” aws cli๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ฆฌ์ „์˜ RDS ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜์—ดํ•˜๊ณ  JQ ๋ฐ JMESPath๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ json ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๋Š” JMESPath์—์„œ ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฌ์šด OOTB์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# Using Jquery
aws  rds describe-db-instances --output json | jq -r '.DBInstances[] | "\(.DBInstanceIdentifier) -> \(.DBInstanceStatus) ( \(.DBInstanceClass), \(.Endpoint.Address):\(.Endpoint.Port)  ) "  '

## Outputs
someinstancename -> available ( db.t2.small, xxxxx.rds.amazonaws.com:1234 )
## Show a list of properties for DBInstances which have a status containing the word 'avail' 
aws rds describe-db-instances --output json --query "DBInstances[?contains(DBInstanceStatus, 'avail')].[DBInstanceIdentifier, DBInstanceClass, DBInstanceStatus, Endpoint.[Address, Port]]"

## Outputs
[
    [
        "someinstancename",
        "db.t2.small",
        "available",
        [
            "xxxxx.rds.amazonaws.com",
            1234
        ]
    ]
]

opt-in-not-required ๊ฐ€ aws ec2 describe-regions --output text ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ถœ๋ ฅ์˜ ์„ธ ๋ฒˆ์งธ ์—ด์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด cut -f3 ๋ฅผ cut -f4 ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for region in `aws ec2 describe-regions --output text | cut -f4`
do

done

์•„๋งˆ๋„ ๋” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด JMESPath ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

for region in $(aws ec2 describe-regions --query "Regions[*].RegionName" --output text)
do

done

grep ํ•˜์—ฌ ์›ํ•˜๋Š” ์˜์—ญ์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด awscli-aliases ๋ฅผ ์„ค์น˜ํ•œ ํ›„ ~/.aws/cli/alias ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

list-instances =
  !f() {
    echo "Filtering by \`$1\`"
    for region in $(aws ec2 describe-regions --query "Regions[*].RegionName" --output text | tr "\t" "\n" | grep "$1")
      do
        echo "\nListing Instances in region:'$region'..."
        aws ec2 describe-instances --region $region \
          --output table \
          --query "Reservations[*].Instances[*].{
                    Instance:InstanceId,
                    Type:InstanceType,
                    AZ:Placement.AvailabilityZone,
                    KeyName:KeyName,
                    Name:Tags[?Key==\`Name\`]|[0].Value,
                    Project:Tags[?Key==\`project\`]|[0].Value,
                    IP:PublicIpAddress,
                    State:State.Name,
                    CPUcores:CpuOptions.CoreCount,
                    CPUThreads:CpuOptions.ThreadsPerCore
                }"
      done
  }; f

์šฉ๋ฒ•:

$ aws list-instances

์ง€์—ญ ์ฝ”๋“œ์— ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฏธ๊ตญ ์ง€์—ญ์˜ ๊ฒฝ์šฐ us .

$ aws list-instances 'us'

aws ec2 describe-regions --output text | cut -f3
ํ•˜๋‹ค
echo -e "\n์˜์—ญ์˜ ์ธ์Šคํ„ด์Šค ๋‚˜์—ด:'$region'..."
aws ec2 ์„ค๋ช… ์ธ์Šคํ„ด์Šค --region $region | grep ์‹คํ–‰ > file.txt
๊ณ ์–‘์ด ํŒŒ์ผ.txt | ํ™”์žฅ์‹ค -l
์™„๋ฃŒ

image

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰