Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So führen Sie Verlängerungsabfragen und Verlängerungsverwaltung direkt über die API durch

So führen Sie Verlängerungsabfragen und Verlängerungsverwaltung direkt über die API durch

坏嘻嘻
坏嘻嘻Original
2018-09-28 17:11:563731Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Durchführung von Verlängerungsabfragen und der Verlängerungsverwaltung direkt über die API. Freunde in Not können darauf verweisen.

Erneuerung der ECS-Instanz

Dieser Artikel betrifft hauptsächlich die folgenden Schlüsselfunktionen:

Abfrage des Cloud-Servers nach Ablaufzeit

Erneuerungsinstanz

Fragen Sie die automatische Erneuerungszeit des Cloud-Servers ab

Legen Sie die automatische Erneuerungszeit des Cloud-Servers fest

Für jährliche und monatliche Cloud-Server ist der Lebenszyklus sehr wichtig. Wenn die Ressourcen des Cloud-Servers nicht rechtzeitig erneuert werden können, kann es sein, dass der Server gesperrt oder sogar freigegeben wird, was die Geschäftskontinuität beeinträchtigt. Die API hilft Ihnen, die Ablaufzeit von Ressourcen rechtzeitig zu verstehen und zu überprüfen und die Erneuerungs- und Aufladefunktion abzuschließen.

Dieser Artikel erfordert die Beachtung der folgenden API:

Abfrageinstanzliste

Erneuerungsinstanz

Fragen Sie die abgelaufenen Cloud-Server innerhalb des angegebenen Bereichs ab

API zum Abfragen der Instanzliste Durch Filtern von Parametern können Sie die Instanzinformationen abfragen, die innerhalb eines bestimmten Bereichs abgelaufen sind Zeitbereich. Durch Festlegen der Filterparameter ExpiredStartTime und ExpiredEndTime (der Zeitparameter wird gemäß dem ISO8601-Standard ausgedrückt und muss die UTC-Zeit verwenden. Das Format lautet: jjjj-MM-ttTHH:mmZ.) können Sie die Liste der Instanzen einfach abfragen innerhalb dieser Zeitspanne ablaufen. Wenn Sie nach Sicherheitsgruppe filtern müssen, fügen Sie einfach die Sicherheitsgruppen-ID hinzu.

INSTANCE_EXPIRED_START_TIME_IN_UTC_STRING = '2017-01-22T00:00Z'
INSTANCE_EXPIRE_END_TIME_IN_UTC_STRING = '2017-01-28T00:00Z'
def describe_need_renew_instance(page_size=100, page_number=1, instance_id=None,
                                 check_need_renew=True, security_group_id=None):
    request = DescribeInstancesRequest()
    if check_need_renew is True:
        request.set_Filter3Key("ExpiredStartTime")
        request.set_Filter3Value(INSTANCE_EXPIRED_START_TIME_IN_UTC_STRING)
        request.set_Filter4Key("ExpiredEndTime")
        request.set_Filter4Value(INSTANCE_EXPIRE_END_TIME_IN_UTC_STRING)
    if instance_id is not None:
        request.set_InstanceIds(json.dumps([instance_id]))
    if security_group_id:
        request.set_SecurityGroupId(security_group_id)
    request.set_PageNumber(page_number)
    request.set_PageSize(page_size)
    return _send_request(request)

Renewal-Cloud-Server

Renewal-Instanzen unterstützen nur Servertypen mit Jahres- und Monatsabonnement und nicht die nutzungsbasierte Bezahlung Servern und erfordern, dass Benutzer die Zahlung des Kontostands oder die Zahlung eines Guthabens unterstützen müssen. Beim Ausführen der API werden synchrone Abzüge und Auftragsgenerierung durchgeführt. Daher müssen Sie beim Ausführen der API sicherstellen, dass Ihr Konto über ausreichende Mittel verfügt, um automatische Abzüge zu unterstützen.

def _renew_instance_action(instance_id, period='1'):
    request = RenewInstanceRequest()
    request.set_Period(period)
    request.set_InstanceId(instance_id)
    response = _send_request(request)
    logging.info('renew %s ready, output is %s ', instance_id, response)

Erneuerungsinstanzen werden automatisch abgezogen. Nachdem die Erneuerung abgeschlossen ist, können Sie die Ressourcenablaufzeit der Instanz basierend auf der InstanceId abfragen. Da es sich bei der API um eine asynchrone Aufgabe handelt, kann es 10 Sekunden dauern, bis sich die Ablaufzeit der Abfrageressource ändert.

