通过API申请华为云弹性公网IP地址
目前华为云上,为我们提供了各种不同的云服务类型,满足我们的日常业务,通常来说,需要一个云服务,可以通过登录华为云控制台进行购买,但也有一些情况,我们需要在自己的业务代码里来实现云服务的购买;
华为云上的各项服务,目前均已经提供比较完整的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接口代码
-
可以直接使用ApiExplorer提供的示例代码
-
获取API示例代码的网址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/overview
# 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
地域信息截图如下:
3. 应用场景
通过API申请EIP云服务,除在部分代码开发场景需要使用,还有另外一种情况,遇到的也比较多;
3.1. 按需EIP跨帐号转移
以下是操作过程:
-
修改2.2.小节所示的API代码,在 ip_address 字段,填写将要转移的 EIP 地址;
-
修改API代码,在AK/SK字段,填写目标帐号的AK/SK信息;
-
在源帐号里,操作释放按需 EIP 资源;
-
执行API代码,在目的帐号里,申请指定的 EIP 资源;
-
使用目的帐号登录华为云控制台,检查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'}}
3.3. 总结
上面操作了两次包周期的EIP的转移实验,第 1 次操作是在北京4地域,操作失败,提示不是一个有效的IP地址;第 2 次操作是在上海2地域,操作成功。
至于为什么会这样,你想知道原因?
- 点赞
- 收藏
- 关注作者
评论(0)