我试图通过使用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中(我认为除非可以检索到相应的数据,否则我将无用)。
答案 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。