Как получить показатели прерывания Amazon EC2 Spot Instance - PullRequest
0 голосов
/ 30 апреля 2020

Я создал скрипт, чтобы получить лучшие цены по запросу, а также посмотреть спотовые цены для тех же экземпляров. https://github.com/fuatu/awsEC2pricefinder

Это то, что я даю в качестве вывода ниже. Я хочу иметь другой столбец для каждого экземпляра и отображать «Частота прерывания».

(awspricing) ~/Projects/awspricing $ python awsEC2pricing.py -t 2 4
Records are up-to-date
--------------------------
 vCPU: 2.00
 RAM: 4.00
 OS: Linux
 Region: US East (N. Virginia)
--------------------------
Instance        vCPU   RAM    OS         PriceH   PriceM      SpotH    SpotM   
t3a.medium      2.00   4.00   Linux      0.03760  27.07200    0.01140  8.20800
t3.medium       2.00   4.00   Linux      0.04160  29.95200    0.01250  9.00000
t2.medium       2.00   4.00   Linux      0.04640  33.40800    0.01430  10.29600
a1.large        2.00   4.00   Linux      0.05100  36.72000    0.01990  14.32800
t3a.large       2.00   8.00   Linux      0.07520  54.14400    0.02260  16.27200
m6g.large       2.00   8.00   Linux      0.07700  55.44000    0.00000  0.00000

Здесь вы можете увидеть проценты "частоты прерывания": https://aws.amazon.com/ec2/spot/instance-advisor/

Я погуглил, а также проверил методы boto3 ec2 ​​и не могу найти какую-либо опцию для получить показатели прерывания. Так что любая помощь, чтобы показать, как получить эти данные программно, приветствуется.

1 Ответ

1 голос
/ 30 апреля 2020

Я нашел решение от коллеги.

Эта ссылка имеет прерывания. https://spot-bid-advisor.s3.amazonaws.com/spot-advisor-data.json

Я также обновил свой код соответственно

пример кода здесь:

def get_ec2_spot_interruption(instances=[], os=None, region=None) -> defaultdict(None):
    import requests
    import json
    results = defaultdict(None)
    url_interruptions = "https://spot-bid-advisor.s3.amazonaws.com/spot-advisor-data.json"
    try:
        response = requests.get(url=url_interruptions)
        spot_advisor = json.loads(response.text)['spot_advisor']
    except requests.exceptions.ConnectionError:
        return
    rates = {
        0: "<5%",
        1: "5-10%",
        2: "10-15%",
        3: "15-20%",
        4: ">20%"
    }
    for ii in instances:
        try:
            rate = spot_advisor[region][os][ii]['r']
            results[ii] = rates[rate]
        except KeyError:
            results[ii] = ""
    return results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...