1. 示例简介
CDN(Content Delivery Network,内容分发网络)。CDN是构建在现有互联网基础之上的一层智能虚拟网络,通过在网络各处部署节点服务器,实现将源站内容分发至所有CDN节点,使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟,提高了用户访问网站的响应速度与网站的可用性,解决了网络带宽小、用户访问量大、网点分布不均等问题。 本示例指导用户设置、查询和删除域名下的IP黑白名单信息以及设置、查询业务类型和设置、查询IPV6信息。
2. 开发前准备
- 已 注册 华为云,并完成 实名认证 。
- 具备开发环境 ,支持python3.3及以上版本。可执行 python --version 检查当前 python 的版本信息。
- CDN服务软件开发工具包(CDN SDK,Content Delivery Network Software Development Kit)是对CDN服务提供的REST API进行的封装,获取华为云CDN开发工具包(SDK) ,SDK的使用方法请参见CDN SDK 。
3. 安装SDK
内容分发网络服务端SDK支持支持python3.3及其以上版本。
使用服务端SDK前,您需要安装“huaweicloudsdkcore ”和 “huaweicloudsdkcdn”,具体的SDK版本号请参见 SDK开发中心 。
安装cdn服务包
pip install huaweicloudsdkcdn
安装sdk核心包
pip install huaweicloudsdkcore
4. 代码示例
4.1 导入依赖模块
import json
import os
from huaweicloudsdkcdn.v2.cdn_client import CdnClient
from huaweicloudsdkcdn.v2.model.configs import Configs
from huaweicloudsdkcdn.v2.model.ip_filter import IpFilter
from huaweicloudsdkcdn.v2.model.modify_domain_config_request_body import ModifyDomainConfigRequestBody
from huaweicloudsdkcdn.v2.model.show_domain_full_config_request import ShowDomainFullConfigRequest
from huaweicloudsdkcdn.v2.model.update_domain_full_config_request import UpdateDomainFullConfigRequest
from huaweicloudsdkcore.auth.credentials import GlobalCredentials
from huaweicloudsdkcore.exceptions.exceptions import ConnectionException
from huaweicloudsdkcore.exceptions.exceptions import RequestTimeoutException
from huaweicloudsdkcore.exceptions.exceptions import ServiceResponseException
from huaweicloudsdkcore.region.region import Region
4.2 初始化认证信息, 及客户端
示例相关参数说明如下所示:
- ak:华为云账号Access Key。
- sk:华为云账号Secret Access Key。
- iam_endpoint:iam身份认证域名。
- endpoint:接口调用域名。
- domain_name:需要查询的域名。
- region: 服务所在区域。
- ip_type: IP黑白名单类型,off:关闭IP黑白名单,black:IP黑名单,white:IP白名单。
- ip_value: 配置IP黑白名单,当type=off时,非必传, 支持IPv6,支持配置IP地址和IP&掩码格式的网段, 多条规则用“,”分割,最多支持配置150个, 多个完全重复的IP/IP段将合并为一个,不支持带通配符的地址,如192.168.0.*参考。
- business_type: 业务类型: web:网站加速,download:文件下载加速,video:点播加速。
- ipv6_accelerate: ipv6设置,1:打开;0:关闭。
@staticmethod
def main(args):
# 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
# 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
ak = os.environ["HUAWEICLOUD_SDK_AK"]
sk = os.environ["HUAWEICLOUD_SDK_SK"]
iam_endpoint = "<iam endpoint>"
endpoint = "<endpoint>"
domain_name = "your query name"
region = "cn-north-1"
ip_type = "black"
ip_value = "you ip"
business_type = "you type"
ipv6_accelerate = 0
auth = GlobalCredentials(ak, sk) \
.with_iam_endpoint(iam_endpoint)
client = CdnClient.new_builder() \
.with_credentials(credentials=auth) \
.with_region(region=Region(id=region, endpoint=endpoint)) \
.build()
set_ip_filter = IpFilter()
set_ip_filter.type = ip_type
set_ip_filter.value = ip_value
set_ip_filter_response = DomainFullConfig.set_ip_filter_config(client, domain_name, set_ip_filter)
print(set_ip_filter_response)
get_ip_filter_response = DomainFullConfig.get_ip_filter_config(client, domain_name)
print(get_ip_filter_response)
delete_ip_filter = IpFilter()
delete_ip_filter.type = ip_type
delete_ip_filter_response = DomainFullConfig.delete_ip_filter_config(client, domain_name, delete_ip_filter)
print(delete_ip_filter_response)
set_business_type_response = DomainFullConfig.set_business_type_config(client, domain_name, business_type)
print(set_business_type_response)
get_business_type_response = DomainFullConfig.get_business_type_config(client, domain_name)
print(get_business_type_response)
set_ipv6_response = DomainFullConfig.set_ipv6_config(client, domain_name, ipv6_accelerate)
print(set_ipv6_response)
get_ipv6_config_response = DomainFullConfig.get_ipv6_config(client, domain_name)
print(get_ipv6_config_response)
4.2.1 设置IP黑白名单方法
示例相关参数说明如下所示:
- client:客户端。
- domain_name:操作域名。
- ip_filter:ip黑白名单,详情参考IpFilter。
@staticmethod
def set_ip_filter_config(client, domain_name, ip_filter):
request = UpdateDomainFullConfigRequest()
body = ModifyDomainConfigRequestBody()
configs = Configs()
configs.ip_filter = ip_filter
body.configs = configs
request.body = body
request.domain_name = domain_name
result = ""
try:
response = client.update_domain_full_config(request)
result_code = response.status_code
if result_code == 204:
return "set ip filter success"
except ConnectionException:
print("setIpFilterConfig ConnectionException")
except RequestTimeoutException:
print("setIpFilterConfig RequestTimeoutException")
except ServiceResponseException as e:
print("ServiceResponseException RequestTimeoutException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.2.2 查询P黑白名单设置结果方法
@staticmethod
def get_ip_filter_config(client, domain_name):
request = ShowDomainFullConfigRequest()
request.domain_name = domain_name
result = ""
try:
response = client.show_domain_full_config(request)
result = json.dumps(str(response.configs.ip_filter))
except ConnectionException:
print("getIpFilterConfig ConnectionException")
except RequestTimeoutException:
print("getIpFilterConfig RequestTimeoutException")
except ServiceResponseException as e:
print("getIpFilterConfig ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.2.3 删除IP黑白名单设置结果
示例相关参数说明如下所示:
- client:客户端。
- domain_name:操作域名。
- ip_filter:ip黑白名单,详情参考IpFilter。
@staticmethod
def delete_ip_filter_config(client, domain_name, ip_filter):
request = UpdateDomainFullConfigRequest()
filter_body = ModifyDomainConfigRequestBody()
filter_config = Configs()
filter_config.ip_filter = ip_filter
filter_body.configs = filter_config
request.body = filter_body
request.domain_name = domain_name
result = ""
try:
response = client.update_domain_full_config(request)
result_code = response.http_status_code
if result_code == 204:
return "delete ip filter success"
except ConnectionException:
print("deleteIpFilterConfig ConnectionException")
except RequestTimeoutException:
print("deleteIpFilterConfig RequestTimeoutException")
except ServiceResponseException as e:
print("deleteIpFilterConfig ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.3.1 设置业务类型方法
示例相关参数说明如下所示:
- client:客户端。
- domain_name:操作域名。
- business_type:业务类型,详情参考business_type。
@staticmethod
def set_business_type_config(client, domain_name, business_type):
request = UpdateDomainFullConfigRequest()
body = ModifyDomainConfigRequestBody()
configs = Configs()
configs.business_type = business_type
request.domain_name = domain_name
body.configs = configs
request.body = body
result = ""
try:
response = client.update_domain_full_config(request)
result_code = response.status_code
if result_code == 204:
return "set business type success"
except ConnectionException:
print("setBusinessTypeConfig ConnectionException")
except RequestTimeoutException:
print("setBusinessTypeConfig RequestTimeoutException")
except ServiceResponseException as e:
print("setBusinessTypeConfig ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.3.2 查询业务类型方法
@staticmethod
def get_business_type_config(client, domain_name):
request = ShowDomainFullConfigRequest()
request.domain_name = domain_name
result = ""
try:
response = client.show_domain_full_config(request)
result = response.configs.business_type
except ConnectionException:
print("getBusinessTypeConfig ConnectionException")
except RequestTimeoutException:
print("getBusinessTypeConfig RequestTimeoutException")
except ServiceResponseException as e:
print("getBusinessTypeConfig ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.4.1 设置IPV6开关方法
示例相关参数说明如下所示:
- client:客户端。
- domain_name:操作域名。
- ipv6_accelerate:ipv6设置,详情参考ipv6_accelerate。
@staticmethod
def set_ipv6_config(client, domain_name, ipv6_accelerate):
request = UpdateDomainFullConfigRequest()
body = ModifyDomainConfigRequestBody()
configs = Configs()
configs.ipv6_accelerate = ipv6_accelerate
request.domain_name = domain_name
body.configs = configs
request.body = body
result = ""
try:
response = client.update_domain_full_config(request)
result_code = response.status_code
if result_code == 204:
return "set ipv6 success"
except ConnectionException:
print("setIpv6Config ConnectionException")
except RequestTimeoutException:
print("setIpv6Config RequestTimeoutException")
except ServiceResponseException as e:
print("setIpv6Config ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
4.5.2 查询IPV6开关方法
@staticmethod
def get_ipv6_config(client, domain_name):
request = ShowDomainFullConfigRequest()
request.domain_name = domain_name
result = ""
try:
response = client.show_domain_full_config(request)
status = response.configs.ipv6_accelerate
if status is not None:
result = "开启ipv6" if status == 1 else "关闭ipv6"
except ConnectionException:
print("getIpv6Config ConnectionException")
except RequestTimeoutException:
print("getIpv6Config RequestTimeoutException")
except ServiceResponseException as e:
print("getIpv6Config ServiceResponseException")
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
return result
5. 参考
用户可以根据IP黑白名单、IPV6设置和业务类型设置的传参模型,举一反三设置其他配置信息,域名配置文档参考。 更多信息请参考 内容分发网络CDN文档
6. 修订记录
| 发布日期 | 文档版本 | 修订说明 |
|---|---|---|
| 2023-08-28 | 1.0 | 文档首次发布 |