腾讯云API弹性公网IP踩坑

由于自己管理的云服务器数量比较多,时不时需要更换IP,在管理台上一下下点击,实在浪费时间,于是就想到了通过API调用的方式,将更换IP一系列动作,全部集成到Python代码里面,实现一行命令,完成IP更换,由于人懒,就先

把最核心的代码(虽然都是腾讯云生成的)、流程、坑点贴出来,仅供菜鸟参考,高手无视!

具体步骤:

一 进入 https://cloud.tencent.com/document/api ,

页面左侧列表查找“私有网络”---“弹性公网相关接口”,就可以看到对应接口的文档了

二 选择一个接口,然后点击“API 3.0 Exploper”,进入到开发者工具页面,

坑点一:第二张图,对于菜鸟来说,引入的相关模块直接用“pip install 对应模块名”会报错

看第一张图sdk,相关语言sdk,点击就可以看到github上各语言的库引用方式

三 直接copy开发者工具上的代码,当然你也可以看下图代码

坑点二:"SecretId ","SecretKey" 这两个值是你调用API,腾讯用来确认你身份的凭证,

在哪里申请呢?腾讯云的首页,“云产品”--“管理工具”--“云API秘钥”,

没有使用过的话,是不会在你的控制台上显示的。

坑点三:由于腾讯云API文档的不合理,导致生成的代码有一些坑,

具体坑信息我已在代码里通过注释的方式解释了

from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.vpc.v20170312 import vpc_client, models

#查询弹性IP
def findIp():
    try:
        cred = credential.Credential("SecretId ", "SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "vpc.tencentcloudapi.com"
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = vpc_client.VpcClient(cred, "ap-chongqing", clientProfile)
        req = models.DescribeAddressesRequest()
        params = '{}'
        req.from_json_string(params)
        resp = client.DescribeAddresses(req)
        #eip=resp.to_json_string()[34:61]
        eip=resp.to_json_string()[48:60]
        print(eip)   #打印结果:"AddressId": "eip-ilzg91oy"
        return eip
    except TencentCloudSDKException as err:
        print(err)

#解除绑定IP
def unbindingIp():
    try:
        cred = credential.Credential("SecretId ", "SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "vpc.ap-chongqing.tencentcloudapi.com"
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = vpc_client.VpcClient(cred, "ap-chongqing", clientProfile)
        req = models.DisassociateAddressRequest()
        eip = findIp()
        params = eip
        #req.from_json_string(params)
        req.AddressId=params   #这里修改了一下,官网生成的是上一行代码
        resp = client.DisassociateAddress(req)
        print(resp.to_json_string())
    except TencentCloudSDKException as err:
        print(err)
#释放IP
def releaseIp():
    try:
        cred = credential.Credential("SecretId ", "SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "vpc.ap-chongqing.tencentcloudapi.com"

        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = vpc_client.VpcClient(cred, "ap-chongqing", clientProfile)

        req = models.DescribeAddressesRequest()
        eip = findIp()
        list=[]
        list.append(eip)
        params = list
        req.AddressIds=params  #这里修改了一下,要求传数组
        resp = client.ReleaseAddresses(req)
        print(resp.to_json_string())
    except TencentCloudSDKException as err:
        print(err)

#创建IP
def newIp():
    try:
        cred = credential.Credential("SecretId", "SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "vpc.ap-chongqing.tencentcloudapi.com"
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = vpc_client.VpcClient(cred, "ap-chongqing", clientProfile)
        req = models.AllocateAddressesRequest()
        params = '{}'
        req.from_json_string(params)
        resp = client.AllocateAddresses(req)
        print(resp.to_json_string())

    except TencentCloudSDKException as err:
        print(err)

#绑定弹性IP
def binding():
    try:
        cred = credential.Credential("SecretId", "SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "vpc.ap-chongqing.tencentcloudapi.com"

        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = vpc_client.VpcClient(cred, "ap-chongqing", clientProfile)

        req = models.AssociateAddressRequest()
        #params = '{"ins-61lwor90"}'
        #req.from_json_string(params)
        #这是只传AddressId的报错:MissingAssociateEntity message:You need to specify the entity ID `"InstanceId"` or `"NetworkInterfaceId"` to associate this address. requestId:81702256-e75f-458f-afde-e87a69554f83
        #所以至少要传两个值
        req.InstanceId = "ins-61cwor70"
        eip = findIp()
        req.AddressId=eip
        resp = client.AssociateAddress(req)
        print(resp.to_json_string())

    except TencentCloudSDKException as err:
        print(err)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

wujianqinjian的云

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

Catalog Service - 解析微软微服务架构eShopOnContainers(三)

上一篇我们说了Identity Service,因为其基于IdentityServer4开发的,所以知识点不是很多,今天我们来看下Catalog Service...

3018
来自专栏魏艾斯博客www.vpsss.net

解决 Winscp 不显示隐藏文件的办法

1132
来自专栏Golang语言社区

Go HttpServer 最佳实践

这是 Cloudflare 的 Filippo Valsorda 2006年发表在Gopher Academy的一篇文章, 虽然过去两年了,但是依然很有意义。

1780
来自专栏jeremy的技术点滴

初识glusterfs

3584
来自专栏IT笔记

前后端分离之SpringBoot项目Token认证

写在开始 有人说,爱上一座城,是因为城中住着某个喜欢的人。其实不然,爱上一座城,也许是为城里的一道生动风景,为一段青梅往事,为一座熟悉老宅。或许,仅仅为的只是这...

4569
来自专栏逸鹏说道

NET跨平台:在Ubuntu下搭建ASP.NET 5开发环境

0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了。最近工作上有个小功能要做成Web应...

2963
来自专栏信安之路

RedTeam 技巧集合

1、利用目标用户使用的 user agent 来隐藏自身的恶意流量,比如像 Outlook 软件的 UA。

1432
来自专栏李蔚蓬的专栏

VMware Workstation14.1.3 & Ubuntu18.04从安装到实用的填坑之路

本机VMware Workstation环境是上学期安装的,拿的老师给的安装包,版本10.0.1。顺便装了个Ubuntu15.10。

1451
来自专栏大魏分享(微信公众号:david-share)

PowerVM 环境下实施 PowerHA7.1 要点

前言 随着 PowerVM 使用的越来越多,在虚拟化环境下实施 PowerHA 的案例会越来越多。传统 PowerHA6.1 在物理分区下实施是比较经典的配置,...

3704
来自专栏Python数据科学

给Python初学者的最好练手项目

其实,做项目主要还是根据需求来的。但是对于一个初学者来说,很多复杂的项目没办法独立完成,因此博主挑选了一个非常适合初学者的项目,内容不是很复杂,但是非常有趣,我...

1592

扫码关注云+社区

领取腾讯云代金券