Python实现阿里云ecs主机公网IP的切换功能程序

对于采集、注册或者代理来说,如果服务器公网IP可以自动切换,那么可能会少很多麻烦。最近博主就使用阿里云的api实现了这个小功能。实现的步骤比较简单,首先需要申请阿里云的api key。然后申请vpc专有网络,普通经典ecs主机无法挂载弹性IP,在刚刚申请的专有网络中开通一台ecs服务器。接着申请弹性公网IP。最后把这个公网IP挂载到专有网络下的ecs。完成后付费包括两部分,一个是ecs费用(包年或包月,预付费),另外是弹性公网eip的费用(按量、后付费)。

接下来开始用python来实现下。阿里云提供了python的sdk,这里博主就直接用sdk了。

第一步:创建vpc和ecs

这个直接在阿里云页面上创建就可以。

第二步:安装sdk

pip install aliyun-python-sdk-ecs
不清楚的可以参考阿里云:https://develop.aliyun.com/sdk/python

第三步:弹性公网IP方法

代码类似如下:

申请

def create_eip_address(regionid='cn-hongkong',chargetype='PayByBandwidth',bandwidth=1,fmt='json'):
    request=AllocateEipAddressRequest.AllocateEipAddressRequest()
    request.set_accept_format(fmt)
    request.set_Bandwidth(bandwidth)
    request.add_query_param('RegionId',regionid)
    request.add_query_param('InternetChargeType',chargetype)
   
    try:
        result=clt.do_action(request)
        r_dict=json.loads(result)
    except:
        print("Create EIP Address Failed.")
        sys.exit()
   
    if r_dict.has_key('EipAddress'):
        res={}
        res['ip']=r_dict['EipAddress']
        res['id']=r_dict['AllocationId']
        return res
    else:
        print(r_dict['Message'])
        sys.exit()
删除

def delete_eip_address(eipid,fmt='json'):
    request=ReleaseEipAddressRequest.ReleaseEipAddressRequest()
    request.set_accept_format(fmt)
    request.set_AllocationId(eipid)
    try:
        result=clt.do_action(request)
        r_dict=json.loads(result)
    except:
        print("Delete EIP Address Failed.")
        sys.exit()
   
    if r_dict.has_key('Code'):
        print(r_dict['Message'])
        sys.exit()
    else:
        return r_dict
绑定

def associate_eip_address(allocationid,instanceid,instancetype='EcsInstance',fmt='json'):
    request=AssociateEipAddressRequest.AssociateEipAddressRequest()
    request.set_accept_format(fmt)
    request.set_AllocationId(allocationid)
    request.add_query_param('InstanceType',instancetype)
    request.set_InstanceId(instanceid)
    try:
        result=clt.do_action(request)
        r_dict=json.loads(result)
    except:
        print("Associate EIP Address Failed.")
        sys.exit()
       
    if r_dict.has_key('Code'):
        print(r_dict['Message'])
        sys.exit()
    else:
        return r_dict
解绑

def unassociate_eip_address(allocationid,instanceid,instancetype='EcsInstance',fmt='json'):
    request=UnassociateEipAddressRequest.UnassociateEipAddressRequest()
    request.set_accept_format(fmt)
    request.set_AllocationId(allocationid)
    request.add_query_param('InstanceType',instancetype)
    request.set_InstanceId(instanceid)
    try:
        result=clt.do_action(request)
        r_dict=json.loads(result)
    except:
        print("Unassociate EIP Address Failed.")
        sys.exit()
       
    if r_dict.has_key('Code'):
        print(r_dict['Message'])
        sys.exit()
    else:
        return r_dict
以上就是一些弹性公网IP的4个方法,分别实现IP的申请、删除、绑定和解绑的功能。

第四步:更换IP

更换IP步骤:

获取ECS信息 --有EIP--> 解绑EIP -> 删除老EIP -->申请新EIP --> 绑定新EIP到ECS
    |                                              ^
    |                                              |
    -------------------无EIP------------------------
在删除老的公网IP前需要判断是否真的解绑,不然解绑请求提交给阿里云后马上删除老的EIP可能会因为eip还未解绑而报错。

