通过API申请华为云弹性公网IP地址

1. 简述

目前华为云上,为我们提供了各种不同的云服务类型,满足我们的日常业务,通常来说,需要一个云服务,可以通过登录华为云控制台进行购买,但也有一些情况,我们需要在自己的业务代码里来实现云服务的购买;

华为云上的各项服务,目前均已经提供比较完整的API接口调用,我们可以下载云服务提供的SDK,或者自定义代码来调用云服务的API接口,来帮助我们便捷的完成云服务的申请操作;

1.1.环境说明

本次测试所使用的环境:
  • 本地OS:MacOS 10.15.7

  • IDE环境:PyCharm 2020.3

  • 代码环境:Python 3.7.5

  • 调用云服务:弹性公有IP地址(EIP)


2. 操作过程

2.1. 本地安装SDK

  • 注意,华为云官方SDK版本经常升级,而各个不同版本之间,需注意版本相同,否则会出现调用错误;

  • 本次测试所需的关键SDK匹配:huaweicloudsdkcore、huaweicloudsdkeip;

  • 如果以前安装有旧的版本,需要升级:pip install huaweicloudsdkcore --upgrade、pip install huaweicloudsdkeip --upgrade


2.2. 获取API接口代码


from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdkeip.v2 import *
from huaweicloudsdkeip.v2.region.eip_region import EipRegion

 __name__  :
    ak  
    sk  

    credentials  BasicCredentials(ak, sk) \

    client  EipClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(EipRegion.value_of()) \
        .build()

    try:
        request  CreatePublicipRequest()
        publicipCreatePublicipOption  CreatePublicipOption(
            ,
            ,
            
        )
        bandwidthCreatePublicipBandwidthOption  CreatePublicipBandwidthOption(
            ,
            
        )
        request.body  CreatePublicipRequestBody(
            publicipCreatePublicipOption,
            bandwidthCreatePublicipBandwidthOption
        )
        response  client.create_publicip(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)


2.3. 配置个人用户信息

必须要赞一下,SDK版本升级后,所需要提供的个人帐号信息大幅减少,现在只需要提供一个 Region 信息即可,老版本还需要提供endpoint、project等信息,有点儿烦;

获取AK/SK信息路径:点击右上角帐号名-->“我的凭证”-->“访问密钥”-->“新增访问密钥”去添加,细节不再赘述;

获取Region信息:https://developer.huaweicloud.com/endpoint?all

地域信息截图如下:

获取AK/SK和Region信息后,替换上面示例代码中的对应信息即可


3. 应用场景

通过API申请EIP云服务,除在部分代码开发场景需要使用,还有另外一种情况,遇到的也比较多;

部分客户,公司组织结构比较庞大,申请了多个云帐号的情况下,想将其中一个帐号的 EIP 转换到 另一个企业帐号内,而华为云本身,是不提供云资源跨帐号转移功能的,也无法在控制台上申请指定地址的弹性公网IP,这种情况下,可以通过API来操作;

3.1. 按需EIP跨帐号转移

以下是操作过程:

  • 修改2.2.小节所示的API代码,在 ip_address 字段,填写将要转移的 EIP 地址;

  • 修改API代码,在AK/SK字段,填写目标帐号的AK/SK信息;

  • 在源帐号里,操作释放按需 EIP 资源;

  • 执行API代码,在目的帐号里,申请指定的 EIP 资源;

  • 使用目的帐号登录华为云控制台,检查EIP资源是否申请成功;


3.2. 包周期EIP跨帐号转移

为了做这个实际,实打实的买了两个包月的 EIP,当然是最便宜的 1 M的那种^_^,一个在北京四地域,一个在上海二地域;

以下是操作过程:

  • 修改2.2.小节所示的API代码,在 ip_address 字段,填写将要转移的 EIP 地址;

  • 修改API代码,在AK/SK字段,填写目标帐号的AK/SK信息;

  • 在源帐号里,操作 “退订使用中的资源”,退订当前的包周期资源;

    注:此处可能涉及费用问题,平台不会退还全部费用,会扣除一部分,操作前请谨慎;

  • 执行API代码,在目的帐号里,申请指定的 EIP 资源;

VPC.0522
{: {: , : , : }}


Python .7.5 (default, Oct  , :52:18) 
[Clang .0.1 (tags/RELEASE_401/final)] on darwin
runfile(, )
{: {: ,
              : datetime.datetime(2021, , , , , , tzutc()),
              : ,
              : ,
              : ,
              : ,
              : None,
              : ,
              : ,
              : }}
  • 使用目的帐号登录华为云控制台,检查EIP资源是否申请成功;


3.3. 总结

上面操作了两次包周期的EIP的转移实验,第 1 次操作是在北京4地域,操作失败,提示不是一个有效的IP地址;第 2 次操作是在上海2地域,操作成功。

至于为什么会这样,你想知道原因?


(完)