我想獲得特定區域中所有實例的簡單列表,每個記錄應包含實例的ID,ARN和名稱。 我使用使用AWS CLI獲取實例的名稱和ARN列表
ec2 describe-instances --region us-east-1
嘗試,但無法找到輸出的ARN。
我想獲得特定區域中所有實例的簡單列表,每個記錄應包含實例的ID,ARN和名稱。 我使用使用AWS CLI獲取實例的名稱和ARN列表
ec2 describe-instances --region us-east-1
嘗試,但無法找到輸出的ARN。
你可以構建ARN如果有可能在你的使用情況通過了解該地區,帳戶ID +實例ID:
arn:aws:ec2:region:account-id:instance/instance-id
arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0
而實際上 - 我看JSON響應,OwnerId
出現包含account-id
,因此從describe-instances
的結果構建此應該相當簡單。
編輯:使用jq
來構建你要找的輸出的一個例子:
aws ec2 describe-instances --region us-east-1 | jq -r '.Reservations[] | .OwnerId as $OwnerId | (.Instances[] | { "ARN": "arn:aws:ec2:\(.Placement.AvailabilityZone[:-1]):\($OwnerId):instance/\(.InstanceId)", "AvailabilityZone": "\(.Placement.AvailabilityZone)", InstanceId, PublicDnsName, PrivateDnsName, Tags})' | jq -s .
這會產生這樣的輸出:
[
{
"ARN": "arn:aws:ec2:us-east-1:123456789012:instance/i-0a9842b2da1xxxxxx",
"AvailabilityZone": "us-east-1a",
"InstanceId": "i-0a9842b2da1xxxxxx",
"PublicDnsName": "ec2-72-32-69-225.compute-1.amazonaws.com",
"PrivateDnsName": "ip-10-0-0-68.ec2.internal",
"Tags": [
{
"Value": "my-beanstalk",
"Key": "elasticbeanstalk:environment-name"
},
{
"Value": "awseb-e-emiwxxxxxx-stack",
"Key": "aws:cloudformation:stack-name"
}
]
},
{
"ARN": "arn:aws:ec2:us-east-1:123456789012:instance/i-0a9842b2ca1xxxxxx",
"AvailabilityZone": "us-east-1a",
"InstanceId": "i-0a9842b2ca1xxxxxx",
"PublicDnsName": "ec2-72-32-69-226.compute-1.amazonaws.com",
"PrivateDnsName": "ip-10-0-0-69.ec2.internal",
"Tags": [
{
"Value": "my-beanstalk-2",
"Key": "elasticbeanstalk:environment-name"
},
{
"Value": "awseb-e-emizxxxxxx-stack",
"Key": "aws:cloudformation:stack-name"
}
]
}
]
看看這個例子 - 從先前我進入SO Docs。
實例有很多的元數據,這會從調用返回到describe-instances
,但很多時候你只是想看到的基本知識。您可以使用與表輸出組合的JMESPath查詢以易讀的方式顯示簡明的實例信息。
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType}"
-----------------------------------------------------
| DescribeInstances |
+-----------+---------------+----------+------------+
| Id | Name | State | Type |
+-----------+---------------+----------+------------+
| i-abc123 | None | stopped | m3.large |
| i-def456 | amazon linux | stopped | t2.micro |
| i-ghi789 | proxy | running | t2.micro |
+-----------+---------------+----------+------------+
現在,讓我們一塊打破了一塊。首先,我們有--output table
。這會產生響應的彩色表格表示。這通常對於返回少量數據集的命令或您已經過濾數據的位置非常有用。
現在登錄到--query
。這個看起來很長,但實際上很簡單。第一部分是Reservations[].Instances[]
。這將返回所有返回實例的展開列表。
該查詢的下一部分被封裝爲.{}
。這樣做是爲列表中的每個項目創建一個新的json對象,其中每個值都是要應用於源對象(在本例中爲實例)的JMESPath查詢。其中大部分非常簡單,但Name
稍微複雜一些。
完整查詢獲得Name
是Tags[?Key == 'Name'].Value | [0]
。其中的第一部分,Tags[?Key == 'Name']
正在搜索實例的標籤,查找關鍵字爲Name
的標籤。下半部分.Value | [0]
選擇每個標籤的值,然後從列表中獲取第一個項目(在這種情況下,將只有一個)。
您在該表中所需的完全取決於您。如果你想添加DNS信息,例如,你可以很容易地添加一個新的關鍵DNS: PublicDnsName
:
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType, DNS: PublicDnsName}"
--------------------------------------------------------------------------------------------------------
| DescribeInstances |
+--------------------------------------------------+-----------+---------------+----------+------------+
| DNS | Id | Name | State | Type |
+--------------------------------------------------+-----------+---------------+----------+------------+
| | i-abc123 | None | stopped | m3.large |
| | i-def456 | amazon linux | stopped | t2.micro |
| ec2-192-168-1-1.us-west-2.compute.amazonaws.com | i-ghi789 | proxy | running | t2.micro |
+--------------------------------------------------+-----------+---------------+----------+------------+
這是很容易改變,以適應您想要的具體細節並沒有按不要求你安裝額外的工具。
+1。我看着使用'--query'標準,但沒有看到任何輸出ARN的方式可以完全從響應中完成,而不需要連接到'jq',因爲它似乎需要可變支持。這個可以用'--query'標準完成的例子將是這個答案的一個很好的補充。 –
是的,我知道,但我不想手動構造它。 – dimid
@dimid:更新以顯示如何使用jq構建它:https://stedolan.github.io/jq/ –
謝謝!有沒有辦法重複這個地區?順便說一句,我還會添加標籤 'aws ec2 describe-instances --region us-east-1 | jq -r'。保留[] | .OwnerId作爲$ OwnerId | (.Instances [] | {「ARN」:「arn:aws:ec2:us-east-1:\($ OwnerId):instance/\(。InstanceId)」,「AvailabilityZone」:「\(。Placement.AvailabilityZone )「,InstanceId,PublicDnsName,PrivateDnsName,Tags})' – dimid