代码类似如下:

def main():
    #获取当前vpc下ecs主机的eip
    instance=instance_info(ecs_vpc_id)
    eip_id=instance['EipAddress']['AllocationId']
    eip_ip=instance['EipAddress']['IpAddress']
    if not instance:
        print("Get instance info error.")
        sys.exit()
    else:
        if not eip_id:
            print("Instance %s has not associate eip address.") % ecs_vpc_id
        else:
            print("Instance: %s ,Eip id: %s .") % (ecs_vpc_id,eip_id)
   
            #解绑eip
            result_unassociate=unassociate_eip_address(eip_id, ecs_vpc_id)
            if not result_unassociate:
                print("Unassociate eip address from %s error.") % ecs_vpc_id
                sys.exit()
           
            #判断真正解绑后开始删除老的eip
            while True:
                eip_id_tmp=instance_info(ecs_vpc_id)['EipAddress']['AllocationId']
                if not eip_id_tmp:
                    #删除老的eip
                    result_release=delete_eip_address(eip_id)
                    if not result_release:
                        print("Release eip %s error.") % eip_id
                        sys.exit()
                    break
                else:
                    continue
                time.sleep(1)
   
    #申请新eip
    result_allocate=create_eip_address(bandwidth=eip_bandwidth)
    if not result_allocate:
        print("Allocate new eip address error.")
        sys.exit()
   
    #time.sleep(10)
   
    #绑定eip
    result_associate=associate_eip_address(result_allocate['id'], instanceid=ecs_vpc_id)
    if not result_associate:
        print("Associate eip %s to instance %s error.") % (result_allocate,ecs_vpc_id)
        sys.exit()
    else:
        print("Associate eip %s to instance %s successfully.") % (result_allocate['ip'],ecs_vpc_id)
        ip_dict={
            'oip':eip_ip,
            'nip':result_allocate['ip']
        }
        return ip_dict
 

以上代码我放在github上,地址:https://github.com/zhangnq/scripts/tree/master/python/aliyun,感兴趣的朋友也可以看下

时间: 2024-09-20 21:18:41

Python实现阿里云ecs主机公网IP的切换功能程序的相关文章

阿里云发布固定公网IP升级为弹性公网IP功能

固定公网IP可升级为弹性公网IP 如果购买ECS服务器是选择了分配公网IP,此时得到的公网IP是不能和ECS解绑的,是固定公网IP,固定公网IP和ECS服务器强耦合. 在一些被攻击场景,故障场景,迁移场景,水平扩展场景下,很多用户有强烈的将公网IP和后端ECS服务器解绑的需求.阿里云在10月30日推出了,ECS固定公网IP转换为弹性公网IP的功能,来满足广大用户的使用需求.具体文章请参阅云栖文章:阿里云推出固定公网IP转换为弹性公网IP功能 本文希望借阿里云推出固定公网IP转换为弹性公网IP功能

一键清理网站木马文件,从此网站拥有专属保镖 ——阿里云虚拟主机推出木马查杀功能

近日,阿里云推出了云虚拟主机网站木马查杀的新功能,十分适合对网站安全不了解.不熟悉的用户,或网站出现挂马情况不清楚如何处理的用户. 阿里云表示,此次网站木马查杀功能是阿里云安骑士专为虚拟主机推出的安全增值服务.通过周期和动态地对网站目录进行安全扫描,一旦发现网站后门,如webshell或挂马文件等,由于该类文件都可能导致网站数据泄露.网站页面被篡改.监管勒令关站等风险,阿里云将会给用户发送安全通知,用户可登录到虚拟主机的控制台进行木马文件的处置工作,确保网站环境的安全和纯净. 一般而言,用户网站

阿里云ecs主机Nginx 502 bad gateway问题的解决方法

见的原因可能是php-cgi进程数不够用.php执行时间长(mysql慢).或者是php-cgi进程死掉,都会出现502错误. 1. 在安装好的环境中,运行一段时间出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加. 2. php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time

