查找EC2实例的操作系统和许可软件

时间:2016-03-04 10:46:41

标签: amazon-web-services amazon-ec2 boto3

我试图通过使用API​​(特别是python&#39; s boto3,但如果解决方案来自另一个SDK,那对我很好)来确定AWS ec2实例的操作系统和许可软件。< / p>

我自然尝试使用描述实例:

client = session.client('ec2')
ec2.describe_instances()

但数据不存在。我无法使用resource api:

找到它
ec2 = session.resource('ec2')
for instance in ec2.instances.all():
   // I ran dir(instance) here just to see what's going on.

我搜索了文档,但无法找到如何检索此信息。我非常怀疑它无法找到,因为亚马逊使用这些信息进行定价,这些信息存在于定价API中(我认为除非可以检索到相应的数据,否则我将无用)。

2 个答案:

答案 0 :(得分:2)

获取&#34; ImageId&#34;通过describe_instances()调用ami id为ec2。

然后用&#34; describe-images&#34;查找ami。打电话即

$ aws --region eu-west-1  ec2 describe-images --image-ids ami-4ac6653d
{
    "Images": [
        {
            "ProductCodes": [
                {
                    "ProductCodeId": "aacglxeowvn5hy8sznltowyqe", 
                    "ProductCodeType": "marketplace"
                }
            ], 
            "Name": "CentOS 6 x86_64 (2014_09_29) EBS pv-1-adc4348e-1dc3-41df-b833-e86ba57a33d6-ami-809020e8.2", 
            "VirtualizationType": "paravirtual", 
            "Hypervisor": "xen", 
            "ImageOwnerAlias": "aws-marketplace", 
            "ImageId": "ami-4ac6653d", 
            "RootDeviceType": "ebs", 
            "State": "available", 
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/sda", 
                    "Ebs": {
                        "DeleteOnTermination": false, 
                        "SnapshotId": "snap-8a6c3e70", 
                        "VolumeSize": 8, 
                        "VolumeType": "standard", 
                        "Encrypted": false
                    }
                }
            ], 
            "Architecture": "x86_64", 
            "ImageLocation": "aws-marketplace/CentOS 6 x86_64 (2014_09_29) EBS pv-1-adc4348e-1dc3-41df-b833-e86ba57a33d6-ami-809020e8.2", 
            "KernelId": "aki-52a34525", 
            "OwnerId": "679593333241", 
            "RootDeviceName": "/dev/sda", 
            "CreationDate": "2014-10-02T20:01:16.000Z", 
            "Public": true, 
            "ImageType": "machine", 
            "Description": "CentOS 6 x86_64 (2014_09_29) EBS PV-1"
        }
    ]
}

这将提供有关操作系统的信息以及是否附带许可软件

查找正在运行的实例上安装的第三方软件需要一个不同的过程,不知道如何一般地执行此操作

答案 1 :(得分:1)

快速回答:不,您无法直接从describe_instances()函数获取操作系统和许可软件信息。

更长的答案:此类信息需要在每个实例中安装某种SNMP监视代理程序,这会给任何VM实例带来太多的复杂性。

我努力尝试在boto3脚本中获取所有细节。 在describe_instances()之后,从结果字典键['Reservations']循环列表以查找AMI图像id,然后搜索上述信息。

import boto3
ec2 = boto3.client("ec2")
instance_metas = ec2.describe_instances()
ami_list = list()
for each_instance in instance_metas['Reservations']: 
  ami_list.append(each_instance['Instances'][0]['ImageId'])

# next , query correspondence AMI info
ami_metas = ec2.describe_images(ImageIds=ami_list)

在检查dict之后,我注意到AWS不存储操作系统信息。 “名称”键只是抽象定义,可以由用户替换。

如果要获取实际的实例操作系统版本,可以使用ec2.client.describe_instances()提供的IP地址,运行ssh脚本并获取实例操作系统版本。

如果您从AWS AMI marketplace创建实例,则所有实例都已获得许可。只需反击检查AMI ID。