华为云用户手册

  • 功能介绍 看板 产品运营人员能直观查看关键数据,分析产品运营过程中取得的成效和潜在问题。 看板管理 通过自定义运营看板,可以把产品运营中的关键数据统一呈现出来,可按人员权限和业务类型展示不同的数据看板,可视化展现产品运营现状。产品运营人员能直观查看关键数据,分析产品运营过程中取得的成效和潜在问题。 数据模型 运营中心提供数据建模能力,运营人员可以自定义数据模型,也可以通过逆向数据库生成数据模型。通过提供多表关联建模整合表能力,一个数据模型可以映射多个数据表数据。 指标管理 运营中心提供指标自定义灵活配置能力,可以配置普通指标、复合型指标和静态指标,基于数据模型,通过计算方式、计算时间单位、统计维度、筛选条件组合配置指标。 指标模板库 运营中心提供指标模板应用能力,模板中内置数据模型、指标定义、图表卡片等经验内容。运营中心通过提供多场景模板,以场景驱动一键应用,赋能用户低门槛、高效率地构建指标体系。 数据管理 运营中心提供通用数据接入能力,通过与数据源连接,可以建立数据源中数据表的迁移任务,将源端数据迁移到运营中心,为后续业务做数据准备。 元数据管理 元数据管理作为业务产品业务分析的数据来源基础,提供元事件配置、事件属性配置、用户属性配置等功能,以便使用者对业务产品进行业务分析。 运营分析 当前运营分析只包含事件分析。通过事件分析模型,您可以对各类动态数据进行多指标多维度展示,其中包括:字段的筛选能力,自定义计算以及多指标之间的对比。 审计日志 审计日志是记录系统活动的记录,以便检查和审查这些活动。它包含操作对象、操作IP、操作人、操作时间等。 父主题: 运营中心简介
  • 接口约束 该接口支持如下数据库实例: GeminiDB Cassandra GeminiDB Mongo GeminiDB Influx GeminiDB Redis GeminiDB Redis实例支持的最大最小磁盘容量和节点数、规格相关,如果目标结果无法满足实例运行所需的磁盘大小,将无法扩容节点。 该接口既支持包周期实例,也支持按需实例。 GeminiDB Influx单节点实例不支持节点扩容。 GeminiDB Mongo仅支持扩容只读节点。 该接口支持GeminiDB Redis搭建双活关系的主实例和备实例。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 num 是 Integer 新增加的节点数量。 subnet_id 否 String 扩容的节点所使用的子网的ID。 该参数只支持GeminiDB Cassandra数据库实例扩容节点时传入。 所传入的子网ID必须属于实例当前所在的VPC。 不传该参数时,系统会为当前扩容的节点选择一个IP容量较为充足的子网。 is_auto_pay 否 String 创建包周期实例时可指定,表示是否自动从账户中支付,此字段不影响自动续订的支付方式。 true,表示自动从账户中支付。 false,表示手动从账户中支付,默认为该方式。
  • 请求示例 GET https://{Endpoint}/v3/0549b4a43100d4f32f51c01c2fe4acdb/instances/logs/lts-configs?limit=10&offset=0&instance_id=362b42f769ff45d884e1866f8ee00bb4in12&instance_name=c316&enterprise_project_id=0
  • 响应示例 状态码: 200 Success { "total_count" : 1, "instance_lts_configs" : [ { "instance" : { "id" : "362b42f769ff45d884e1866f8ee00bb4in12", "name" : "nosql-c316", "mode" : "RedisCluster", "datastore" : { "version" : "5.0", "type" : "redis" }, "status" : "normal", "actions" : [ "GROWING" ], "enterprise_project_id" : "0", "supported_log_types" : [ "slow_log", "audit_log" ] }, "lts_configs" : [ { "log_type" : "slow_log", "lts_group_id" : "65442dd4-b8de-4e9f-8a80-b60aa0698354", "lts_stream_id" : "5992dd29-fd11-4228-a852-5f6e578789c5", "enabled" : true } ] } ] }
  • URI GET https://{Endpoint}/v3/{project_id}/instances/logs/lts-configs 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。获取方法请参见获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 offset 否 Integer 索引位置偏移量,表示从第一条数据偏移offset条数据后开始查询。取值必须为数字,不能为负数。默认取0值,表示从第一条数据开始查询。 limit 否 Integer 返回的最大记录数量。取值范围:1~100,必须为整数。不传该参数时,默认查询100条实例信息。 instance_id 否 String 根据实例ID精确搜索。 instance_name 否 String 根据实例名称模糊搜索。 enterprise_project_id 否 String 根据企业项目ID精确搜索。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total_count Integer 实例总记录数。 instance_lts_configs Array of objects 实例的LTS日志配置信息列表。详情请参考表5。 表5 InstanceLogConfig 参数 参数类型 描述 instance object 实例信息。详情请参考表6。 lts_configs Array of objects LTS日志配置明细。若未设置LTS日志流,不返回该字段。详情请参考表8。 表6 LogInstanceInfo 参数 参数类型 描述 id String 实例ID。 name String 实例名称。 status String 实例状态。取值: normal,表示实例正常。 abnormal,表示实例异常。 creating,表示实例创建中。 frozen,表示实例被冻结。 data_disk_full,表示实例磁盘已满。 createfail,表示实例创建失败。 enlargefail,表示实例扩容节点失败。 mode String 实例类型。 取值为“Cluster”,表示GeminiDB Redis集群实例类型。 datastore object 数据库信息。详情请参考表7。 actions Array of strings 实例正在执行的动作。 enterprise_project_id String 企业项目ID。 supported_log_types Array of strings 支持的日志类型。取值: slow_log,表示慢日志。 audit_log,表示审计日志。 表7 InstancesDatastoreResult 参数 参数类型 描述 type String 数据库接口。 version String 数据库版本号。 表8 InstanceLogConfigDetail 参数 参数类型 描述 log_type String 日志类型。取值: slow_log,表示慢日志。 audit_log,表示审计日志。 lts_group_id String 关联的LTS日志组ID,若enabled为false,表示最近一次关联的LTS日志组ID。 lts_stream_id String 关联的LTS日志流ID,若enabled为false,表示最近一次关联的LTS日志流ID。 enabled Boolean 关联的LTS日志流是否启用,true代表已启用,false代表未启用。
  • 请求示例 URI样例 PUT https://gaussdb-nosql.cn-north-4.myhuaweicloud.com/v3/375d8d8fad1f43039e23d3b6c0f60a19/instances/9136fd2a9fcd405ea4674276ce36dae8in02/security-group 请求体样例 { "security_group_id" : "73bed21a-708b-4985-b697-a96d0e0d2b39" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 X-Language 否 String 语言。 表3 请求Body参数 参数 是否必选 参数类型 描述 instance_ids 是 Array of strings 需要建立关联的实例ID列表。 log_type 是 String 日志类型。取值: slow_log,表示慢日志。 audit_log,表示审计日志。 lts_group_id 是 String LTS日志组ID。可通过 云日志 服务中“查询账号下所有日志组”API接口获取。 lts_stream_id 是 String LTS日志流ID。可通过云日志服务中“查询指定日志组下的所有日志流”API接口获取。
  • 请求示例 URI样例 POST https://{Endpoint}/v3/0549b4a43100d4f32f51c01c2fe4acdb/instances/logs/lts-configs 慢日志关联LTS日志流 { "instance_ids" : [ "fe45815ce8a6413ab7fa290da1db1614in12", "362b42f769ff45d884e1866f8ee00bb4in12" ], "log_type" : "slow_log", "lts_group_id" : "65442dd4-b8de-4e9f-8a80-b60aa0698354", "lts_stream_id" : "5992dd29-fd11-4228-a852-5f6e578789c5" } 审计日志关联LTS日志流 { "instance_ids" : [ "fe45815ce8a6413ab7fa290da1db1614in12", "362b42f769ff45d884e1866f8ee00bb4in12" ], "log_type" : "audit_log", "lts_group_id" : "65442dd4-b8de-4e9f-8a80-b60aa0698354", "lts_stream_id" : "5992dd29-fd11-4228-a852-5f6e578789c5" }
  • 请求示例 URI样例 DELETE https://{Endpoint}/v3/0549b4a43100d4f32f51c01c2fe4acdb/instances/logs/lts-configs 解除关联慢日志设置 { "instance_ids" : [ "fe45815ce8a6413ab7fa290da1db1614in12", "362b42f769ff45d884e1866f8ee00bb4in12" ], "log_type" : "slow_log" } 解除关联审计日志设置 { "instance_ids" : [ "fe45815ce8a6413ab7fa290da1db1614in12", "362b42f769ff45d884e1866f8ee00bb4in12" ], "log_type" : "audit_log" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 X-Language 否 String 语言。 表3 请求Body参数 参数 是否必选 参数类型 描述 instance_ids 是 Array of strings 需要解除关联的实例ID列表。 log_type 是 String 日志类型。取值: slow_log,表示慢日志。 audit_log,表示审计日志。
  • 操作场景 当前GeminiDB Redis支持将其他云厂商Redis、自建Redis的数据通过GeminiDB控制台导入到GeminiDB Redis。 您需要先将其他云厂商Redis、自建Redis的数据备份下载到本地,然后将备份数据文件上传与GeminiDB Redis实例同一租户下相同Region下的OBS桶中,最后在GeminiDB控制台创建数据导入任务,将数据导入到GeminiDB Redis实例中。
  • 创建OBS桶并上传备份文件 如果上传的备份文件大于5GB,请按照OBS服务提供的超过5GB如何上传操作指导执行。 如果上传的备份文件较小,且小于5GB,请执行如下步骤: 创建OBS桶。 在创建过程中,以下两个参数请按要求设置,其他详细的创建步骤,请参考《 对象存储服务 用户指南》的“创建桶”章节。 选择“区域”。 OBS桶所在区域必须跟Redis目标实例所在区域相同。 设置“存储类别”,当前支持“标准存储”、“低频访问存储”和“归档存储”。 请不要选择“归档存储”,否则会导致备份文件数据导入失败。 设置完成后,单击“立即创建”,等待OBS桶创建完成。 在OBS管理控制台的桶列表中,单击1中创建的OBS桶名称,进入“概览”页面。 在左侧导航栏,单击“对象”。 在“对象”页签下,单击“上传对象”,系统弹出“上传对象”对话框。 指定对象的存储类别。 请不要选择“归档存储”,否则会导致备份文件数据导入失败。 上传对象。 您可以拖拽本地文件或文件夹至“上传对象”区域框内添加待上传的文件,也可以通过单击“上传对象”区域框内的“添加文件”,选择本地文件添加。 单次最多支持100个文件同时上传,总大小不超过5GB。 图1 批量上传对象 可选:勾选“KMS加密”,用于加密上传文件。 单击“上传”,完成备份文件上传到OBS桶。
  • 响应示例 状态码: 200 OK { "meta_info" : { "current_time" : "2023-12-13T09:55:45Z" }, "payload" : { "list" : [ { "id" : "ef4fd3d6-fa4e-49ea-989a-3216c36164d7", "cluster_id" : "3c151f54-e5df-4b6c-8690-b955df98a97f", "match_nodes" : 1, "usage" : "TRAINING_TRAIN", "cpu" : 5, "memory" : 20, "build_in" : false, "project_id" : "54d37c8f25af4277a1ff4ee9772687bf" }, { "id" : "38aa2057-4217-41d0-b5ba-94f8832e909e", "cluster_id" : "3c151f54-e5df-4b6c-8690-b955df98a97f", "match_nodes" : 1, "usage" : "TRAINING_TRAIN", "gpu_type" : "Pnt1", "gpu" : 1, "cpu" : 5, "memory" : 20, "build_in" : false, "project_id" : "54d37c8f25af4277a1ff4ee9772687bf" }, { "id" : "2ac937fa-d17a-4991-8e56-f1951b878af8", "cluster_id" : "3c151f54-e5df-4b6c-8690-b955df98a97f", "match_nodes" : 1, "usage" : "TRAINING_TRAIN", "gpu_type" : "Pnt1", "gpu" : 1, "cpu" : 4, "memory" : 20, "build_in" : false, "project_id" : "54d37c8f25af4277a1ff4ee9772687bf" }, { "id" : "7676f33e-cf22-4227-aac1-ac3865ceddb2", "cluster_id" : "3c151f54-e5df-4b6c-8690-b955df98a97f", "match_nodes" : 1, "usage" : "TRAINING_TRAIN", "gpu_type" : "Pnt1", "gpu" : 1, "cpu" : 4, "memory" : 32, "build_in" : false, "project_id" : "54d37c8f25af4277a1ff4ee9772687bf" } ], "page_info" : { "offset" : 0, "limit" : 4, "total" : 4 } } }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 payload ResourceSpecs object 实际返回的资源规格信息 meta_info RespMetaInfo object 元数据 表5 ResourceSpecs 参数 参数类型 描述 list Array of ResourceSpecsVo objects 资源规格列表 page_info PageInfo object 返回列表分页信息 表6 ResourceSpecsVo 参数 参数类型 描述 id String id cluster_id String 集群ID usage String 资源规格用途 枚举值: SIM_COMPILE(仿真编译) SIM_DOCKER(仿真异步镜像) DATA_PRO CES S(数据处理) DATA_CONVERSION(数据转换) DATA_RESIM(回放仿真) DATA_DESENSITIZATION(数据脱敏) TRAINING_TRAIN(训练任务) TRAINING_EVALUATE(模型评测) TRAINING_COMPILE(模型编译) ANNOTATION_MANUAL(人工标注) ANNOTATION_AI(预标注) ANNOTATION_SEGMENTATION(交互式分割) COMMON_DATASET(数据集) gpu_type String GPU类型(资源规格不包含GPU,此字段不会返回); 枚举值: Tnt004 Vnt1 Mnt06 Pnt1 Pnt004 gpu Integer GPU数量,整数(资源规格不包含GPU,此字段不会返回); cpu Double CPU数量,单位Core,支持一位小数; memory Double 内存大小,单位GiB,支持一位小数; build_in Boolean 是否内置资源规格,true代表内置资源规格,false代表用户自定义资源规格。 project_id String 项目id match_nodes Integer 资源规格可用节点的数量 表7 PageInfo 参数 参数类型 描述 offset Integer 查询偏移量 limit Integer 返回个数上限 total Integer 资源总数 表8 RespMetaInfo 参数 参数类型 描述 current_time String 请求时间,UTC时间格式,时间为UTC标准时间。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。 当资源不存在的时候,PATCH可能会去创建一个新的资源。 在获取用户Token的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://iam.cn-south-1.myhuaweicloud.com/v3/auth/tokens
  • 请求消息体 请求消息体通常以结构化格式发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于获取用户Token接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,加粗的斜体字段需要根据实际值填写,其中username为用户名,domainname为用户所属的账号名称,user_password为用户登录密码,cn-south-1为project的名称,如cn-north-1,您可以从地区和终端节点中获取。 scope参数定义了Token的作用域,下面示例中获取的Token仅能访问project下的资源。您还可以设置Token额作用域为某个账号下所有资源或账号的某个project下的资源,详细定义请参见获取用户Token。 POST https://iam.cn-south-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "user_password", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "cn-south-1" } } } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 Content-Type:消息体的类型(格式),必选,默认取值为“application/json”。 X-Auth-Token:用户Token,可选,当使用Token方式认证时,必须填充该字段。X-Auth-Token是调用获取 IAM 用户Token(使用密码)接口返回的响应值,该接口功能为 获取Token ,因此调用该接口时,不用填写本字段。 公有云API同时支持使用AK/SK认证,AK/SK认证是使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。AK/SK认证的详细说明请参见:AK/SK认证。 对于获取用户Token接口,由于不需要认证,所以只添加“Content-Type”即可,添加消息头后的请求如下所示。 POST https://iam.cn-south-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
  • 请求URI 请求URI由如下部分组成。 {URI-scheme}://{Endpoint}/{resource-path}?{query-string} 表1 请求URI 参数 说明 URI-scheme 传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 承载REST服务端点的服务器域名或IP,不同服务在不同区域时,对应Endpoint不同,可以从地区和终端节点中获取。 例如IAM服务在“华南-广州”区域的Endpoint为“iam.cn-south-1.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“limit=10”,表示查询不超过10条数据。 例如您需要获取IAM在“华南-广州”区域的Token,则需使用“华南-广州”区域的Endpoint(iam.cn-south-1.myhuaweicloud.com),并在获取用户Token的URI部分找到resource-path(/v3/auth/tokens),拼接起来如下所示。 https://iam.cn-south-1.myhuaweicloud.com/v3/auth/tokens 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 定义资源 一个component下可以定义多个资源,所有的资源描述都存放于resources.yaml中,在以下样例中,WiseEyeChaosMonkeyMgrService下的resources.yaml中定义了该组件下的全量资源。 ├── global/ │ ├── meta.yaml │ ├── WiseEyeChaosMonkeyMgrService/ ├── config/ │ │ ├── business_config.yaml │ │ └── config_schema.yaml │ ├── resources.yaml 在resources.yaml中定义资源,资源的type和name构成资源的唯一标记,以列表的形式存在。 - name: chaos-mgr-p1 # 微服务平台显示的资源名称,最大长度为16字符,如果超过部署会报错 type: WiseCloud::Microservice::NuwaContainer # 类型,NUWA容器集群的IaC代码固定为此值 properties: ... - name: chaos-mgr-p2 # 微服务平台显示的资源名称,最大长度为16字符 type: WiseCloud::Microservice::NuwaContainer # 类型,NUWA容器集群的IaC代码固定为此值 properties: ... 表1 resources.yaml字段说明 字段 含义 name 微服务平台显示的资源名称,最大长度为16字符。 type 资源类型。支持配置管理、Cloud Map、NUWA Container、 GaussDB (for MySQL)及SLB。 properties 属性值,包含资源的详细参数。详细参数介绍请参见资源介绍。
  • 定义component 定义component是IaC将一个环境的资源组织起来的方式,我们可以把同一类资源组织起来成为一个component。所有被IaC定义的资源必须属于一个component。在IaC3.0的代码中,component体现为global文件夹下的目录,在以下样例中,IaC代码定义了WiseEyeChaosMonkeyMgrService和WiseEyeChaosMonkeyPortal两个component。 ├── global/ │ ├── meta.yaml │ ├── WiseEyeChaosMonkeyMgrService/... │ └── WiseEyeChaosMonkeyPortal/...
  • component间的编排概述 IaC Spec类型的IaC代码可以在global目录下的meta.yaml中描述资源的变更流程以及变更策略,component间的编排在spec包中的meta.yaml文件中描述,涉及applyPipeline/pipelines两个字段。pipelines中支持定义多个流程,applyPipeline描述本次变更要使用的流程。 type: WiseCloud::Environment # 描述当前环境类型,当前为固定值WiseCloud::Environment applyPipeline: environment-deploy # 定义默认选用的组件编排流水线名称,当前默认使用environment-deploy pipelines: ... 表1 meta.yaml字段说明 字段 说明 type 描述当前环境类型,当前为固定值WiseCloud::Environment。 applyPipeline 定义默认选用的组件编排流水线名称,当前默认使用environment-deploy。 pipelines pipelines中支持定义多个流程。 父主题: component间的编排
  • IaC Spec包 IaC Spec包典型目录结构如下: 表1 IaC Spec包结构说明 位置 类型 个数 描述 iacspec_{service}_{version}.zip 文件 1 IaC压缩包。 └── package.json 文件 1 包描述文件。 └── global/ 文件夹 1 全局默认的IaC描述,包含完整文件结构。 │ └── meta.yaml 文件 1 变更策略描述,相关说明请参见component间的编排。 │ └── environment/ 文件夹 1 公共资源。 │ └── resources.yaml 文件 1 公共资源列表,相关说明请参见在IaC代码中声明资源。 │ └── values.yaml 文件 1 公共资源参数值。 │ └── {microservice}/ 文件夹 0-N 微服务资源。 │ └── resources.yaml 文件 1 微服务资源列表,相关说明请参见在IaC代码中声明资源。 │ └── values.yaml 文件 1 微服务资源参数值,通过$ref的方式来引用。 │ └── configs/ 文件夹 1 微服务配置目录。 │ └── config_schema.yaml 文件 1 微服务配置字段定义。 │ └── {cluster}_config_records.yaml 文件 0-N 微服务集群配置项。 └── specs/ 文件夹 1 环境特定的IaC描述,结构与global相同,但仅包含与global有差异的文件。 │ └── cn_product_cbu/ 文件夹 1 中国区生产环境,命名采用站点级Cloud Map的名称,可以在环境管理界面查看可选的站点级Cloud Map名称列表。 │ └── environment/ 文件夹 0-1 环境公共资源。 │ └── values.yaml 文件 0-1 公共资源参数值。 │ └── {microservice}/ 文件夹 0-N 微服务资源。 │ └── values.yaml 文件 0-1 微服务资源参数值。 │ └── configs/ 文件夹 0-1 微服务配置目录。 │ └── {cluster}_config_records.yaml 文件 0-N 微服务集群配置项。 │ └── aaa_product_cbu/ 文件夹 1 亚非拉生产环境。 │ └── eu_product_cbu/ 文件夹 1 欧洲生产环境。 IaC Spec包样例: └── iacspec_WiseEyeDeployService_1.1.2.zip ├── global/ # global目录:放置所有规格目录所复用的配置文件 │ ├── meta.yaml # IaC主体描述文件,内容不包含components │ ├── environment/... # 公共资源,环境 │ ├── WiseEyeDeployConductorService/... # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ ├── WiseEyeDeployRepoService/... # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ └── WiseEyeDeployConsoleService/ # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ ├── config/ # 微服务配置目录 │ │ ├── config_records.yaml # 使用NUWA框架开发的变量定义框架,使用spring框架不生效 │ │ └── config_schema.yaml │ ├── resources.yaml # 微服务的资源列表 │ ├── packages.yaml │ └── values.yaml # 变量定义文件,被resources.yaml引用 ├── specs/ # 环境特定的IaC描述,结构与global相同,但仅包含与global有差异的文件。 │ ├── eu_product_cbu/... # 欧洲生产环境 │ ├── aaa_product_cbu/... # 亚非拉生产环境 │ └── cn_product_cbu/ # 中国区生产环境,命名采用站点级Cloud Map的名称,可以在环境管理界面查看可选的站点级Cloud Map名称列表 │ ├── WiseEyeDeployConductorService/... # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ ├── WiseEyeDeployRepoService/... # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ └── WiseEyeDeployConsoleService/ # 微服务目录,名称需要为WiseEyeDeployService服务下的微服务名称 │ ├── values.yaml # 变量定义文件,被resources.yaml引用 │ └── config/ # 微服务配置目录 │ └── config_records.yaml # 使用NUWA框架开发的变量定义框架,使用spring框架不生效 └── package.json # 包描述文件(必须) 上述目录结构相关文件和目录说明如下: package.json package.json为包描述文件,字段如表2所示。 表2 package.json字段说明 位置 类型 必填 描述 type string 是 包类型,常量:iacspec。 name string 是 包名称,格式:service/{service-id},其中service-id为服务ID。 version string 是 版本号。 package.json样例: { "type": "iacspec", "name": "service/com.huawei.wiseeyedeployservice", "version": "1.0.0" } global文件夹和spec文件夹 IaC Spec包通过不同规格目录来描述同一个服务在不同用途环境下所需的基础设施。但是,同一服务的不同的规格仍然存在大量相同的配置,需要一种机制来完成不同规格间配置的复用。因此,IaC支持放置一个global目录,其与specs目录同级,用于放置被所有规格目录所复用的配置文件。而各具体规格目录,只需包含与global目录的增量差异文件即可。 global文件夹:放置被所有规格目录所复用的配置文件。 global文件夹里面的微服务都可以被规格文件夹specs中的代码复用(可根据meta.yaml指定复用哪些微服务,取决于你在相应环境的部署规划)。 global文件夹的作用类似于Java中的父类,spec类似于继承了global的子类,实际部署时还是使用的specs中的文件,但specs中的文件可以继承和复用global文件。 meta.yaml:描述变更的组件与过程。 WiseEyeDeployConsoleService:描述要变更的微服务。 resources.yaml:微服务变更的主体文件,其他所有的values.yaml、config文件夹中的yaml等文件都围绕此文件展开。文件名必须为resources.yaml。 其他文件:为变量配置文件,其定义的内容都会被resources.yaml引用,文件名称可自定义。 其他微服务文件夹:结构同WiseEyeDeployConsoleService。 spec文件夹:同一个服务在不同用途环境下所需配置文件(基础设施)。这个文件目录是必须的。 specs是在环境上部署服务时,最终使用的配置文件,当部署服务时,第一关注点和入口就是specs。 specs目录下的规格文件夹,命名采用站点级Cloud Map的名称(cn_product_cbu、eu_product_cbu)。可以在环境管理界面查看可选的站点级Cloud Map名称列表。 当某个规格被选用于部署时,会先将该规格目录下所有文件与global目录进行合并,得到该规格目录最终的所有配置文件,再进行部署动作。 合并策略:如果文件的相对路径相同,则规格目录下的文件保留,global目录下的文件被覆盖,其他文件则共存。 global目录应包含完整的YAML内容,即:其下meta.yaml通过$ref引用的YAML内容都存在于global目录中。这样能确保即使规格目录为空,也能引用到global目录的默认参数,从而完成部署。 父主题: 了解代码仓结构
  • IaC Patch包 IaC Patch包典型目录结构如下: 表1 IaC Patch包结构说明 位置 类型 个数 描述 iacpatch_{microservice}_{version}.zip 文件 1 IaC压缩包。 └── package.json 文件 1 包描述文件。 └── global/ 文件夹 1 全局默认的IaC描述,包含完整文件结构。 │ └── resources.yaml 文件 1 微服务资源列表,相关说明请参见在IaC代码中声明资源。 │ └── values.yaml 文件 1 微服务资源参数值。 │ └── configs/ 文件夹 1 微服务配置目录。 │ └── config_schema.yaml 文件 1 微服务配置字段定义。 │ └── {cluster}_config_records.yaml 文件 0-N 微服务集群配置项。 └── specs/ 文件夹 1 环境特定的IaC描述,结构与global相同,但仅包含与global有差异的文件。 │ └── cn_product_cbu/ 文件夹 1 中国区生产环境,命名采用站点级Cloud Map的名称,可以在环境管理界面查看可选的站点级Cloud Map名称列表。 │ └── values.yaml 文件 0-1 微服务资源参数值。 │ └── configs/ 文件夹 0-1 微服务配置目录。 │ └── {cluster}_config_records.yaml 文件 0-N 微服务集群配置项。 │ └── aaa_product_cbu/ 文件夹 1 亚非拉生产环境。 │ └── eu_product_cbu/ 文件夹 1 欧洲生产环境。 IaC Patch包样例: └── iacpatch_WiseEyeDeployConsoleService_1.1.2.zip ├── global/ # global目录:放置所有规格目录所复用的配置文件 │ ├── config/ # 微服务配置目录 │ │ ├── config_records.yaml # 使用NUWA框架开发的变量定义框架,使用spring框架不生效 │ │ └── config_schema.yaml │ ├── resources.yaml # 微服务的资源列表 │ ├── packages.yaml │ └── values.yaml # 变量定义文件,被resources.yaml引用 ├── specs/ # 环境特定的IaC描述,结构与global相同,但仅包含与global有差异的文件 │ ├── eu_product_cbu/... # 欧洲生产环境 │ ├── aaa_product_cbu/... # 亚非拉生产环境 │ └── cn_product_cbu/ # 中国区生产环境,命名采用站点级Cloud Map的名称,可以在环境管理界面查看可选的站点级Cloud Map名称列表 │ ├── values.yaml # 变量定义文件,被resources.yaml引用 │ └── config/ # 微服务配置目录 │ └── config_records.yaml # 使用NUWA框架开发的变量定义框架,使用spring框架不生效 └── package.json # 包描述文件(必须) 上述目录结构相关文件和目录说明如下: package.json为包描述文件,字段如表2所示。 表2 package.json字段说明 位置 类型 必填 描述 type string 是 包类型,常量:iacpatch。 name string 是 包名称,格式:service/{service-id}/{component-name},其中{service-id}为服务ID,{component-name}为组件名称。 version string 是 版本号。 package.json样例: { "type": "iacpatch", "name": "service/com.huawei.wiseeyedeployservice/WiseEyeDeployConsoleService", "version": "1.0.0" } spec包通过不同规格目录来描述同一个服务在不同用途环境下所需的基础设施。但是,同一服务的不同的规格仍然存在大量相同的配置,需要一种机制来完成不同规格间配置的复用。因此,IaC支持放置一个global目录,其与specs目录同级,用于放置被所有规格目录所复用的配置文件。而各具体规格目录,只需包含与global目录的增量差异文件即可。 global文件夹:放置被所有规格目录所复用的配置文件。 global文件夹里面的微服务都可以被规格文件夹specs中的代码复用(可根据meta.yaml指定复用哪些微服务,取决于你在相应环境的部署规划)。 global文件夹的作用类似于Java中的父类,spec类似于继承了global的子类,实际部署时还是使用的specs中的文件,但specs中的文件可以继承和复用global文件。 spec文件夹:同一个服务在不同用途环境下所需配置文件(基础设施)。这个文件目录是必须的。 specs是在环境上部署服务时,最终使用的配置文件,当部署服务时,第一关注点和入口就是specs。 specs目录下的规格文件夹,命名采用站点级Cloud Map的名称(cn_product_cbu、eu_product_cbu)。可以在环境管理界面查看可选的站点级Cloud Map名称列表。 当某个规格被选用于部署时,会先将该规格目录下所有文件与global目录进行合并,得到该规格目录最终的所有配置文件,再进行部署动作。 合并策略:如果文件的相对路径相同,则规格目录下的文件保留,global目录下的文件被覆盖,其他文件则共存。 global目录应包含完整的YAML内容,即:其下meta.yaml通过$ref引用的YAML内容都存在于global目录中。这样能确保即使规格目录为空,也能引用到global目录的默认参数,从而完成部署。 父主题: 了解代码仓结构
  • global与specs的协同关系 本节以WiseChaos的IaC代码为例,详细描述代码运行原理及涉及的各个IaC文件的作用,微服务WiseChaos的整体IaC代码结构如下: iac3.0 # IaC3.0代码根目录:目录名字可自定义 └─ WiseEyeChaosMonkeyService # 此级目录为服务级目录,名字与所部署的服务名称相同 ├─ global # global目录:放置所有规格目录所复用的配置文件 ├─ WiseEyeChaosIssueMgrService ├─ WiseEyeChaosManageService ├─ WiseEyeChaosMonkeyExecutor │ └─ config │ ├─ business_config.yaml │ ├─ env.yaml │ ├─ envs_dynamic.yaml │ ├─ hosts.yaml │ └─ sidecar_aiops_param.json └─ resources.yaml │ └─ values.yaml ├─ WiseEyeChaosMonkeyPortal │ └─ config │ └─ sidecar_aiops_param.json │ └─ resources.yaml │ └─ values.yaml └─ WiseEyeChaosPortal └─meta.yaml ├─specs # 规格文件,描述了每个规格的定制化需求,最终部署的时候以specs文件为准 ├─cn_product_cbu ├─WiseEyeChaosMonkeyExecutor │ └─config │ ├─ envs_dynamic.yaml │ ├─ hosts.yaml │ └─ sidecar_aiops_param.json │ └─values.yaml ├─WiseEyeChaosMonkeyPortal │ └─config │ └─ sidecar_aiops_param.json │ └─values.yaml └─ meta.yaml ├─aaa_product_cbu └─eu_product_cbu └─package.json 当对此微服务的IaC代码打包合并时: specs中存在而global中不存在的文件,使用specs中的文件。 specs中不存在而global中存在的文件,使用global中的文件。 specs和global中都存在的,则使用specs中的文件。 以/iac3.0/WiseEyeChaosMonkeyService/specs/cn_product_cbu为例,在specs中的cn_product_cbu目录和global中都有WiseEyeChaosMonkeyExecutor和WiseEyeChaosMonkeyPortal微服务文件夹。 合并后最终呈现的文件目录如下: “覆盖”指的是完全取代,不是内容合并。 cn_product_cbu ├─ meta.yaml # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosMonkeyExecutor │ ├─ values.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ resources.yaml # 来自于global中的文件 │ └─ config │ ├─ business_config.yaml # 来自于global中的文件,因为specs中不存在 │ ├─ env.yaml # 来自于global中的文件,因为specs中不存在 │ ├─ envs_dynamic.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ hosts.yaml # 来自于specs目录,覆盖global中的文件 │ └─ sidecar_aiops_param.json # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosMonkeyPortal │ ├─ values.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ resources.yaml # 来自于global中的文件,因为specs中不存在 │ └─ config │ └─ sidecar_aiops_param.json # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosIssueMgrService # 来自于global中的文件,因为specs中不存在 ├─ WiseEyeChaosManageService # 来自于global中的文件,因为specs中不存在 └─ WiseEyeChaosPortal # 来自于global中的文件,因为specs中不存在 父主题: 了解代码仓结构
  • component内部编排 组件内部编排在spec包各组件的resources.yaml文件中描述,通过为资源指定dependsOn属性表达依赖关系。 component内部允许同一个资源出现多次,这表示同一个资源的不同变更阶段,这一场景下该资源的所有节点必须声明alias字段并且alias取值必须在component内全局唯一,同一个资源的所有alias之间必须显式地在dependsOn字段中声明串行依赖。 dependsOn是列表类型,每个元素使用type、name、alias等字段描述对其他资源的引用,其中name字段是必填字段,type、alias是可选字段;component解析某资源的dependsOn时,会根据元素属性从相同component中搜索满足条件的资源作为当前资源的依赖。 部分资源之间已经有隐式引用关系,系统自动添加dependsOn,不需要再显式声明。每种类型的哪些属性隐含引用关系,可以参考其文档,具体请参见资源介绍。 资源不能有循环依赖(A dependsOn B,B dependsOn C,C dependsOn A),不能依赖自己。 以下示例定义了两个资源,一个名为chaosmonkey-elb的ELB,一个名为chaosmonkey-slb的SLB;chaosmonkey-slb依赖于chaosmonkey-elb。在变更时,先变更chaosmonkey-elb,变更成功后再变更chaosmonkey-slb,如果chaosmonkey-elb变更失败,则不会变更chaosmonkey-slb。 - name: chaosmonkey-elb # 资源名称 type: WiseCloud::LoadBalancer::ELBV2 # 资源类型 properties: listeners: - name: listener protocol: HTTP protocolPort: 80 poolName: pool_a pools: - name: pool_a protocol: HTTP - name: chaosmonkey-slb # 资源名称 type: WiseCloud::LoadBalancer::SLB # 资源类型 dependsOn: # 定义对其他资源的依赖 - name: chaosmonkey-elb # 依赖的资源名称 properties: elbName: chaosmonkey-elb elbPoolNames: ["pool_a"] deployVersion: 1.4.12 slbConfigs: targets: - clusterName: mgr routes: - location: / target: mgr 父主题: 变更流程编排开发
  • 使用configparser工具 在Dockerfile文件中,为configparser文件添加可执行权限。 定义业务配置项模板文件和meta.txt,样例如图1 业务配置项模板所示。 图1 业务配置项模板 在业务配置项模板文件(.tmpl文件)中,使用 {{参数名称}} 格式定义需要动态替换的参数,样例如图2所示。 图2 模板参数定义 在meta.txt文件中定义需要替换的业务配置项模板文件。如图3所示。 图3 替换业务配置项模板文件 application.properties.tmpl为配置文件模板,application.properties为目标配置文件。 配置中指定的文件路径是相对于meta.txt文件的路径。 启动业务进程之前,在启动脚本中调用configparser工具,进行参数替换。使用方式如下: /opt/huawei/app/bin/configparser -meta /opt/huawei/app/configtemplate/meta.txt -log configparser.log -mode front -tempPath /opt/huawei/app/configtemplate/config-temp 使用绝对路径的方式调用configparser工具,/opt/huawei/app/bin/为容器启动时的绝对路径。 -meta:指定meta.txt文件,/opt/huawei/app/configtemplate/为容器启动时meta.txt文件的绝对路径。 -log:存放configparser工具的运行日志。 -mode front:固定使用此参数值。 -tempPath:工具运行过程中生成临时文件的路径。 /opt/huawei/app/configtemplate/为容器启动时的绝对路径,必须保证此目录路径存在。config-temp文件夹可以不存在,会自动创建,运行结束后会清理此路径。 如果不配置,默认使用/opt/huawei/app/nuwa/config-temp。
  • 概述 支持将应用部署到AppStage,对于Spring Cloud框架开发的服务,需要在代码中添加相应的依赖和配置。本章以开发SpringCloudDemo为例,演示如何开发业务代码及IaC部署脚本。您可以下载Demo源码,结合本章内容进行理解。 SpringCloudDemo包含DemoOrgidLogin、DemoServiceAService与DemoServiceBService三个微服务,其中DemoOrgidLogin是集成OrgID登录功能的微服务,DemoServiceAService为用户管理微服务、DemoServiceBService为订单管理微服务,其包含了完整的源代码以及构建好的容器镜像。 我们采用Cloud Map来实现微服务注册发现及微服务之间的调用,使用STS进行微服务身份认证及敏感信息管理,WiseDBA提供数据库管理功能,SLB管理路由转发负载均衡。接下来将介绍如何集成STS、Cloud Map、WiseDBA、SLB以及OrgId的登录功能。 父主题: 开发业务代码和编写IaC脚本
  • 录入微服务信息 在“应用基础信息管理”页面的左侧导航栏选择“微服务管理”。 在“微服务管理”页面右上角单击“创建微服务”。 在“创建微服务”页面的“所属服务”下拉列表中选择微服务所属服务,设置微服务中文名(本案例为DemoOrgidLogin、DemoServiceAService、DemoServiceBService)、微服务英文名(本案例的英文名同中文名),其中微服务所属服务和微服务英文名设置后不可修改。 微服务DemoOrgidLogin是集成OrgID登录功能的微服务;DemoServiceAService、DemoServiceBService是业务微服务,其中DemoServiceAService用于管理用户、DemoServiceBService用于管理订单。 微服务中文名支持汉字、数字、字母,3~64个字符。 微服务英文名必须以字母开头,支持大小写字母、数字,3~64个字符,创建后不可修改。 微服务英文名是微服务在系统内的唯一标识,录入后不可修改,系统在部分场景下会使用微服务英文名代替微服务中文名进行展示。 单击“创建”。在微服务列表中可查看到此新建的微服务“状态”为“草稿”。 在新创建的微服务所在行“操作”列单击“发布”(发布后微服务无法删除,请谨慎操作),在弹框中单击“确认”。 在微服务列表中可查看到此新建微服务“状态”为“已发布”,录入微服务信息完成。 发布微服务信息后,如果在AppStage相关中心未同步到该微服务信息,在新创建的微服务所在行“操作”列可单击“同步”重新同步微服务信息。
共100000条