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

举报
寒六先生 发表于 2021/03/22 17:58:20 2021/03/22
【摘要】 目前华为云上,为我们提供了各种不同的云服务类型,满足我们的日常业务,通常来说,需要一个云服务,可以通过登录华为云控制台进行购买,但也有一些情况,我们需要在自己的业务代码里来实现云服务的购买; 华为云上的各项服务,目前均已经提供比较完整的API接口调用,我们可以下载云服务提供的SDK,或者自定义代码来调用云服务的API接口,来帮助我们便捷的完成云服务的申请操作;

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接口代码

# coding: utf-8

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

if __name__ == "__main__":
  ak = "<YOUR AK>"
  sk = "<YOUR SK>"

  credentials = BasicCredentials(ak, sk) \

  client = EipClient.new_builder() \
      .with_credentials(credentials) \
      .with_region(EipRegion.value_of("cn-north-4")) \
      .build()

  try:
      request = CreatePublicipRequest()
      publicipCreatePublicipOption = CreatePublicipOption(
           ip_address="222.222.222.222", # 此处是示例,换成实际需要的IP地址
           type="5_sbgp",
           ip_version=4
      )
      bandwidthCreatePublicipBandwidthOption = CreatePublicipBandwidthOption(
           share_type="PER",
           size=1
      )
      request.body = CreatePublicipRequestBody(
           publicip=publicipCreatePublicipOption,
           bandwidth=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 资源;

# 以下为第 1 次操作 北京四eip的实验结果,申请失败:
VPC.0522
{"NeutronError": {"detail": "", "message": "IP address ***.9.***.181 is not a valid IP for any of the subnets on the specified network.", "type": "InvalidIpForNetwork"}}

# 以下为第 2 次操作 上海二eip的实验结果,申请成功:
Python 3.7.5 (default, Oct 25 2019, 10:52:18)
[Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
runfile('/Users/*************/mypython/hwcloud/20210316_CreatePublicip.py', wdir='/Users/yangzhanbo/mypython/hwcloud')
{'publicip': {'bandwidth_size': 0,
             'create_time': datetime.datetime(2021, 3, 22, 9, 39, 42, tzinfo=tzutc()),
             'enterprise_project_id': '0',
             'id': '91****24-0c91-****-80a5-108a****0282',
             'ip_version': 4,
             'public_ip_address': '***.63.***.161',
             'public_ipv6_address': None,
             'status': 'PENDING_CREATE',
             'tenant_id': '077b****aa80251****3c009****0c0e',
             'type': '5_sbgp'}}
  • 使用目的帐号登录华为云控制台,检查EIP资源是否申请成功;

3.3. 总结

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。