华为云用户手册

  • 使用X.509证书的鉴权流程 X.509证书是一种用于通信实体鉴别的数字证书。当前 物联网平台 只支持基于MQTT协议接入的设备使用X.509证书进行设备身份认证,且每个用户最多上传100个设备CA证书。 图3 使用X.509证书的鉴权流程 在控制台上传设备CA证书。 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID(deviceId)。 用户将设备ID(deviceId)烧录到设备硬件或软固件中。 设备上电后,携带设备侧X.509证书发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 概述 设备鉴权是指物联网平台对接入平台的设备进行身份认证。对于不同接入方式的设备,鉴权方式不同。 接入类型 鉴权方式 使用LwM2M/CoAP协议接入的设备 在设备接入物联网平台前,用户通过应用服务器调用创建设备接口或通过控制台在物联网平台注册设备。若为非安全设备,在设备接入物联网平台时携带设备唯一标识,完成设备的接入鉴权;当采用DTLS/DTLS+传输层安全协议接入时,即设备为安全设备时,携带密钥和nodeId完成设备的接入鉴权。图1所示。 使用原生MQTT/MQ TTS 协议接入的设备 使用密钥鉴权: 在设备接入物联网平台前,用户通过应用服务调用创建设备接口或通过控制台在物联网平台注册设备,获取设备ID和密钥,并把设备ID和密钥烧录到设备中。针对MQTTS协议的设备,需要在设备侧预置CA证书;MQTT不需要,然后在设备接入物联网平台时携带设备ID和密钥,完成设备的接入鉴权。图2所示。 使用证书鉴权: 在设备接入物联网平台前,用户通过控制台上传设备CA证书,然后应用服务调用创建设备接口或通过控制台在物联网平台注册设备,获取设备ID,并把设备ID烧录到设备中。在设备接入物联网平台时携带设备侧X.509证书,完成设备的接入鉴权。图3所示。
  • 使用原生MQTT/MQTTS协议接入的鉴权流程 图2 使用原生MQTT/MQTTS协议接入的鉴权流程 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID (deviceId)和密钥(secret)。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配密钥。 用户将设备ID(deviceId)和密钥(secret)烧录到设备硬件或软固件中。 (仅针对MQTTS协议接入的鉴权流程)设备侧需集成预置CA证书。 设备上电后,携带设备ID(deviceId)和密钥(secret)发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 使用LwM2M/CoAP协议接入的鉴权流程 图1 使用LwM2M/CoAP协议接入的鉴权流程 1. 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 2~3. 物联网平台向设备分配密钥,并返回timeout。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配预置密钥。 timeout是指超时时间,若设备在有效时间未接入物联网平台,则平台会删除该设备的注册信息。 4. 用户将密钥烧录到设备硬件或软固件中。 5. 设备上电后,安全设备携带设备唯一标识码nodeId(如IMEI)和密钥发起接入鉴权请求;非安全设备携带设备唯一标识码发起接入鉴权请求。 6~7. 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 概述 当设备和物联网平台完成对接后,设备可通过以下方式发送数据到物联网平台: 表1 数据上报 类型 子类型 描述 适用场景 协议 物模型 大小 消息上报 设备消息上报 是设备直接将数据传到云端的一种方式,实现设备侧到应用侧的数据直接透传,平台对设备上报的消息不进行解析和存储。 常用于高频率数据的传输或需要用户自定义数据格式的场景。例如:短时间发送大量传感器数据到应用侧。 MQTT、HTTP 不依赖 单次请求:上报的消息最大为1MB。 单用户:标准版最大可使用带宽10Mb/s,企业版最大可使用带宽为50Mb/s。 自定义Topic通信 根据客户需求,自定义Topic,平台将上报的数据直接透传。应用侧可以通过订阅自定义Topic区分不同的业务。 一般用于设备上报的业务类型有多样,需要根据实际业务自定义Topic的场景,或在数据转发中需要转发到特定的Topic的场景,比如数据迁移。 MQTT 属性上报 设备属性上报 属性上报的数据,设备侧到应用侧的数据不直接透传。数据在平台中会通过定义的产品模型来校验、进行过滤,若上报的数据不符合产品模型定义,平台会丢弃该数据。 希望建立统一的模型:规定数据的格式与取值范围、设备的数据需要平台解析、存储的场景。或希望平台能够存储最新的镜像数据的场景。例如:发送路灯的开关数据到应用侧。 MQTT、HTTP、LwM2M/CoAP 依赖 单次请求:上报的属性最大为64KB。 单用户:标准版最大可使用带宽10Mb/s,企业版最大可使用带宽为50Mb/s。 网关批量属性上报 一次性上报多个子设备的属性,设备侧到应用侧的数据不直接透传。平台会将网关上报多子设备的数据分发到对应的子设备。 网关下关联多个子设备的场景。并且对于子设备数据上报时间不敏感,可以把多个子设备的数据打包后再一起上报。 MQTT 资源受限或者对网络流量有要求的设备,不适合直接构造JSON数据与物联网平台通信时,可将原始二进制数据透传到物联网平台。通过开发编解码插件实现二进制数据到平台定义JSON格式的转换。 若发送到平台的数据需要发到华为云其他云服务上进行存储和处理,可以通过数据转发规则功能进行转发,然后再通过其他云服务的控制台或者API接口进行进一步的数据处理。 图1 消息上报概念图 图2 属性上报概念图 图3 原始二进制数据上报概念图
  • 业务概览 开通 设备接入服务 后,使用设备接入服务的完整流程如下图所示,主要分为产品开发、应用侧开发、设备侧开发和日常管理。 产品开发:开发者在进行设备接入前,基于控制台进行相应的开发工作,包括创建产品、创建设备、在线开发产品模型、在线开发插件和在线调试。 应用侧开发:通过API的形式对外开放物联网平台丰富的设备管理能力,应用开发人员基于API接口开发所需的行业应用,如智慧城市、智慧园区、智慧工业、车联网等行业应用,满足不同行业的需求。 设备侧开发:设备侧可以通过集成SDK、模组或者原生协议接入物联网平台。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的设备管理。 图1 流程图
  • 方案概述 基于IoT平台实现一个物联网解决方案,需要完成以下操作: 开发操作 开发说明 产品开发 主要呈现物联网平台的界面查询与操作,包括产品管理、产品模型开发、插件开发、在线调试等。 应用开发 主要为业务应用与物联网平台的集成对接开发,包括API接口调用、业务数据获取和HTTPS证书管理。 设备开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网平台、业务数据上报和对平台下发控制命令的处理。
  • 包年/包月资源 对于包年/包月计费模式的资源,例如包年/包月的设备接入实例,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月资源,您可以执行退订操作,系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。详细的退订规则请参见云服务退订规则概览。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 修订记录 发布日期 修订记录 2024-04-28 第十二次正式发布: 新增章节: 并行文件系统相关接口(Go SDK)。 2023-10-16 第十一次正式发布: 优化Go SDK接口参数描述。 2023-09-21 第十次正式发布: 新增章节: 设置桶的自定义 域名 (Go SDK)。 获取桶的自定义域名(Go SDK)。 删除桶的自定义域名(Go SDK)。 2023-08-26 第九次正式发布: 新增章节: 如何指定Content-SHA256?。 为什么SDK源码中包含acs.amazonaws.com关键字?。 2023-07-13 第八次正式发布。 新增章节: 设置对象元数据(Go SDK)。 2023-07-11 第七次正式发布。 优化SDK文档和示例代码。 2022-01-04 第六次正式发布。 新增章节: 单链接限速 SDK接口扩展配置 2020-06-30 第五次正式发布。 调整文档结构。 2019-12-18 第四次正式发布。 修改章节: ObsClient初始化 。 2019-02-18 第三次正式发布。 修复一些问题。 2018-11-30 第二次正式发布。 新增章节: 生成带授权信息的URL 删除章节: 简介 2018-3-31 第一次正式发布。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *GetDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见GetDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 代码示例 本示例用于获取examplebucket并行文件系统中的目录Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.GetDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 获取对象的AccessLabel output, err := obsClient.GetDirAccesslabel(input) if err == nil { fmt.Printf("Get dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Get dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 接口约束 建议使用 IAM 或策略进行授权,如果使用IAM则需授予obs:object:getAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *GetDirAccesslabelOutput 参数解释: 接口返回信息,详见GetDirAccesslabelOutput。 err error 参数解释: 接口返回错误信息。 表4 GetDirAccesslabelOutput 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无 AccessLabel []string 必选 参数解释: 目录的accesslabel内容。 约束限制: 仅包含0-9、a-z、 A-Z、下划线的字符串,最大长度为52个字符。 目录级别AccessLabel最大设置支持256条。 默认取值: 无
  • 代码示例 本示例用于删除examplebucket并行文件系统中的目录Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.DeleteDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 对象的AccessLabel output, err := obsClient.DeleteDirAccesslabel(input) if err == nil { fmt.Printf("Delete dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Delete dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *DeleteDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见DeleteDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 接口约束 建议使用IAM或策略进行授权,如果使用IAM则需授予obs:object:deleteAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详见BaseModel。 err error 参数解释: 接口返回错误信息。 表4 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 接口约束 建议使用IAM或策略进行授权,如果使用IAM则需授予obs:object:putAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详见BaseModel。 err error 参数解释: 接口返回错误信息。 表4 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *SetDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见SetDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 代码示例 本示例用于设置并行文件系统examplebucket中目录名为Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.SetDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 指定目录的accesslabel,这次以role_label_01和role_label_02为例 input.Accesslabel = []string{"role_label_01", "role_label_02"} // 设置对象的AccessLabel output, err := obsClient.SetDirAccesslabel(input) if err == nil { fmt.Printf("Set dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Set dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 操作步骤 (推荐)基于host模式配置 使用host模式,docker容器可以直接使用宿主机的IP和端口,更加简单便捷,更推荐在多机分布式训练时使用。但是在设置容器的ssh免密登录时,仍需要将容器的22端口和主机某个端口相映射。 进入容器中,修改/etc/ssh/sshd_config文件,增加port映射。 Port 18888 例如,在文件增加下面这一行,即为将容器的22端口和主机18888端口相映射。 重启sshd服务,执行如下命令。 /usr/sbin/sshd 此时,有两种方式实现免密登录。 (推荐)方式一:重新制作docker镜像(推荐) 在一个容器内,参考NPU Snt9B裸金属服务器多机免密互通解决方案完成配置后,将该容器打包为镜像,上传到华为云容器管理服务SWR,其他各个机器从SWR中使用docker pull命令拉取该镜像即可。不同机器使用同一个镜像,由于共用密钥,可以实现多机多容器免密登录。 方式二:参考NPU Snt9B裸金属服务器多机免密互通解决方案,分别配置每个容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。 基于桥接模式(Bridge)配置 首先在创建docker容器时,要将容器需要对外暴露的端口和宿主机端口进行映射。 docker run -itd -p 18888:22 my_image 例如,上述命令就是将容器的22端口与宿主机的18888端口相映射。在宿主机执行如下命令,配置IP转发,用于容器内的网络访问。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward 以上命令含义为:Linux系统默认是禁止数据包转发的,转发即当主机拥有多于一块的网卡时,一块网卡收到数据包并根据数据包的目的ip地址将数据包发往本机另一块网卡。由于从外部访问容器内部时需要访问宿主机的地址和对应的容器映射的地址,访问的数据包到宿主机上后经过ip包解析后通过目的port和iptables的规则会将数据包由eth0网卡转发至docker0网桥上进行下一步路由。所以如果容器的宿主机上的ip_forward未打开,该宿主机上的容器则不能被其他宿主机访问。 最后,参考NPU Snt9B裸金属服务器多机免密互通解决方案配置容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。
  • docker常用网络模式介绍 host模式 在创建docker容器时使用如下命令指定。 --net=host host模式下容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,此时容器不再拥有隔离的、独立的网络栈,不拥有所有端口资源。 使用host模式后,无需再对容器做端口映射,同时,容器就和宿主机共用网络,容器中的网络服务也可以访问到宿主机的网络服务。 桥接模式(Bridge) docker容器默认为该模式。容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。 在为容器设置ip时,会从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。 docker0概念介绍:Docker服务默认会创建一个docker0网桥,它在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个物理网络。Docker服务默认指定了docker0接口的IP地址和子网掩码,保证主机和容器之间可以通过网桥相互通信。 Network Namespace概念介绍:Network Namespace是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,每个空间拥有独自的网络栈信息,保证虚拟机或容器运行时仿佛在独立的网络中。
  • 请求示例 “endpoint”即调用API的请求地址,不同服务不同区域的endpoint不同,具体请参见终端节点。 例如,服务部署在“华北-北京四”区域的“endpoint”为“moderation.cn-north-4.myhuaweicloud.com”,请求URL为“https://moderation.cn-north-4.myhuaweicloud.com/v2/{project_id}/moderation/image/batch?job_id={job_id}”,“project_id”为项目ID,获取方法请参见获取项目ID,“job_id”为接口返回的job_id GET https://{endpoint}/v2/{project_id}/moderation/image/batch?job_id={job_id}
  • 响应示例 状态码: 200 成功响应示例 { "result" : { "job_id" : "44d93b70-db01-4f96-a618-2a79c964c4b2", "status" : "finish", "create_time" : "2018-01-02T15:03:04Z", "update_time" : "2018-01-02T15:03:04Z", "items" : [ { "url" : "https://obs-test-llg.obs.myhuaweicloud.com/terrorism", "suggestion" : "pass", "detail" : { "terrorism" : [ { "confidence" : 0, "label" : "fire" }, { "confidence" : 0.0268, "label" : "normal" } ] } }, { "url" : "https://obs-test-llg.obs.myhuaweicloud.com/clarity-detect", "suggestion" : "pass", "detail" : { "terrorism" : [ { "confidence" : 0, "label" : "knife" }, { "confidence" : 0, "label" : "terrorist" }, { "confidence" : 0.3086, "label" : "bloody" }, { "confidence" : 0.6914, "label" : "normal" } ] }, "ocr_text" : "fdfefdfdfdfd" } ] } } 状态码: 400 失败响应示例 { "error_code" : "AIS.0005", "error_msg" : "The service does not exist." }
  • 新建自动化任务 参考登录零代码工作台中操作,登录AstroZero零代码工作台。 在全部应用中,单击应用后的“...”,选择“编辑”,进入编辑应用页面。 单击页面右上角的,进入自动化页面。 图1 进入自动化页面 在自动化页面,单击“开始创建”。 选择所需的触发类型,例如选择“数据更新时触发”,单击“确定”。 图2 选择触发类型 在自动化页面左上角,设置自动化任务名称。 图3 设置自动化任务名称 在触发器中,设置触发条件,单击“保存”。 图4 设置触发条件 触发条件:自动化任务触发条件。 数据新增时触发:当表单中新增数据,且数据符合条件时触发。 数据更新时触发:当表单中更新数据,且数据符合条件时触发。 数据符合条件时触发:当表单中新增或更新数据,且数据符合条件时触发。 定时触发:按照预设的时间周期循环触发。 流程事件触发:流程任务开始、完成时触发,如审批完成后触发更新表单数据。 数据删除时触发:当表单中删除数据,且数据符合条件时触发。 选择表单:触发自动化任务的表单。选择表单后,请根据界面提示设置筛选条件、选择字段等。 设置执行动作,单击“保存”。 图5 设置执行动作 新增数据 选择要新增数据的表单:根据业务需求,选择需要新增数据的表单。 新增类型:选择新增一条数据还是基于数据源新增多条数据。 选择数据源:在当前节点前,插入一个“获取多条数据”动作,作为数据源使用。 图6 在前面插入动作 图7 选择获取多条数据 字段设置:给字段设置所需的值,请至少设置一个字段。 更新数据 选择更新对象:根据业务需求,选择需要更新的对象。 更新字段:对符合条件的数据选择相应的字段进行更新。 未获取到数据时:未获取到数据时,选择跳过当前节点还是新增一条数据。 获取单条数据 获取方式:支持“从表单中获取”和“从关联记录中获取”。 从表单中获取 选择获取数据的表单:在下拉框中,选择获取数据的表单。 筛选条件:从表单中获取符合条件的数据,未设置筛选条件则通过排序规则从查询记录中获取唯一数据。 排序规则:如果查找到多条数据,则选择按照排序规则获取第一条数据。 查询结果为空:查询结果为空时,是继续执行还是终止执行。 从关联记录中获取 选择获取对象:根据业务需求,选择需要获取数据的对象。 选择关联记录类型的字段:选择表单中关联记录组件对应的字段。 获取多条数据 获取方式:支持“从表单中获取”和“从关联记录中获取”。 从表单中获取 选择获取数据的表单:根据业务需求,选择获取数据的表单。 筛选条件:从表单中获取符合条件的数据,未设置筛选条件则通过排序规则从查询记录中获取唯一数据。 排序规则:如果查找到多条数据,则选择按照排序规则获取第一条数据。 限制数量:按照排序规则,获取前N条数据。 查询结果为空:查询结果为空时,是继续执行还是终止执行。 从关联记录中获取 选择获取对象:根据业务需求,选择需要获取数据的对象。 选择关联记录类型的字段:选择表单中关联记录组件对应的字段。 删除数据:删除数据时,触发自动化任务执行。 发送邮件 通知类型:邮件通知。 发件人邮箱账号:选择发件人邮箱地址,单击“邮箱管理”,租户系统管理员可设置并修改邮箱信息,详情请参见邮箱管理。 收件人:单击“指定人员”,设置邮件接收人信息,支持指定具体人员、角色或动态获取。 抄送:单击“指定人员”,设置邮件抄送人信息,支持指定具体人员、角色或动态获取。 主题:设置邮件主题,支持直接输入,或单击,从记录中添加。 内容:设置发送邮件内容。单击“节点对象”,可从记录中复制粘贴字段到内容中。 来源:选择发送来源,接收方信息中将展示该自动化任务所在的应用名称,便于追溯。 企业微信通知 通知类型:企业微信。 发送给:单击“指定人员”,设置企业微信接收人信息,支持指定具体人员、角色或动态获取。 图片:勾选后,单击“上传图片”,可发送图文 消息通知 。如果不勾选,按照文本卡片消息方式发送通知。 当前仅支持JPG和PNG格式的图片,图片大小建议不超过1068*455(大图)、150*150(小图)。 主题:设置微信主题,支持直接输入,或单击,从记录中添加。 内容:设置发送的微信内容,支持直接输入,或单击,从记录中添加。 详情:设置跳转链接。 来源:选择发送来源,接收方信息中将展示该自动化任务所在的应用名称,便于追溯。 Welink卡片 发送 WeLink 卡片通知是指向通知中心发送卡片消息,单次发送用户数最大1000人,如需使用请先绑定WeLink组织。 发送给:单击“指定人员”,设置WeLink接收人信息,支持指定具体人员、角色或动态获取。 主题:设置微信主题,支持直接输入,或单击,从记录中添加。 内容:设置发送的WeLink内容,支持直接输入,或单击,从记录中添加。 详情:设置跳转链接。 来源:选择发送来源,接收方信息中将展示该自动化任务所在的应用名称,便于追溯。 服务编排 选择服务编排时,请确保已在AstroZero低代码应用平台创建一个服务编排。 选择服务编排:选择已创建的服务编排。 字段设置:单击“添加字段”,向服务编排的输入参数传递初始值,供其执行时使用 触发器设置完成后,单击页面右上角的“保存”。 保存成功后,可参考启用自动化任务中操作,启用自动化任务。
  • 用户如何登录零代码工作台 AstroZero中用户的权限配置(Profile)有System Administrator Profile(管理员权限,拥有AstroZero全部权限)和Developer Profile(开发者权限,可直接使用零代码开发平台创建并开发应用)两种,这两种角色可以直接登录并创建零码应用。 登录AstroZero服务控制台。 在实例页面,单击“进入首页”。 在主菜单中,选择“工作台”,即可进入零代码应用开发的工作台页面。
  • 什么是工作台 工作台,即零代码开发平台的首页,包括任务中心、公告、全部应用和模板中心等,功能介绍请参见表1。 图1 AstroZero零代码工作台页面 表1 AstroZero零代码工作台介绍 功能 功能介绍 任务中心 任务管理中心,显示“我的待办”、“我的申请”、“我已处理”和“抄送我的”任务项。 公告 AstroZero零代码公告栏。 全部应用 创建零代码应用的入口区域,并展示当前用户开发的、最近使用的、收藏的和公开应用。 模板中心 单击“模板中心”,进入零代码应用模板中心,AstroZero内置了丰富的零代码应用模板,可以直接使用这些预置的应用模板快速创建零代码应用。 右上角区域 自定义:自定义零代码开发平台布局。 :微信扫一扫,可关注AstroZero公众号。 中文:单击可切换语言,当前仅支持中文。 :查看系统消息。 :AstroZero版本升级公告。 :AstroZero帮助文档入口。 工单:支持与服务控制台入口,在控制台中可以进行新建工单、查看我的工单等。 用户名:显示当前登录账号的名称,单击账号名称,选择不同的弹出菜单,可以查看系统版本信息、退出系统等操作。
  • 创建零码应用流程图 在AstroZero零代码平台中,无需任何编程语言,只需通过拖、拉、拽等操作即可完成应用的创建,创建流程如图1所示。 图1 创建零码应用流程 登录零代码工作台。 以具有开发零代码应用权限的账号,登录AstroZero服务控制台。在AstroZero零代码中,业务用户也可以进行零码应用的开发,如何给业务用户授权开发者权限,请参见如何给业务用户授权?。 创建零码应用。 根据自身业务需求,选择一种适合自己的方式,创建零码应用。 分享零码应用。 零码应用创建后,可将应用分享给其他业务用户,邀请其参加问卷调查等。
  • 调用结果码说明 模块 结果码 结果码说明 公共 000000 成功 000001 鉴权失败 000002 请求参数不合法 000003 实例ID不存在 000004 请求处理中 000005 其他服务内部错误 新购商品 000100 无可用实例资源分配 000101 Mobile number not specified or already exists//手机号为空或重复 000102 Email address is not specified or already exists//邮箱号为空或重复 000103 Product already purchased//该商品不可重复购买 000104 Internal service error//该商品内部服务异常 000105 Account has already subscribed to benefits//该账号已购买权益,无法再开通 000106 Product resources sold out.//该商品资源已售罄 000107 SaaS email domain already exists.//该SaaS邮箱域名重复 父主题: 联营SaaS类商品接入指南 V1.0
共100000条