Aktivieren Sie die automatische Erneuerung des Cloud-Servers

Um die Wartungskosten für den Ablauf Ihrer Ressourcen zu senken, bietet Alibaba Cloud auch jährliche und monatliche Abonnement-ECS-Instanzen an. Die automatische Verlängerungsfunktion wurde gestartet. Das automatische Verlängerungs- und Abzugsdatum ist 08:00:00 Uhr am 9. Tag vor Ablauf des Servers. Sollte der automatische Abzug am Vortag fehlschlagen, wird er am nächsten Tag regulär weiter ausgeführt, bis der Abzug abgeschlossen ist oder die Ressourcensperre in 9 Tagen abläuft. Sie müssen lediglich sicherstellen, dass Ihr Kontostand bzw. Ihr Kreditlimit ausreichend ist.

Einstellungen für die automatische Verlängerung abfragen

Sie können die automatische Verlängerung über OpenAPI abfragen und festlegen. Diese API unterstützt nur jährliche und monatliche Abonnementinstanzen. Bei der Ausführung von Pay-as-you-go-Instanzen wird ein Fehler gemeldet. Die Abfrage des automatischen Verlängerungsstatus einer Instanz unterstützt die gleichzeitige Abfrage von bis zu 100 Jahres- und Monatsabonnementinstanzen. Mehrere Instanz-IDs werden durch Kommas verbunden.

Der Eingabeparameter von DescribeInstanceAutoRenewAttribut ist die Instanz-ID

InstanceId: unterstützt die Abfrage von bis zu 100 jährlichen und monatlichen Instanzen.

Python # Überprüfen Sie, ob die Instanzen erneuert werden oder nicht '' Wenn response_detail ist nicht None: attributes = Response_detail.get('InstanceRenewAttributes').get('InstanceRenewAttribute') if attributes: für Element in Attributen: auto_renew_status = item.get('AutoRenewEnabled') if auto_renew_status != erwartete_auto_renew: failed_instance_ids += item. get('InstanceId') + ',' beschreiben_auto_renew('i-1111,i-2222')

Der zurückgegebene Inhalt ist wie folgt:

{"InstanceRenewAttributes":{"InstanceRenewAttribute":
[{"Duration":0,"InstanceId":"i-1111","AutoRenewEnabled":false},
{"Duration":0,"InstanceId":"i-2222","AutoRenewEnabled":false}]},
"RequestId":"71FBB7A5-C793-4A0D-B17E-D6B426EA746A"}

Wenn die automatische Verlängerung eingestellt ist, wird der zurückgegebene Das Attribut „AutoRenewEnabled“ ist „true“, andernfalls wird „false“ zurückgegeben.

Automatische Erneuerung von Cloud-Servern festlegen und abbrechen

Es gibt drei Eingabeparameter zum Festlegen der automatischen Erneuerung:

InstanceId: unterstützt die meisten Um 100 jährliche und monatliche Abonnementinstanzen abzufragen, werden mehrere Instanz-IDs durch Kommas verbunden.

Dauer: unterstützt 1, 2, 3, 6, 12, Einheit ist Monat.

AutoRenew: wahr/falsch, wahr bedeutet, die automatische Verlängerung zu aktivieren, falsch bedeutet, die automatische Verlängerung abzubrechen.

python def setting_instance_auto_renew(instance_ids, auto_renew = True): logging.info('execute enable auto renew ' + instance_ids) request = ModifyInstanceAutoRenewAttributeRequest(); request.set_Duration(1); request.set_AutoRenew(auto_renew); request.set_InstanceId(instance_ids) _send_request(request)

执行成功返回 Response 如下:

python {"RequestId":"7DAC9984-AAB4-43EF-8FC7-7D74C57BE46D"}

续费成功后,您可以再执行一次查询。如果续费成功将返回续费时长以及是否开启自动续费。

python {"InstanceRenewAttributes":{"InstanceRenewAttribute":[{"Duration":1,"InstanceId":"i-1111","AutoRenewEnabled":true},{"Duration":1,"InstanceId":"i-2222","AutoRenewEnabled":true}]},"RequestId":"7F4D14B0-D0D2-48C7-B310-B1DF713D4331"}

完整的代码如下:

#  coding=utf-8
# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 2.1.2, you can use command 'pip show aliyun-python-sdk-ecs' to check
import json
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstanceAutoRenewAttributeRequest import \
    DescribeInstanceAutoRenewAttributeRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.ModifyInstanceAutoRenewAttributeRequest import \
    ModifyInstanceAutoRenewAttributeRequest
