【问题标题】:How to find OS of an EC2 instance using AWS CLI如何使用 AWS CLI 查找 EC2 实例的操作系统
【发布时间】:2023-03-09 16:26:01
【问题描述】:

您如何使用 AWS CLI 找出在 EC2 实例上运行的操作系统。

ec2 describe-instance 命令吐出大量信息,但没有任何指示操作系统的信息。

我还在特定图像上尝试了ec2 describe-images。同样,似乎没有任何操作系统迹象。

帮助..?

【问题讨论】:

  • 简答,不,您不能使用 AWS-CLI 做到这一点。
  • @slayedbylucifer:很公平。我想我最好开始在 AMI 上执行命名约定

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


【解决方案1】:

这是列出平台字段的快速方法,它至少可以区分 Windows 和 Linux:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,Platform]' --output text
i-78b4ef47  windows
i-b8ae3386  windows
i-9d3611a2  None
i-1c57c651  windows
i-a241ec91  None
i-7d26b630  None

【讨论】:

  • 无是什么意思?
  • None 是 Python 中的 NULL 等价物。对于 Platform 字段,只有 Windows 实例返回一个值 (windows)。所有其他人不返回值,因此None。 (我不知道为什么会这样,但这就是行为。)
  • @EjazKarim 请开始一个新问题,而不是在旧问题中添加 cmets。
【解决方案2】:

试试这个命令:

aws ec2 describe-images --image-ids $(aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxx --query 'Reservations[0].Instances[0].ImageId' --output text) --query 'Images[0].Name'

$() 部分使用 InstanceId 获取 ImageId。

【讨论】:

    【解决方案3】:

    如果您的实例上安装了 System Manager 代理,您可以使用 DescribeInstanceInformation API 查找该信息:

    $ aws ssm describe-instance-information --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName]' --output text | sort
    
    i-016073859e4b31111 Linux   Amazon Linux AMI
    i-01fa3efe71e4b1111 Linux   Amazon Linux AMI
    i-03d437d24f7341111 Windows Microsoft Windows Server 2012 R2 Standard
    i-048fa3ba0aa151111 Windows Microsoft Windows Server 2012 R2 Standard
    i-05e27c562eb881111 Linux   Amazon Linux AMI
    i-09283c3c05d551111 Windows Microsoft Windows Server 2012 R2 Standard
    i-0a51eb40351911111 Linux   Amazon Linux AMI
    i-0a5aeab8f56ba1111 Linux   Amazon Linux AMI
    i-0a61968dc51ba1111 Linux   Amazon Linux AMI
    i-0a84d5b23e5251111 Linux   Amazon Linux AMI
    i-0b057729594791111 Windows Microsoft Windows Server 2012 R2 Standard
    i-0b1d0a7fb339b1111 Linux   Amazon Linux AMI
    i-0da2fefde50351111 Linux   Amazon Linux AMI
    i-0eafb22a9581a1111 Linux   Amazon Linux AMI
    

    【讨论】:

    【解决方案4】:

    您无法从 AWS cli 查询实例的特定操作系统,但您可以查询该实例所基于的 AMI。此外,您无法获取“OS”属性,但可以获取 AMI 的 Description 或 Name,因此,如果您创建的 AMI 具有有意义的描述,则可以使其正常工作。

    $ aws ec2 describe-images --image-ids "ami-xxxxxxxx"
    {
        "Images": [
            {
                "VirtualizationType": "paravirtual", 
                "Name": "amazon-linux-20130509", 
                "Tags": [
                    {
                        "Value": "amazon-linux-20130509", 
                        "Key": "Name"
                    }
                ], 
                "Hypervisor": "xen", 
                "ImageId": "ami-xxxxxxxx", 
                "RootDeviceType": "ebs", 
                "State": "available", 
                "BlockDeviceMappings": [
                    {
                        "DeviceName": "/dev/sda1", 
                        "Ebs": {
                            "DeleteOnTermination": true, 
                            "SnapshotId": "snap-xxxxxxxx", 
                            "VolumeSize": 100, 
                            "VolumeType": "standard"
                        }
                    }
                ], 
                "Architecture": "x86_64", 
                "ImageLocation": "123456789012/amazon-linux-20130509", 
                "KernelId": "aki-fc37bacc", 
                "OwnerId": "123456789012", 
                "RootDeviceName": "/dev/sda1", 
                "Public": false, 
                "ImageType": "machine", 
                "Description": "Amazon Linux"
            }
        ]
    }
    

    如果您想获得更详细的信息,您可以随时编写自己的脚本以 ssh 进入机器并在每台机器上运行 cat /etc/issue。

    【讨论】:

    • 谢谢。是的,虽然我打算使用 AMI 中的描述,但只有我组织中的一些用户正确命名它们并没有帮助。至于 cat /etc/issue 的脚本,我实际上需要操作系统信息来自动连接到多个 EC2 实例,一些运行 Amazon Linux(默认 ssh 用户:ec2-user)和一些运行 RHEL(默认 ssh 用户:root)。
    • 没错,这就是 Ansible(或 Puppet、Chef 等)可以方便地执行这些要求的地方。
    【解决方案5】:

    如果您的实例上安装了系统管理器代理,那么您可以通过

    获取操作系统详细信息和平台版本
    aws ssm describe-instance-information --query 'InstanceInformationList[*].[InstanceId,PlatformName,PlatformVersion]' --output text | sort
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2018-02-26
      • 2017-03-16
      相关资源
      最近更新 更多