华为云对象存储OBSOBS客户端初始化_云淘科技

功能说明

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

验证服务端证书参数,即验证服务端证书与客户端证书配置的证书是否一致。可能的取值:

服务端pem格式根证书文件路径。
True:从操作系统根证书库中获取服务端证书列表并验证服务端证书(仅支持Windows操作系统)。
False:表示不验证服务端证书。

默认为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。

说明:

security_provider_policy参数用于设置搜索策略,默认为None,此时需要显示指定访问密钥;同时,在已经指定了访问密钥参数的情况下,security_provider_policy参数将被忽略。
security_provider_policy设置为OBS_DEFAULT时采用链式搜索方式获取访问密钥;
设置security_provider_policy为预定义方式名(ENV,ECS)时采用对应方式获取访问密钥。

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时间一致,否则可能会导致临时访问密钥无法及时刷新的问题。

除了上述指定一种方式获取访问密钥外,还可以以链式的形式从环境变量及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客户端。

工程中可以有多个ObsClient,也可以只有一个ObsClient。

ObsClient是线程安全的,可在并发场景下使用。

父主题: 初始化

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家