【问题标题】:find OS and licensed software for EC2 instances查找 EC2 实例的操作系统和许可软件
【发布时间】:2022-01-12 17:53:28
【问题描述】:

我正在尝试通过使用 API(特别是 python 的 boto3,但如果解决方案来自另一个 SDK,那对我来说很好)来找出 AWS 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 中(除非可以检索到相应的数据,否则我认为它是无用的)。

【问题讨论】:

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


    【解决方案1】:

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

    然后使用“describe-images”调用 ie 来查找 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"
            }
        ]
    }
    

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

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

    【讨论】:

      【解决方案2】:

      快速回答:不,您不能直接从 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 不存储操作系统信息。 “名称”键只是抽象定义,可以由用户替换。

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

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

      【讨论】:

        【解决方案3】:
        resp=ec2.describe_instances()
        osname=resp['Reservations'][0]['Instances'][0]['PlatformDetails']
        print(osname)
        

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-19
          • 2019-09-27
          • 1970-01-01
          • 2018-01-29
          相关资源
          最近更新 更多