【问题标题】:AWS CLI - aws ec2 describe-instances to retrieve keypair mame for each EC2 instanceAWS CLI - aws ec2 describe-instances 检索每个 EC2 实例的密钥对名称
【发布时间】:2019-01-22 00:23:49
【问题描述】:

我正在尝试查询附加到每个 EC2 实例的密钥对名称,下面的 ec2 describe-instances 工作正常,它完全符合我的需要,但 {keypair.Name} 下的列显示 [NONE] I am不确定我是否使用了正确的参数名称 - 我知道当我登录到控制台时,我的 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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-cli


    【解决方案1】:

    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]'
    

    见:describe-instances — AWS CLI Command Reference

    【讨论】:

    • 感谢 John,我已经尝试过 keyname,但我的报告中仍然没有得到 NONE。此外,在您发布的示例中,我需要给它一个键名和实例 ID - 这不是我需要的。假设您无权访问 AWS 控制台,我想如何知道实例 ID 及其密钥对?出于这个原因,我通过 AWS CLI 运行报告以获取我需要的所有元数据。如果我们这样做怎么样 - 给我一个区域的所有实例 ID 及其相关的密钥对名称。使用 Boto3、Jason、AWS CLI 等都没关系。谢谢。
    • 请看最后一列 - 它显示 NONE |窗户|运行 | m4.2xlarge |无 |
    • 我已经更新了我的答案,以展示如何将KeyName 合并到请求中。
    • 非常有趣!我不知道这个东西是区分大小写的..我使用了这个词(keyname}全小写,作为回报我得到了这个词:NONE。但是当我把它改成你拥有它的方式时它确实有效:{KeyName}。谢谢这么多约翰!
    • 如果你能给我一个奖励,告诉我如何通过 PLATFORM 来解决这个问题,那就太棒了:) 最后,我在哪里检查你的回答是否解决了我的问题,这样你就可以获得信用?再次感谢!
    【解决方案2】:

    我确实找到了一种使用管道来解决这个问题的方法。经验:|排序 -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
    

    Report shows that is sorted by PLATFORM IN Asc order

    【讨论】:

      【解决方案3】:

      我这样做有几个原因

      • 它可以很容易地通过管道传递给 grep
      • 如果您想改进数据,无需重复查询 aws api
      • 我通常会遍历多个区域,因此可以轻松扫描所有区域(和帐户)
      instances=`aws ec2 describe-instances `
      echo $instances | jq '.Reservations[].Instances[] | "[\(.InstanceId) \(.Platform) \(.State.Name) \(.PrivateIpAddress) \(.PublicIpAddress) \(.InstanceType) \(.PublicDnsName) \(.KeyName)]"'
      

      【讨论】:

        猜你喜欢
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-19
        • 2019-06-14
        相关资源
        最近更新 更多