Назад | Перейти на главную страницу

Узнать цену EC2 по instanceId

Мы строим систему для отслеживания затрат облачной инфраструктуры в реальном времени (целевая задержка ~ 10 мин) с помощью графиков и уведомлений.
Мы начали с AWS, но также планируем поддерживать Azure и GCP.
В настоящее время наша цель - отслеживать затраты на инстансы EC2 On-Demand. Нас интересуют только затраты на время работы экземпляра, поэтому мы не заинтересованы в отслеживании исходящего трафика, использования EBS или каких-либо других показателей, связанных с ec2.
Чтобы отслеживать, когда каждый экземпляр был запущен / остановлен, мы используем CloudWatch Events (уведомление об изменении состояния экземпляра EC2). Каждое событие изменения состояния содержит instanceId.
Для получения цен мы используем API-интерфейс AWS Price List.

Чтобы рассчитать стоимость, нам нужно найти цены на наши экземпляры в списке, предоставляемом API прайс-листа.
Чтобы иметь возможность связать instanceId с ценой, нам нужно знать эту информацию об экземпляре (на данный момент мы используем только экземпляры On-Demand):

Некоторые части этой информации (тип и расположение экземпляра) вместе с imageId могут быть легко получены с помощью команды «describe-instance».
Остальное очень проблематично: операционная система, модель лицензии, предустановленное ПО.

Операционная система отображается в консоли AWS, но API для ее получения программным способом отсутствует:

Существует команда "describe-images", которая может предоставить некоторую информацию об изображении (по imageId), которое использует экземпляр EC2, но нет прямой ссылки на тип ОС:

{
    "Images": [
        {
            "Architecture": "x86_64",
            "CreationDate": "2019-06-19T21:59:15.000Z",
            "ImageId": "ami-0b898040803850657",
            "ImageLocation": "amazon/amzn2-ami-hvm-2.0.20190618-x86_64-gp2",
            "ImageType": "machine",
            "Public": true,
            "OwnerId": "137112412989",
            "State": "available",
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/xvda",
                    "Ebs": {
                        "Encrypted": false,
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-08091107f3acb12b2",
                        "VolumeSize": 8,
                        "VolumeType": "gp2"
                    }
                }
            ],
            "Description": "Amazon Linux 2 AMI 2.0.20190618 x86_64 HVM gp2",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "Name": "amzn2-ami-hvm-2.0.20190618-x86_64-gp2",
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SriovNetSupport": "simple",
            "VirtualizationType": "hvm"
        }
    ]
}

Существует также AWS Marketplace, который может отображать цены на изображения в пользовательском интерфейсе, но не предоставляет общедоступный API и не отображает imageIds:

Теперь у нас есть следующие варианты получения цены экземпляра:

Подскажите, пожалуйста, другие способы.