1. 起因:
-
因业务测试要求,需要要华为云上申请一个临时公网IP地址;
-
嫌弃每次登录控制台,界面操作太繁琐;
-
下载了EIP的SDK,然后直接拿API内的CreatePublicip的示例代码,想在本地IDE内一键式申请EIP;
2. 过程:
2.1. SDK下载安装
# 华为云各个SDK下载,都还比较方便;
# 我的本地IDE是PyCharm + Python 3.9环境,SDK直接通过pip install来安装
$ pip install huaweicloudsdkcore --upgrade
# huaweicloudsdkcore这个sdk,以前安装过,但版本较老,所以更新一下
$ pip install huaweicloudsdkeip
2.2. 获取CreatePublicip代码示例
# 华为云的API Explorer,提供了大量可供参考的代码示例,省去了很多摸索过程;
# API Explorer地址供参考:https://apiexplorer.developer.huaweicloud.com/apiexplorer/overview
# 以下是官方提供的CreatePublicip代码示例:
# 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-east-2")) \
.build()
try:
request = CreatePublicipRequest()
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)
为了方便后面的问题比较,截图如下:
3.3. 本地IDE调试
# 示例代码直接复制到本地,根据以往经验,添加其它需要的参数;
# 修改完成后,如下截图所示:
上面代码中的Project_id,是我自己手动加上去的,也查看了SDK的源代码,是支持增加project_id的传入值的;
先备份一下,这里是导致问题出现的关键;
3.4. 问题
-
看起来好像申请成功了,但是到控制台没找到;
-
各个region都找了,就是看不到去哪里了;
-
但是在“我的资源”内,是可以看到刚才申请的IP地址:
3. 总结:
-
自己检查代码,发现整理信息时出了个错误;
-
代码里调用了之前的myuser_key包,包里的project_id信息,是用的“华东-上海一”地域,而代码里有指定"cn-east-2"地域;
-
也就是说,两个关于地域的入参,相互没对应上,错了,此处修改后,即可正常申请EIP使用;
-
前面申请成功的,但始终找不到的EIP,没办法,只能找400处理了;
-
这个问题,除了我自己指定错了地域信息外,作为示例代码,有两个相互冲突的地域信息为入参,代码也能成功运行,并且成功申请到了EIP地址(虽然不能使用),应该也算是个BUG吧!