Python client for ACM.

acm-sdk-python的Python项目详细描述


用户指南

pypi version许可证

简介

用于acm的python sdk。

功能

  1. 使用rest api从acm服务器获取/发布/删除配置。
  2. 从服务器监视配置更改。
  3. 服务器故障时自动故障转移。
  4. 支持TLS。
  5. 支持地址服务器。
  6. 支持阿里云ACM和独立部署。
  7. < > >

    支持的python:

    1. 蟒蛇2.6
    2. python 2.7版
    3. 巨蟒3.3
    4. 巨蟒3.4
    5. 巨蟒3.5
    6. python 3.6
    7. < > >

      支持的ACM版本

      1. ACM 1.0
      2. < > >

        更改日志

        安装

        对于Python2.7及更高版本:

        pip install acm-sdk-python
        

        对于Python 2.6:

        # install setuptools first:
        wget https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip
        unzip setuptools-33.1.1.zip
        cd setuptools-33.1.1 && sudo python setup.py install
        
        # if setuptools already exists:
        sudo easy_install acm-sdk-python
        

        开始

        importacmENDPOINT="acm.aliyun.com:8080"NAMESPACE="**********"AK="**********"SK="**********"# get configclient=acm.ACMClient(ENDPOINT,NAMESPACE,AK,SK)data_id="com.alibaba.cloud.acm:sample-app.properties"group="group"print(client.get(data_id,group))# add watchimporttimeclient.add_watcher(data_id,group,lambdax:print("config change detected: "+x))time.sleep(5)# wait for config changes

        配置

        client = ACMClient(endpoint, namespace, ak, sk)
        
        • 端点-必需-ACM服务器地址。
        • 命名空间-命名空间。|默认值:默认租户
        • AK-阿里云ACM的AccessKey。|默认值:
        • SK-阿里云ACM的SecretKey。|默认值:

        附加选项

        可通过设置选项设置额外选项,如下所示:

        client.set_options({key}={value})
        

        可配置的选项有:

        • 默认超时-从服务器获取配置的默认超时(秒)。
        • TLS U已启用-是否使用https。
        • 已启用身份验证-是否使用身份验证功能。
        • CAI_已启用-是否使用地址服务器。
        • 拉入超时-长轮询超时(秒)。
        • 拉取配置大小-一个轮询进程监听的最大配置项目数。
        • 回调线程数-调用回调的并发性。
        • 故障转移库-存储故障转移配置文件的目录。
        • 快照库-存储快照配置文件的目录。
        • 应用程序名称-客户端应用程序标识符。
        • 无快照-若要禁用默认快照行为,可以通过get方法中的paramno_snapshot重写此操作。

        API参考

        获取配置

        < Buff行情>

        acmclient.get(数据标识、组、超时、无快照)

        • param数据id数据id.

        • param如果未指定组,请使用默认组。

        • param请求服务器超时(秒)。

        • param没有快照服务器不可用时是否使用本地快照。

        • 返回 W 按优先级获取一个配置项的值:

        • 步骤1-从本地故障转移目录获取(默认值:${cwd}/acm/data)。

          • 可以提前从快照目录(默认:${cwd}/acm/snapshot)手动复制故障转移目录。
          • 这有助于抑制已知服务器故障的影响。
        • 步骤2-从一台服务器获取,直到获取值或尝试所有服务器。

          • 从服务器获取内容后,内容将保存到快照目录。
        • 步骤3-从快照目录获取。

        添加观察者

        < Buff行情>

        acmclient.add_watchers(数据id,组,cb_list)

        • 参数数据ID数据ID.
        • param如果未指定组,请使用默认组
        • paramcb_list要添加的回调函数列表。
        • 返回

        将监视程序添加到指定的配置项。

        • 更改或删除项目后,将调用回调函数。
        • 如果该项已存在于服务器中,则回调函数将被调用一次。
        • 允许对一个项进行多次回调,并且所有回调函数都由threading.thread
        • 回调函数是从当前进程调用的。

        删除监视程序

        < Buff行情>

        acmclient.remove_watcher(数据ID、组、CB、全部删除)

        • param数据id数据id.
        • param如果未指定组,请使用"默认组"。
        • paramcb要删除的回调函数。
        • param全部删除是删除所有出现的回调还是只删除一次。
        • 返回

        从指定的键中删除观察程序。

        列出所有配置

        < Buff行情>

        acmclient.list_all(组,前缀)

        • param只返回组匹配的数据标识,默认为无。
        • paramgroup只返回带前缀的dataid startswith,默认值为none区分大小写
        • 返回数据项列表。

        获取当前命名空间的所有配置项,仅包含dataid和组信息。

        • 警告:如果命名空间中有大量配置,则此函数可能需要一些时间。

        发布配置

        < Buff行情>

        acmclient.publish(数据标识、组、内容、超时)

        • param数据id数据id.
        • param如果未指定组,请使用"默认组"。
        • 参数内容配置值。
        • param请求服务器超时(秒)。
        • 如果成功或将引发异常,则返回true。

        向ACM发布一个数据项。

        • 如果数据密钥不存在,请先创建一个。
        • 如果数据密钥存在,请更新到指定的内容。
        • 内容不能设置为"无",如果需要删除配置项,请改用"删除"功能。

        删除配置

        < Buff行情>

        acmclient.remove(数据标识、组、超时)

        • param数据id数据id.
        • param如果未指定组,请使用"默认组"。
        • param请求服务器超时(秒)。
        • 如果成功或将引发异常,则返回true。

        从ACM中删除一个数据项。

        调试模式

        调试模式(如果有助于获得更详细的控制台登录信息)。

        调试模式可通过设置:

        ACMClient.set_debugging()
        # only effective within the current process
        

        cli工具

        一个cli工具与python sdk一起,可以方便地访问和管理acm服务器中的配置项。

        安装后,可以直接使用acm{subcommand},可用的子命令如下:

            add                 add a namespace
            use                 switch to a namespace
            current             show current endpoint and namespace
            show                show all endpoints and namespaces
            list                get list of dataIds
            pull                get one config content
            push                push one config
            exportexport dataIds to local files
            import              import files to ACM server
        

        使用acm-h查看详细手册。

        数据安全选项

        ACM允许您在加密数据的同时,还可以使用阿里云提供的密钥管理服务(也称为KMS)对数据进行加密。

        要使用此功能,您可以执行以下步骤:

        1. 通过pip安装aliyun python sdk kms来安装kms sdk
        2. 用<代码命名数据ID>密码-前缀。
        3. 获取并填充acmclient所需的所有配置,所需信息为:region_idkms_akkms_secretkey_id
        4. 只需调用api,sdk就会自动处理数据加密和解密。
        5. < > >

          示例:

          c = acm.ACMClient(ENDPOINT, NAMESPACE, AK, SK)
          c.set_options(kms_enabled=True, kms_ak=KMS_AK, kms_secret=KMS_SECRET, region_id=REGION_ID, key_id=KEY_ID)
          
          # publish an encrypted config item.
          c.publish("cipher-dataId", None, "plainText")
          
          # get the content of an encrypted config item.
          c.get("cipher-dataId", None)
          

          使用RAM

          在客户端使用ram而不是硬编码的accesskey和secretkey是一种最佳实践,因为它更安全、更简单。

          示例:

          ENDPOINT="acm.aliyun.com"NAMESPACE="9ca*****c1e"RAM_ROLE_NAME="ECS-STS-KMS-ACM"REGION_ID="cn-shanghai"KEY_ID="192d****dc"# use RAM role name for configuration.a=acm.ACMClient(ENDPOINT,NAMESPACE,ram_role_name=RAM_ROLE_NAME)a.set_options(kms_enabled=True,region_id=REGION_ID,key_id=KEY_ID)# call API like the same as before.a.list_all()a.get('cipher-dataId','DEFAULT_GROUP')

          有关更多信息,请参阅文档

          其他资源

          • 阿里云ACM主页:https://www.aliyun.com/product/acm rel="nofollow">https://www.aliyun.com/product/acm

          欢迎加入QQ群-->: 979659372 Python中文网_新手群

          推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列