2016-03-04 45 views
1

我想通过使用API​​(特别是Python的boto3,但如果解决方案来自另一个SDK,那很好,我)找出AWS ec2实例的操作系统和许可软件。找到操作系统和EC2实例的许可软件

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

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中(除非可以检索到相应的数据,否则我认为这些信息是无用的)。

回答

1

通过describe_instances()调用获取ec2的“ImageId”ami id。

再看看阿美与“形容图像”呼即

$ 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" 
     } 
    ] 
} 

这会给OS的信息,如果自带的正版软件

查找已安装第三方软件正在运行的实例将需要一个不同的进程,不知道如何一般这样做

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) 

检查字典后,我注意到AWS不存储OS信息。 “名称”键只是抽象的定义,可以由用户替换。

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

如果您从AWS AMI marketplace创建实例,则全部获得许可。只需反检查AMI ID。

相关问题