阿里云服务器自动化批量升级临时带宽

利用阿里云服务的openAPi功能,可以实现服务配置自动化管理。

ecs临时带宽升级实例:

api说明文档:  链接
api调试工具: 链接
阿里云SDK下载地址: 链接

代码实例:

function temporaryBandwidthUpgrade($netOut = null, $startTime = null, $endTime = null)
{
      date_default_timezone_set('PRC');
    $now = time();
    if(!is_numeric($netOut) || $netOut<=5 || strtotime($startTime) <= ($now - 300) ||
        strtotime($endTime) <= (strtotime($startTime) + 10800)){
        echo '传参错误! 使用说明:' . PHP_EOL;
        echo '1、startTime 要晚于当前时间至少5分钟,精确到分' . PHP_EOL;
        echo '1、endTime 需要比起始时间至少晚三个小时,精确到时' . PHP_EOL;
        exit('php index.php temporaryBandwidthUpgrade (int)netOut (Y-m-d H:i:s)startTime (Y-m-d H:i:s)endTime' . PHP_EOL);
    }
    $prcStartTime = date('Y-m-d H:i', strtotime($startTime));
    $prcEndTime = date('Y-m-d H', strtotime($endTime));
    $startTime = date('Y-m-d\TH:i\Z', strtotime($startTime)-28800);
    $endTime = date('Y-m-d\TH\Z', strtotime($endTime)-28800);

    $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", <accessKeyId>, <accessSecret>);
    $client = new DefaultAcsClient($iClientProfile);
    //设置参数
    $request = new Ecs\ModifyInstanceNetworkSpecRequest();
    $request->setInternetMaxBandwidthOut($netOut);
    $request->setStartTime($startTime);
    $request->setEndTime($endTime);
    # 获取需升级阿里云服务器实例
    $servers = getServers();
    $success = [];
    $fail = [];
    foreach ($servers as $key => $val){
        $request->setInstanceId($val['instanceId']);
        // 发起请求
        try {
            $response = $client->getAcsResponse($request);
        }catch (Exception $exception) {
            $fail[] = $val['name'];
        }
        if(!empty($response->RequestId)){
            $success[] = $val['name'];
        }
    }

    $data = [
        'subject' => '服务器临时带宽升级详情',
        'message' => '服务器临时带宽升级详情:' . $prcStartTime . ' ~ ' . $prcEndTime . ' 升级带宽为 ' .
            $netOut . ' M<br>升级成功 ' . count($success) . ' 台:<br>' . var_export($success, true) .
            '<br> 升级失败 ' . count($fail) . ' 台:<br>' . var_export($fail, true),
        'email' => json_encode([
            'xxx' => '[email protected]',
        ])
    ];
    $this->load->library('curl');
    simple_post('http://xxx.com/ccc/vvv', $data);
    exit();
}

接口说明:

接口描述

修改实例的带宽配置。当实例现有网络规格不满足要求时,可以通过此接口修改实例的网络规格来提高网络性能。修改后可能影响到实例所产生的账单费用。在使用这个接口的时候,需要注意以下几点:

  • 该接口默认为自动扣费,修改 AutoPay 参数可设置是否自动扣费。如果设置自动扣费,请确保账户余额充足,如果账号余额不足,会生成未支付订单,该订单暂时无法支付,需要登录控制台取消订单。
  • 修改包年包月实例的带宽配置:
    • 支持包年包月实例的带宽大小的变更,流量带宽支持调大调小,固定带宽只能调大。
    • 支持包年包月实例流量带宽转固定带宽。
    • OPENAPI暂未开放包年包月实例固定带宽转流量带宽,可登陆控制台进行操作。
    • 支持包年包月实例带宽类型为固定带宽时候的临时带宽升级。
  • 修改按量付费实例的带宽配置:
    • 支持按量付费实例的带宽大小的变更,可以调大带宽也可以调小带宽。
    • 支持按量付费实例流量带宽转固定带宽,固定带宽转流量带宽。
  • 在包年包月实例带宽临时升级的时候:
    • 在实例有效时间内可以进行最短三小时最长不超过实例有效期的带宽升级调整。
    • 带宽付费类型必须为固定带宽才能进行临时带宽升级。
    • 需要输入参数 StartTime 和 EndTime,指定调整后的带宽的生效时间段。在这种场景下不支持调小带宽。
    • 如果当前时段有已经生效的或者计划中的临时带宽升级,再次进行临时带宽升级的时候带宽值必须比当前带宽值或者生效中的临时带宽值大。
    • 单个实例同一时间只能最多存在 10 条带宽的有效记录,超过则不能继续创建。
  • 经典网络下的实例,当公网出带宽从 0M 升级到大于 0M 的时候,实例必须处于停止(Shutted)状态。预付费实例(Prepaid)公网出方向带宽从 0M 升级到大于 0M 的时候会自动分配公网 IP,后付费实例(PostPaid)公网出方向带宽从 0M 升级到大于 0M 的时候不会自动分配公网 IP,需要调用AllocatePublicIpAddress接口给实例分配公网 IP。
  • 单个实例每成功操作一次,5 分钟内不能继续操作。

请求参数说明

名称 类型 是否必须 描述
Action String 系统规定参数,取值:ModifyInstanceNetworkSpec。
InstanceId String 指定的需要实例规格的实例 ID。
InternetMaxBandwidthOut Integer 公网出网带宽最大值,单位为 Mbps (Megabit per second)。 - 按带宽计费:[0,200]。- 按流量计费:[0,200]。
InternetMaxBandwidthIn Integer 公网入网带宽最大值,单位为 Mbps。按带宽计费:[1,200]。按流量计费:[1,200]。
networkChargeType String 转换网络计费类型,转换为按流量计费或按固定带宽计费。可选值:- PayByBandwidth - PayByTraffic
StartTime String 临时带宽生效的起始时间。按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为: yyyy-MM-ddTHH:mmZ。例如 2017-08-09T09:40Z 。起始时间精确到分钟,起始时间需要比当前时间至少晚两分钟。该参数只对包年包月实例的固定带宽有效,其他模式带宽不支持该参数。
EndTime String 临时带宽生效的终止时间。按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为: yyyy-MM-ddTHHZ。 例如 2017-08-09T09Z 。终止时间精确到小时,终止时间需要比起始时间至少晚三个小时。该参数只对包年包月实例的固定带宽有效,其他模式带宽不支持该参数。
AutoPay Boolean 默认为 true,自动支付。可修改该参数来设置是否自动支付。当设置了自动支付,如果账号余额不足,需要登录控制台作废订单,同一实例最多存在一条未支付订单。
ClientToken String 用于保证请求的幂等性。由客户端生成该参数值,要保证在不同请求间唯一,最大不值过 64 个 ASCII 字符。具体参见附录:如何保证幂等性。

引用链接

[1] 链接: https://help.aliyun.com/document_detail/25545.html?spm=5176.11065259.1996646101.searchclickresult.4f6f6fc7uUIZPk
[2] 链接: https://api.aliyun.com/?#product=Ecs&api=ModifyInstanceNetworkSpec¶ms=%7B%7D&tab=DEMO&lang=PHP&_=r
[3] 链接: https://github.com/aliyun/aliyun-openapi-php-sdk/tree/master/
[4] 控制台: https://ecs.console.aliyun.com/
[5] 控制台: https://ecs.console.aliyun.com/
[6] 控制台: https://ecs.console.aliyun.com/#/home