对象存储服务 OBS-OBS客户端初始化(Python SDK):代码样例

时间:2024-05-22 15:05:44

代码样例

  • 通过构造函数创建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是线程安全的,可在并发场景下使用。
support.huaweicloud.com/sdk-python-devg-obs/obs_22_0601.html