from aliyunsdkecs.request.v20140526.RenewInstanceRequest import RenewInstanceRequest
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')
clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-beijing')
# data format in UTC, only support passed the value for minute, seconds is not support.
INSTANCE_EXPIRED_START_TIME_IN_UTC_STRING = '2017-01-22T00:00Z'
INSTANCE_EXPIRE_END_TIME_IN_UTC_STRING = '2017-01-28T00:00Z'
def renew_job(page_size=100, page_number=1, check_need_renew=True, security_group_id=None):
    response = describe_need_renew_instance(page_size=page_size, page_number=page_number,
                                            check_need_renew=check_need_renew,
                                            security_group_id=security_group_id)
    response_list = response.get('Instances').get('Instance')
    logging.info("%s instances need to renew", str(response.get('TotalCount')))
    if response_list > 0:
        instance_ids = ''
        for item in response_list:
            instance_id = item.get('InstanceId')
            instance_ids += instance_id + ','
            renew_instance(instance_id=instance_id)
        logging.info("%s execute renew action ready", instance_ids)
def describe_need_renew_instance(page_size=100, page_number=1, instance_id=None,
                                 check_need_renew=True, security_group_id=None):
    request = DescribeInstancesRequest()
    if check_need_renew is True:
        request.set_Filter3Key("ExpiredStartTime")
        request.set_Filter3Value(INSTANCE_EXPIRED_START_TIME_IN_UTC_STRING)
        request.set_Filter4Key("ExpiredEndTime")
        request.set_Filter4Value(INSTANCE_EXPIRE_END_TIME_IN_UTC_STRING)
    if instance_id is not None:
        request.set_InstanceIds(json.dumps([instance_id]))
    if security_group_id:
        request.set_SecurityGroupId(security_group_id)
    request.set_PageNumber(page_number)
    request.set_PageSize(page_size)
    return _send_request(request)
# check the instances is renew or not
def describe_instance_auto_renew_setting(instance_ids, expected_auto_renew=True):
    describe_request = DescribeInstanceAutoRenewAttributeRequest()
    describe_request.set_InstanceId(instance_ids)
    response_detail = _send_request(request=describe_request)
    failed_instance_ids = ''
    if response_detail is not None:
        attributes = response_detail.get('InstanceRenewAttributes').get('InstanceRenewAttribute')
        if attributes:
            for item in attributes:
                auto_renew_status = item.get('AutoRenewEnabled')
                if auto_renew_status != expected_auto_renew:
                    failed_instance_ids += item.get('InstanceId') + ','
    if len(failed_instance_ids) > 0:
        logging.error("instance %s auto renew not match expect %s.", failed_instance_ids,
                      expected_auto_renew)
def setting_instance_auto_renew(instance_ids, auto_renew=True):
    logging.info('execute enable auto renew ' + instance_ids)
    request = ModifyInstanceAutoRenewAttributeRequest();
    request.set_Duration(1);
    request.set_AutoRenew(auto_renew);
    request.set_InstanceId(instance_ids)
    _send_request(request)
    describe_instance_auto_renew_setting(instance_ids, auto_renew)
# if using the instance id can be found means the instance is not renew successfully.
def check_instance_need_renew(instance_id):
    response = describe_need_renew_instance(instance_id=instance_id)
    if response is not None:
        return response.get('TotalCount') == 1
    return False
# 续费一个实例一个月
def renew_instance(instance_id, period='1'):
    need_renew = check_instance_need_renew(instance_id)
    if need_renew:
        _renew_instance_action(instance_id=instance_id, period=period)
        # describe_need_renew_instance(instance_id=instance_id, check_need_renew=False)
def _renew_instance_action(instance_id, period='1'):
    request = RenewInstanceRequest()
    request.set_Period(period)
    request.set_InstanceId(instance_id)
    response = _send_request(request)
    logging.info('renew %s ready, output is %s ', instance_id, response)
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)
if __name__ == '__main__':
    logging.info("Renew ECS Instance by OpenApi!")
    # 查询在指定的时间范围内是否有需要续费的实例。
    describe_need_renew_instance()
    # 续费一个实例, 直接执行扣费
    renew_instance('i-1111')
    # 查询实例自动续费的状态
    # describe_instance_auto_renew_setting('i-1111,i-2222')
    # 设置实例自动续费
    # setting_instance_auto_renew('i-1111,i-2222')

Das obige ist der detaillierte Inhalt vonSo führen Sie Verlängerungsabfragen und Verlängerungsverwaltung direkt über die API durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn