我正在尝试查询附加到每个EC2实例的密钥对名称,下面的ec2描述实例工作正常,它完全符合我的需要,但是{keypair.名称} 显示 [无] 我不确定我是否使用了正确的参数名称 - 我知道当我登录到控制台时,我的 EC2 实例上附加了很少的 keypairNames.epm,但我在报告中没有看到我通过以下命令运行。任何意见都非常感谢。感谢!
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value | [0],InstanceId,Platform,State.Name,PrivateIpAddress,PublicIpAddress,InstanceType,PublicDnsName,keypair.Name]' --output table --region us-west-2
Instances
字典中没有名为keypair
的字段。
最接近的是KeyName
:
{
"Reservations": [
{
"Instances": [
{
"InstanceId": "i-xxx",
"KeyName": "foo",
...
因此,您将使用:
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value | [0],InstanceId,Platform,State.Name,PrivateIpAddress,PublicIpAddress,InstanceType,PublicDnsName,KeyName]'
请参阅:描述实例 — AWS CLI 命令参考
我确实找到了一种通过使用管道来解决这个问题的方法。 经验: | 排序 -K5
请注意,在我使用 {sort} 之前,报告在 PLATFORM 列下的所有位置都有 {windows} 和 {None}。请参阅附件,我上传了报告的示例结果..
新语句如下所示:
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value | [0],InstanceId,Platform,State.Name,PrivateIpAddress,PublicIpAddress,InstanceType,KeyName]' --output table | sort -k5
报告显示按平台在ASC顺序排序
我出于几个原因执行以下操作
- 它可以很容易地通过管道传输到 grep
- 如果您想改进数据,则无需重复查询 AWS API
- 我通常要迭代多个区域,因此可以轻松扫描所有区域(和帐户)
instances=`aws ec2 describe-instances `
echo $instances | jq '.Reservations[].Instances[] | "[(.InstanceId) (.Platform) (.State.Name) (.PrivateIpAddress) (.PublicIpAddress) (.InstanceType) (.PublicDnsName) (.KeyName)]"'