更新时间:2024-11-26 GMT+08:00

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

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

  • 服务端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/intl/zh-cn/usermanual-ca/ca_01_0003.html。
    ak = os.getenv("AccessKeyID")
    sk = os.getenv("SecretAccessKey")
    # server填写Bucket对应的Endpoint, 这里以中国-香港为例,其他地区请按实际情况填写。
    server = "https://obs.ap-southeast-1.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/intl/zh-cn/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.ap-southeast-1.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是线程安全的,可在并发场景下使用。