阿里云ECS服务器搭建wordpress个人博客网站【详细图文教程】

阿里云ECS服务器搭建wordpress个人博客网站[小白专用的图文教程] 在阿里云上搭建使用个人博客主要分为以下几个步骤: 1.购买阿里云ECS主机 2.购买域名 3.申请备案 4.环境配置 5.安装wordpress 6.域名解析 声明一下,本人对服务器端的知识不是很熟悉,但一心想做个自己的个人网站装一下哔,特此记录一下完整的配置过程,也算是给其他小白们的一剂福利吧.   开发环境: 物理机版本:Win 7 旗舰版(64位) xshell版本:Xshell 5 Build 0806 xftp

网站访问速度提升200%以上,阿里云虚拟主机支持PHP最新版本

日前,阿里云虚拟主机推出了新功能,支持PHP的最新版本 7.0和7.1,并支持用户在多个不同PHP版本之间切换. PHP 作为最好的Web编程语言,最新版本已经更新到了7.0和7.1.阿里云作为国内虚拟主机的领头羊,为了给用户提供更先进.选择更多的建站环境选择,推出了PHP7.0和7.1的支持. 目前,国内绝大多数虚拟主机服务商目前支持的PHP最新版本还停留在PHP 5时代,而阿里云推出了PHP 7尤其是PHP 7.1版本,是国内首家支持PHP 7.1的虚拟主机服务商. 阿里云虚拟主机此次推出的

阿里云ECS美国西部VPS主机配置及性能测试

我们用户对于阿里云ECS服务器应该还是比较了解的,正是因为这些大佬商家的出现,整个IDC市场都在进行重新洗牌,包括一些小的IDC服务商需要调整业务方向和产品项目.之前也有不少的网友和老左聊天,这些商家出现后如今IDC业务非常难做,不过还是有市场的,比如我们可以调整业务方向,注重口碑和品牌的维护,一定程度上降低利润.   在一定程度上,如今竞争激烈的市场对于我们用户而言选择度更广,对于商家来说无论是个人还是公司更需要提供细分市场服务,以及并不是这些大商家出现没有机会.比如今天老左要体验的是阿里云E

什么是轻量应用服务器?与阿里云ecs和虚拟主机有什么区别?阿里云优惠券领取

什么是阿里云轻量应用服务器?  轻量应用服务器是面向入门级云计算及简单应用用户,提供基于单台云服务器的域名管理.应用部署.安全和运维管理的一站式综合服务.用户可以选择精品应用镜像(比如wordpress),并可在控制台实现全方位的服务器.域名.防火墙.安全防控.监控等管理和操作.轻量应用服务器 (Simple Application Server),是可快速搭建且易于管理的轻量级云服务器. 阿里云轻量应用服务器的优点是什么? 1.易用易上手. 产品针对单机用户的购买和使用做了操作和使用优化,提供

阿里云ecs服务器价格_阿里云主机价格表

很多新手想购买阿里云ecs服务器,但由于对价格方面不是很了解,所以会找阿里云价格表作为参考了解一下.但都没能给出满意的答案,其实阿里云ecs服务器价格不是固定的,根据ecs服务器不同的配置,价格也会有所不同哦!但是可以到阿里云价格询价表,点击进去这个链接,然后根据自己要选择的ecs服务器配置给出对应价格.下图为阿里云服务器产品截图的基本价格表.(该截图只截取一小部分)   请在购买阿里云ecs服务器时先领取阿里云幸运券,幸运券可以在官方优惠上再加优惠,实现优惠加优惠哦! 通过阿里云询价表知道阿里

阿里云虚拟主机:怎么查看FTP帐号、密码、IP?怎么查看数据库账号、地址和密码等?

注意,请先到阿里云官网领取幸运券,除了价格上有很多优惠外,还可以参与抽奖.详见:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=2a7uv47d&utm_source=2a7uv47d 提示:密码只能修改,不能查看,修改后,上面也只是显示*****,是看出具体的密码的,所以修改时,请记住您改的密码.1.用主机管理账号和管理密码登录万网主机管理控制台:http://cp.hichina.com,如