Aws-cli: すべてのリージョンのインスタンスを説明するにはどうすればよいですか?

作成日 2016年02月08日  ·  17コメント  ·  ソース: aws/aws-cli

ワークフローをawsコントロールパネルからCLIに切り替えようとしていますが、非常に奇妙な問題が発生しました。 リージョン内のインスタンスを説明する方法は知っていますが、リージョンに関係なくすべてのインスタンスを説明するにはどうすればよいですか? または、少なくともすべてのec2リージョンの出力を取得して、これをプログラムで1つずつ実行できるようにします(つまり、 aws ec2 list-regionsようなもの)。

cliはコントロールパネルとは異なる名前をリージョンに使用しているように見えるため、これは非常に奇妙です。 1つは、すべてのインスタンスがリージョン「us-west-2」で開始されているようですが(少なくともこれまでのところ)、コントロールパネルのどこにもその文字列が見つかりません。 実際、デフォルトの地域をリストしている場所はまったく見つからないようです。

これを行うaws内のコマンドはありますか?

最も参考になるコメント

Googleからここに到着する人のために、AWS CLIを使用してすべてのリージョンのすべてのインスタンスを一覧表示する1つの方法を次に示します(上記の説明に基づく)。

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は、オレゴンにあるデータセンターです。 コンソールページの右上に、リージョンを選択できるドロップダウンがあります(下の図を参照)。

ほとんどのサービスでは、現在、利用可能な地域をプログラムで検出する方法がないため、このリストを参照する必要があります。 ただし、EC2はdescribe-regions関数を提供するため、例外の1つです。 CLIはサービスAPIのラッパーであるため、サービスがCLIをサポートしていない限り、マルチリージョン検索を実行することはできません(たとえば、S3はほとんどリージョンに依存しません)。 別のリージョンでクエリを実行するには、リージョンに--region引数を指定する必要があります。

デフォルトのリージョンは構成ファイル(UNIXシステムでは~/.aws/config )にあり、 aws configureコマンドで表示および設定できます。

regions

Googleからここに到着する人のために、AWS CLIを使用してすべてのリージョンのすべてのインスタンスを一覧表示する1つの方法を次に示します(上記の説明に基づく)。

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ニース! これを頻繁に使用する場合は、エイリアスにすることを検討してください。

もう1つのオプションは、Linux、Mac、およびWindowsでネイティブに実行されるAWS PowerShell .NETCoreモジュールを使用することです。

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使用するか、AWSCLIに組み込まれている--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を読みながら行う; 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 describe-instances
sudo ./aws-x.sh ec2 describe-instances | grep PrivateDnsName

!/ bin / bash

echo "AWSの利用可能なリージョンの取得:"
sudo aws ec2 describe-regions --region eu-west-2 | grep RegionName | cut -d '"' -f 4> /tmp/regions.txt
cat /tmp/regions.txt

実行を開始します

領域の読み取り中。 行う
echo "Executing" $ @ "on" $ region ":"
aws --region $ region $ @
終わり

掃除

rm /tmp/regions.txt

!/ bin / bash

エコーすべてのリージョンでインスタンスを取得します。しばらくお待ちください。
aws ec2 describe-regions --output text | cut -f3地域の場合
行う
aws ec2 describe-instances --region $ region --query'Reservations []。Instances []。[State.Name、InstanceType、PublicIpAddress、Placement.AvailabilityZone] '--output text
終わり

- - - 出力 - - - -

./get-instances.sh

すべての地域でインスタンスを取得します。しばらくお待ちください。

t2.micro 54.93.120.174eu-central-1bを実行しています

t2.micro 54.86.91.202us-east-1dを実行しています

JSONを目で解析したくないという方のために、 jqを使用して次に示します。

aws cliは「query」パラメーターをサポートします。これは、このようなことをビルトインとして

ありがとうobijan! IIは数ヶ月前にjqを使い始め、それが私の人生を変えました:)

AWS Cli Docsは、より高度な使用法としてJQを推奨していることに注意してください。

--queryでは不可能な高度な機能が必要な場合は、コマンドラインJSONプロセッサであるjqを確認できます。 ダウンロードして、 http: //stedolan.github.io/jq/で公式チュートリアルを見つけることができます。

IMHO、 --queryは、AW​​S CLIでネイティブにサポートされているため、クエリのユースケースで機能するかどうかを確認する価値があります。 このオプションは、 2013/10/18にリリースされたaws cliv。1.2.0で追加されたため、古いバージョンのCLIを使用していない限り、このオプションを必ず使用する必要があります。

--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あなたが実行したときの出力の第3列はaws ec2 describe-regions --output text 、あなたが変更することができますcut -f3cut -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 describe-instances --region $ region | grep running> file.txt
cat file.txt | wc -l
終わり

image

このページは役に立ちましたか?
0 / 5 - 0 評価