2014-04-09 65 views
4

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

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

我也试过ec2 describe-images在一个特定的图像。再一次,似乎没有任何OS的迹象。

帮助..?

+0

简而言之,不,你不能使用AWS-CLI来做到这一点。 – slayedbylucifer

+0

@slayedbylucifer:够公平的。我想我最好开始在AMIs上执行命名约定 – ivarrian

回答

0

您无法从AWS cli查询实例的特定操作系统,但可以查询该实例基于的AMI。此外,您无法获得“操作系统”属性,但可以获得AMI的DescriptionName,因此,如果使用有意义的描述创建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

+0

谢谢。是的,当我准备和AMI中的描述一起使用时,我的组织中只有一些用户正确地命名它们并没有帮助。 至于脚本/ etc/issue,我实际上需要OS信息来自动连接到几个EC2实例,一些运行Amazon Linux(默认ssh用户:ec2-user),一些运行RHEL(默认ssh用户:root) 。 – ivarrian

5

这里有一个快速的方法来列出平台领域,这至少是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 
+0

*无*表示什么? – Jeff

+2

'无'是相当于NULL的Python。在Platform字段中,只有Windows实例返回一个值('windows')。所有其他人都不会返回一个值,因此“无”。 (我不知道为什么会出现这种情况,但那是行为。) –

+0

我得到你必须指定区域错误。 –

1

试试这个命令:

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图像标识。

+0

这是问题的正确答案。 –