OBS客户端初始化(Python SDK)
功能说明
OBS客户端(ObsClient)是访问OBS服务的Python客户端,它为调用者提供一系列与OBS服务进行交互的接口,用于管理桶和对象等OBS服务上的资源。
方法定义
ObsClient(access_key_id, secret_access_key, server)
构造函数参数描述
参数 |
描述 |
建议值 |
---|---|---|
access_key_id |
访问密钥中的AK。默认为空字符串表示匿名用户。 |
N/A |
secret_access_key |
访问密钥中的SK。默认为空字符串表示匿名用户。 |
N/A |
security_token |
临时访问密钥中的SecurityToken。 如何获取临时访问密钥和securitytoken请参见临时访问密钥AK/SK获取; |
N/A |
server |
连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议) |
N/A |
max_retry_count |
HTTP/HTTPS连接异常时的请求重试次数。默认为3次。 |
[1,5] |
max_redirect_count |
HTTP/HTTPS请求重定向的最大次数。默认为10次 |
[1, 10] |
timeout |
HTTP/HTTPS请求超时时间(单位:秒)。默认为60秒。 |
[10, 60] |
ssl_verify |
验证服务端证书参数,即验证服务端证书与客户端证书配置的证书是否一致。可能的取值:
默认为False。 |
N/A |
chunk_size |
读写socket流时的块大小(单位:字节),您可以根据自身需求设置块大小。默认为65536字节。 |
默认 |
long_conn_mode |
是否启用长连接模式。默认为False。 |
N/A |
proxy_host |
代理服务器的主机地址。默认为空。
说明:
请注意,代理服务器的主机地址不要指定http://或https://; |
N/A |
proxy_port |
代理服务器的端口号。默认为空。 |
N/A |
proxy_username |
连接代理服务器时使用的用户名。默认为空。 |
N/A |
proxy_password |
连接代理服务器时使用的用户密码。默认为空。 |
N/A |
is_cname |
是否通过自定义域名访问OBS服务。默认为False。 更多关于自定义域名相关信息请参见自定义域名。 |
N/A |
security_providers |
指定允许的访问密钥搜索方式,OBS客户端将使用该参数指定的搜索方式,搜索并获取访问密钥。默认为None。
说明:
security_providers参数必须采用列表形式,默认情况下security_providers为None,此时默认提供从环境变量中获取访问密钥,或从ECS服务器获取临时访问密钥两种方式作为security_providers的默认搜索方式。 当指定了security_providers参数时,则不会提供默认搜索方式,此时仅可以使用security_providers中提供的搜索方式。 |
N/A |
security_provider_policy |
指定访问密钥搜索策略。默认为None。
说明:
|
N/A |
- 建议值为N/A的表示需要根据实际情况进行设置。
- 如网络状况不佳,建议增大timeout的值。
- 如果设置的server不带协议类型,则默认使用HTTPS协议。
- 如果启用了长连接模式,使用完OBS客户端后必须调用ObsClient.close方法显式关闭,回收连接资源。
- 出于DNS解析性能和OBS服务可靠性的考虑,不允许将server设置为IP,必须使用域名访问OBS服务。
代码样例
- 通过构造函数创建OBS客户端,永久访问密钥(AK/SK)创建OBS客户端代码如下:
# 引入模块 from obs import ObsClient # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 securityToken值 obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) # 使用访问OBS # 关闭obsClient obsClient.close()
- 临时访问密钥(AK/SK和SecurityToken)创建OBS客户端代码如下:
# 引入模块 from obs import ObsClient # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取 security_token = os.getenv("SecurityToken") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 # 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值 obsClient = ObsClient( access_key_id=ak, secret_access_key=sk, server=server, security_token=security_token ) # 使用访问OBS # 关闭obsClient obsClient.close()
- 指定获取临时访问密钥的方式
- 使用单一的获取方式,以从环境变量获取访问密钥的方式为例:
# 引入模块 from obs import ObsClient from obs import loadtoken # 创建ObsClient实例 # 提供ENV方式获取访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_providers=[loadtoken.ENV] ) # 使用访问OBS # 关闭obsClient obsClient.close()
- 使用单一的获取方式,以从环境变量获取访问密钥的方式为例:
- 通过配置系统环境变量的方式或者通过访问ECS服务器获取临时访问密钥的方式创建OBS客户端。
- 使用ENV方式创建OBS客户端的代码如下:
# 引入模块 from obs import ObsClient # 创建ObsClient实例 # 提供ENV方式获取访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='ENV' ) # 使用访问OBS # 关闭obsClient obsClient.close()
以上方式会从当前系统的环境变量中寻找访问密钥,需要对应在环境变量中定义OBS_ACCESS_KEY_ID、OBS_SECRET_ACCESS_KEY字段。同时如果采用临时访问密钥时,还需要在环境变量中定义OBS_SECURITY_TOKEN字段。
- 使用ECS方式创建OBS客户端的代码如下:
# 引入模块 from obs import ObsClient # 创建ObsClient实例 # 提供ECS方式获取临时访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='ECS' ) # 使用访问OBS # 关闭obsClient obsClient.close()
当应用程序部署在ECS服务器上时,可以采用以上方式从ECS服务器上自动获取临时访问密钥和定期自动刷新。
如果客户端报401错误,则需要排查在创建ECS时是否有添加委托。
在使用该方式获取临时访问密钥时,请确保服务端和应用程序部署所在环境的UTC时间一致,否则可能会导致临时访问密钥无法及时刷新的问题。
- 使用ENV方式创建OBS客户端的代码如下:
- 除了上述指定一种方式获取访问密钥外,还可以以链式的形式从环境变量及ECS服务器上进行搜索以获取对应的访问密钥。
- 通过设定security_provider_policy参数为OBS_DEFAULT来指定OBS客户端以链式的方式搜索访问密钥:
# 引入模块 from obs import ObsClient # 创建ObsClient实例 # 以链式的方式从环境变量和ECS中搜索访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='OBS_DEFAULT' ) # 使用访问OBS # 关闭obsClient obsClient.close()
以上方式通过设定security_provider_policy为OBS_DEFAULT,可以指定以链式的方式从预定义方式列表中搜索访问密钥。当前默认提供从环境变量中以及从ECS服务器上获取访问密钥两种预定义搜索方式,并按照先从环境变量,再从ECS服务器的顺序进行搜索。链式搜索方式会以第一组成功获取到的访问密钥创建OBS客户端。
- 通过设定security_provider_policy参数为OBS_DEFAULT来指定OBS客户端以链式的方式搜索访问密钥:
- 工程中可以有多个ObsClient,也可以只有一个ObsClient。
- ObsClient是线程安全的,可在并发场景下使用。