记一次弹性公网IP(EIP)申请的问题经历

记一次弹性公网IP(EIP)申请问题经历

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. 问题

  • 修改完代码后,执行代码成功,提供申请到的EIP的基本信息:

  • 看起来好像申请成功了,但是到控制台没找到;

  • 各个region都找了,就是看不到去哪里了;

  • 但是在“我的资源”内,是可以看到刚才申请的IP地址:

  • 点击“管理”,会显示“查询云资源失败”的错误:

3. 总结:

  • 自己检查代码,发现整理信息时出了个错误;

  • 代码里调用了之前的myuser_key包,包里的project_id信息,是用的“华东-上海一”地域,而代码里有指定"cn-east-2"地域;

  • 也就是说,两个关于地域的入参,相互没对应上,错了,此处修改后,即可正常申请EIP使用;

  • 前面申请成功的,但始终找不到的EIP,没办法,只能找400处理了;

  • 这个问题,除了我自己指定错了地域信息外,作为示例代码,有两个相互冲突的地域信息为入参,代码也能成功运行,并且成功申请到了EIP地址(虽然不能使用),应该也算是个BUG吧!

(完)