华为云用户手册

  • 相关操作 关闭MindInsight方式如下: 方式1:在开发环境JupyterLab中的.ipynb文件窗口中输入命令,关闭 MindInsight。端口号在启动MindInsight中设置,默认使用8080,需要替换为实际开启MindInsight时的端口。 !mindinsight stop --port 8080 方式2:单击下方按钮进入MindInsight实例管理界面,该界面记录了所有启动的MindInsight实例,单击对应实例后面的SHUT DOWN即可停止该实例。 图8 单击SHUT DOWN停止实例 方式3:单击下方红框中的按钮可以关闭所有启动的MindInsight实例。 图9 关闭所有启动的MindInsight实例 方式4(不推荐):直接在JupyterLab中上关闭MindInsight窗口,此方式仅是关闭MindInsight可视化窗口,并未关闭后台。
  • Step2 上传Summary数据 在开发环境中使用MindInsight可视化功能,需要用到Summary数据。 Summary数据可以直接传到开发环境的这个路径下/home/ma-user/work/,也可以放到OBS并行文件系统中。 Summary数据上传到Notebook路径/home/ma-user/work/下的方式,请参见上传数据至Notebook。 Summary数据如果是通过OBS并行文件系统挂载到Notebook中,请将模型训练时产生的Summary文件先上传到OBS并行文件系统,并确保OBS并行文件系统与ModelArts在同一区域。在Notebook中启动MindInsight时,Notebook会自动从挂载的OBS并行文件系统目录中读取Summary数据。
  • 添加输出目录 添加输出目录的代码比较简单,即在代码中添加一个输出评估结果文件的目录,被称为train_url,也就是页面上的训练输出位置。并把train_url添加到使用的函数analysis中,使用save_path来获取train_url。示例代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 FLAGS = tf.app.flags.FLAGS tf.app.flags.DEFINE_string('model_url', '', 'path to saved model') tf.app.flags.DEFINE_string('data_url', '', 'path to output files') tf.app.flags.DEFINE_string('train_url', '', 'path to output files') tf.app.flags.DEFINE_string('adv_param_json', '{"attack_method":"FGSM","eps":40}', 'params for adversarial attacks') FLAGS(sys.argv, known_only=True) ... # analyse res = analyse( task_type=task_type, pred_list=pred_list, label_list=label_list, name_list=file_name_list, label_map_dict=label_dict, save_path=FLAGS.train_url)
  • 拷贝数据集到本地 拷贝数据集到本地主要是为了防止长时间访问OBS容易导致OBS连接中断使得作业卡住,所以一般先将数据拷贝到本地再进行操作。 数据集拷贝有两种方式,推荐使用OBS路径进行处理拷贝。 OBS路径(推荐) 直接使用moxing的copy_parallel接口,拷贝对应的OBS路径。 ModelArts数据管理中的数据集(即manifest文件格式) 使用moxing的copy_manifest接口将文件拷贝到本地并获取新的manifest文件路径,然后使用SDK解析新的manifest文件。 ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。
  • Step2 上传Summary数据 在开发环境中使用TensorBoard可视化功能,需要用到Summary数据。 Summary数据可以直接传到开发环境的这个路径下/home/ma-user/work/,也可以放到OBS并行文件系统中。 Summary数据上传到Notebook路径/home/ma-user/work/下的方式,请参见上传数据至Notebook。 Summary数据如果是通过OBS并行文件系统挂载到Notebook中,请将模型训练时产生的Summary文件先上传到OBS并行文件系统,并确保OBS并行文件系统与ModelArts在同一区域。在Notebook中启动TensorBoard时,Notebook会自动从挂载的OBS并行文件系统目录中读取Summary数据。
  • Step3 启动TensorBoard 在开发环境的JupyterLab中打开TensorBoard有多种方法。可根据使用习惯选择。 图1 JupyterLab中打开TensorBoard的方法 方式1(推荐): 在JupyterLab左侧导航创建名为“summary”的文件夹,将数据上传到“/home/ma-user/work/summary”路径。注:文件夹命名只能为summary否则无法使用。 进入“summary”文件夹,单击方式1,直接进入TensorBoard可视化界面。如图2所示。 图2 TensorBoard界面(1) 方式2: 用户可以自行升级除2.4.0之外的TensorBoard,但需注意升级后只有方式2使用新的TensorBoard,其余方式保持TensorBoard2.1.1不变。
  • 相关操作 关闭TensorBoard方式如下: 方式1:单击下图所示的,进入TensorBoard实例管理界面,该界面记录了所有启动的TensorBoard实例,单击对应实例后面的SHUT DOWN即可停止该实例。 图8 单击SHUT DOWN停该实例 方式2:在开发环境JupyterLab中的.ipynb文件窗口中输入命令,关闭 TensorBoard。PID在启动界面有提示或者通过 ps -ef | grep tensorboard 查看。 !kill PID 方式3:单击下方红框中的按钮可以关闭所有启动的TensorBoard实例。 图9 关闭所有启动的TensorBoard实例 方式4(不推荐):直接在JupyterLab中上关闭TensorBoard窗口,此方式仅关闭可视化窗口,并未关闭后台。
  • 创建训练作业 使用PyTorch预置框架功能,通过mp.spawn命令启动 启动方式选择预置框架/PyTorch,代码目录选择OBS桶的code文件夹所在路径,启动文件选择main.py文件。 图1 创建训练作业 当资源规格为单机多卡时,需要在创建训练作业时指定超参world_size和rank。若资源规格为多机时(训练作业计算节点个数大于 1)无需设置,world_size和rank超参由平台自动注入。 图2 超参 使用 自定义镜像 功能,通过torch.distributed.launch命令启动 启动方式选择自定义,选择镜像,代码目录选择OBS桶的code文件夹所在路径,启动命令如下: bash ${MA_JOB_DIR}/code/torchlaunch.sh 图3 创建训练作业 使用自定义镜像功能,通过torch.distributed.run命令启动 启动方式选择自定义,选择镜像,代码目录选择OBS桶的code文件夹所在路径,启动命令如下: bash ${MA_JOB_DIR}/code/torchrun.sh 图4 创建训练作业
  • 代码示例 文件目录结构如下所示,将以下文件上传至OBS桶中: code # 代码根目录 └─torch_ddp.py # PyTorch DDP训练代码文件 └─main.py # 使用PyTorch预置框架功能,通过mp.spawn命令启动训练的启动文件 └─torchlaunch.sh # 使用自定义镜像功能,通过torch.distributed.launch命令启动训练的启动文件 └─torchrun.sh # 使用自定义镜像功能,通过torch.distributed.run命令启动训练的启动文件 torch_ddp.py内容如下: import os import torch import torch.distributed as dist import torch.nn as nn import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP # 用于通过 mp.spawn 启动 def init_from_arg(local_rank, base_rank, world_size, init_method): rank = base_rank + local_rank dist.init_process_group("nccl", rank=rank, init_method=init_method, world_size=world_size) ddp_train(local_rank) # 用于通过 torch.distributed.launch 或 torch.distributed.run 启动 def init_from_env(): dist.init_process_group(backend='nccl', init_method='env://') local_rank=int(os.environ["LOCAL_RANK"]) ddp_train(local_rank) def cleanup(): dist.destroy_process_group() class ToyModel(nn.Module): def __init__(self): super(ToyModel, self).__init__() self.net1 = nn.Linear(10, 10) self.relu = nn.ReLU() self.net2 = nn.Linear(10, 5) def forward(self, x): return self.net2(self.relu(self.net1(x))) def ddp_train(device_id): # create model and move it to GPU with id rank model = ToyModel().to(device_id) ddp_model = DDP(model, device_ids=[device_id]) loss_fn = nn.MSELoss() optimizer = optim.SGD(ddp_model.parameters(), lr=0.001) optimizer.zero_grad() outputs = ddp_model(torch.randn(20, 10)) labels = torch.randn(20, 5).to(device_id) loss_fn(outputs, labels).backward() optimizer.step() cleanup() if __name__ == "__main__": init_from_env() main.py内容如下: import argparse import torch import torch.multiprocessing as mp parser = argparse.ArgumentParser(description='ddp demo args') parser.add_argument('--world_size', type=int, required=True) parser.add_argument('--rank', type=int, required=True) parser.add_argument('--init_method', type=str, required=True) args, unknown = parser.parse_known_args() if __name__ == "__main__": n_gpus = torch.cuda.device_count() world_size = n_gpus * args.world_size base_rank = n_gpus * args.rank # 调用 DDP 示例代码中的启动函数 from torch_ddp import init_from_arg mp.spawn(init_from_arg, args=(base_rank, world_size, args.init_method), nprocs=n_gpus, join=True) torchlaunch.sh内容如下: #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" CMD="python -m torch.distributed.launch \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ --nproc_per_node=$NGPUS_PER_NODE \ --master_addr $MASTER_ADDR \ --master_port=$MASTER_PORT \ --use_env \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD torchrun.sh内容如下: PyTorch 2.1版本需要将“rdzv_backend”参数设置为“static:--rdzv_backend=static”。 #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" if [[ $NODE_RANK == 0 ]]; then EXT_ARGS="--rdzv_conf=is_host=1" else EXT_ARGS="" fi CMD="python -m torch.distributed.run \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ $EXT_ARGS \ --nproc_per_node=$NGPUS_PER_NODE \ --rdzv_id=$JOB_ID \ --rdzv_backend=c10d \ --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD
  • 可视化训练作业介绍 ModelArts支持在新版开发环境中开启TensorBoard和MindInsight可视化工具。在开发环境中通过小数据集训练调试算法,主要目的是验证算法收敛性、检查是否有训练过程中的问题,方便用户调测。 ModelArts可视化作业支持创建TensorBoard类型和MindInsight两种类型。 TensorBoard和MindInsight能够有效地展示训练作业在运行过程中的变化趋势以及训练中使用到的数据信息。 TensorBoard TensorBoard是一个可视化工具,能够有效地展示TensorFlow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的数据信息。TensorBoard相关概念请参考TensorBoard官网。 TensorBoard可视化训练作业,当前仅支持基于TensorFlow2.1、Pytorch1.4/1.8版本镜像,CPU/GPU规格的资源类型。请根据实际局点支持的镜像和资源规格选择使用。 MindInsight MindInsight能可视化展现出训练过程中的标量、图像、计算图以及模型超参等信息,同时提供训练看板、模型溯源、数据溯源、性能调试等功能,帮助您在更高效地训练调试模型。MindInsight当前支持基于MindSpore引擎的训练作业。MindInsight相关概念请参考MindSpore官网。 MindInsight可视化训练作业,当前支持的镜像如下,请根据实际局点支持的镜像和资源规格选择使用。 mindspore1.2.0版本,CPU/GPU规格的资源类型。 mindspore1.5.x以上版本,Ascend规格的资源类型。 您可以使用模型训练时产生的Summary文件在开发环境Notebook中创建可视化作业。 在开发环境中创建MindInsight可视化作业,请参见MindInsight可视化作业。 在开发环境中创建TensorBoard可视化作业,请参见TensorBoard可视化作业。 父主题: 模型训练可视化
  • 创建训练作业 本案例创建训练作业时,需要配置如下参数。 表1 创建训练作业的配置说明 参数名称 说明 “创建方式” 选择“自定义算法”。 “启动方式” 选择“自定义”。 “镜像” 选择用于训练的自定义镜像。 “代码目录” 执行本次训练作业所需的代码目录。本文示例的代码目录为“obs://test-modelarts/ascend/code/”。 “启动命令” 代码目录中的Python启动脚本。本文示例的启动命令为“bash ${MA_JOB_DIR}/code/run_torch_ddp_npu.sh”。启动脚本的完整代码请参见代码示例。
  • 计费说明 根据您选择的版本规格进行计费。购买专业版套餐后,计费项还包括扩容包。 表1 AstroPro计费项 计费项 计费项说明 适用的计费模式 计费公式 套餐规格 AstroPro当前仅提供了专业版套餐供您使用。 包年/包月 套餐版本单价 * 购买时长 (可选)扩容包 扩容包用于新增更多的用户数、应用数和实体个数。扩容包不可单独购买和退订,扩容包的使用截止时间与主资源的截止时间保持一致,主资源套餐到期后,扩容包将不可使用。 包年/包月 扩容包单价 * 购买时长(以主套餐有效时间折算)
  • 计费示例(无扩容包) 假设您在2023年11月01日,购买了AstroPro专业版有效期1年,并在到期前手动续费1年,则: 第一个计费周期为:2023/11/01 15:50:04 ~ 2024/11/01 23:59:59 第二个计费周期为:2024/11/01 23:59:59 ~ 2025/11/01 23:59:59 续费时需支付的费用为AstroPro规格套餐包年的费用(费用以官网实际费用为准)。
  • 包年/包月资源 对于包年/包月计费模式的AstroPro套餐,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月AstroPro套餐,可以执行退订操作,系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。 如果已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。 若您购买AstroPro专业版后,有订购扩容包,执行退订操作时,扩容包会一并退订。
  • URI GET /v2/bills/partner-bills/subcustomer-bills/monthly-sum 参数说明请参见下表。 表1 查询参数 参数 是否必选 参数类型 取值范围 描述 cycle 是 String 最大长度:10 消费时间。 格式固定为YYYY-MM。 示例:2018-08 charge_mode 是 String 最大长度:4 计费模式。 1:包年/包月 3:按需 11:节省计划 bill_type 否 String 最大长度:4 账单类型。 0:消费 1:退订 2:华为核销 此参数不携带或携带值为空时,不作为筛选条件。 indirect_partner_id 否 String 最大长度:64 云经销商ID。获取方法请参见查询云经销商列表。 如果需要查询云经销商伙伴的子客户的消费汇总账单,必须携带该字段。除此之外,此参数不做处理。 customer_id 否 String 最大长度:64 客户账号ID。您可以调用查询客户列表接口获取customer_id。 此参数不携带或携带值为空时,不作为筛选条件。 cloud_service_type 否 String 最大长度:256 云服务类型编码,例如OBS的云服务类型编码为“hws.service.type.obs”。您可以调用查询云服务类型列表接口获取。 此参数不携带或携带值为空时,不作为筛选条件。 offset 否 Integer [0-最大整数] 偏移量,从0开始。默认值为0。 说明: offset用于分页处理,如不涉及分页,请使用默认值0。offset表示相对于满足条件的第一个数据的偏移量。如offset = 1,则返回满足条件的第二个数据至最后一个数据。 示例1,满足查询条件的结果共10条数据,limit取值为10,offset取值为1,则返回的数据为2~10,第一条数据不返回。 示例2,查询总数20条,期望每页返回10条数据,则获取第一页数据,入参offset填写0,limit填写10;获取第二页数据,入参offset填写10,limit填写10。 limit 否 Integer [1-100] 每页个数。默认值为10。
  • 步骤1:基本配置 基本信息中配置的内容会呈现在代码中,需用户根据实际情况进行勾选配置。 在服务列表中,单击新增一个服务中已创建服务后的“编辑”。 在基本配置中,按需进行设置。 图1 基本配置 基本配置:若本地已有配置好的服务元数据,可通过单击“导入元数据”,直接导入。 微服务名称:自动关联新增一个服务中创建的服务名称,不可修改。 Group ID:服务所属项目中的组ID,会自动关联新建项目中Group的值。在Maven项目中用作工程组的标识,Group ID在一个组织或项目中通常是唯一的。 Package:设置生成代码的顶层包名,会自动关联新建项目中Package的值。 Artifact ID:在Maven项目中用作工程的标识,通常是工程的名称。 版本:在Maven项目中用作工程的版本号。 框架:选择微服务使用的开发框架,当前仅支持DEVSPORE。 在详细配置中,配置服务的详细信息。 图2 详细配置 服务组:选择服务所属的分组。如何创建服务组,请参见新建服务组。 服务单元化策略:服务在子域内的单元化策略。服务单元化策略必须在一个子域内定义,不能跨子域。当应用比较复杂时,可基于领域的特定概念将应用分解为多个领域,每个领域就是一个子域,如核心子域、支撑子域和通用子域。 ROOTED:根服务,包含根业务对象的服务,每个子域最多有一个根服务。 SHARDING:分片服务,必须按照根服务的根业务对象的维度对数据进行分片,和根服务使用同样的数据单元化策略。只有子域中包含根服务时,才允许有分片服务。一个子域可以包含一个或多个分片服务。 SINGLE:单库,无论子域是否进行单元化部署,该服务只在一个单元(一般以region为单元)内部署。 API版本:服务的API版本,默认为新增一个服务时配置的版本,如果需要升级API的版本,请参见升级API版本。 是否生成客户端:是否生成客户端的代码。开启后,会生成服务的客户端代码,如图3。 图3 生成客户端的代码 是否启用扩展拦截:通过引入devspore-horizon插件,用户自定义继承抽象类Approve和添加配置,在请求进入和返回时增强处理。 是否支持入口插件:是否启用入口扩展插件功能。 设置为“是”时,自动在pom文件中引入devspore-horizon插件,并在所有service实现类的方法上添加“@Extension”注解。同时在plugin目录下,生成“DefaultRequestPlugin.java”示例文件。 使用插件时,用户需要在配置文件中添加devspore.horizon.processors,即配置自己编写的扩展插件注入到spirng中的名称,多个插件之间使用英文逗号隔开,扩展插件需要继承com.huawei.devspore.horizon.approver.Approve抽象类,并重写其中的doApprove方法。 是否支持出口插件:是否启用出口扩展插件功能。 设置为“是”时,自动在pom文件中引入devspore-horizon插件,并在所有service实现类的方法上添加“@Extension”注解。同时在plugin目录下生成“DefaultResponsePlugin.java”示例文件。 使用插件时,用户需要在配置文件中添加devspore.horizon.processors,即配置自己编写的扩展插件注入到spirng中的名称,多个插件之间使用英文逗号隔开,扩展插件需要继承com.huawei.devspore.horizon.approver.Approve抽象类,并重写其中的doApprove方法。 设置完成后,单击“下一步”,进入框架配置页面。 父主题: 编辑服务
  • 使用说明 AstroPro为每个项目预置了admin、architect和developer三种类型的角色。 admin 可以增删改査项目下的所有资源。 可以为项目下的所有角色分配用户(仅限于同账号下的用户,如图1中的 IAM 用户1、IAM用户2)。 图1 华为账号与IAM用户 architect 可以新建服务。 可以删除本人创建的服务,不能删除其他人创建的服务。 可以对项目下的所有服务进行编辑。 developer 可以查看项目下的所有资源。 可以重新编译有权限项目下的服务并下载代码。
  • 操作步骤 具备workspace_admin权限的用户或项目级admin权限的用户,参考如何登录AstroPro中操作,登录AstroPro界面。 在项目列表中,单击对应项目后的“配置”。 在项目管理中,单击“新增”。 图2 单击新增 在添加用户页面,输入用户ID,选择赋予用户的角色,单击“确认”。 图3 添加用户 参考创建IAM用户中操作创建用户后,在用户详情页面可获取到用户ID。 图4 添加用户 用户添加完成后,在项目角色管理列表中,可查看到已添加的用户,角色类型为“admin”。如果需要删除用户,可单击用户后的,删除已添加的用户。 图5 查看已添加的用户 使用已添加的用户登录AstroPro,该用户即可对项目进行增删改査等操作。 图6 IAM用户登录
  • 关系属性设置 在业务设计页面,拖入两个BO业务对象(命名为Bo1、Bo2)单击“relations”中的“聚合”,为对象建立聚合关系。选中已创建的关系,在右侧页面即可设置关系属性,如图2所示。 图2 聚合 关系名称:设置聚合关系的名称。 关系类型:根据创建的聚合关系自动生成。 关系首要方:根据创建的聚合关系自动生成。 关系次要方:根据创建的聚合关系自动生成。 DTO暴露方式 - NESTED:是否设置DTO的NESTED(嵌套)能力。 不设置:不生成NESTED。 只生成DTO:只生成NESTED对象的类。 生成DTO读API:只会生成一个get接口。 生成DTO读写API:除了生成一个get接口,还会生成一个插入接口。 DTO暴露方式 - CARTESIAN:设置DTO的CARTESIAN(笛卡尔积)能力。 不设置:不生成CARTESIAN。 只生成DTO:只生成CARTESIAN对象的类。 生成DTO读API:只会生成一个get接口。 每个Bo1关联最大Bo2数:一个首要方和次要方建立关联的数量上限。 每个Bo1最大关联Bo2数:一个次要方和首要方建立关联的数量上限。 每个Bo1关联最大Bo2维度上限预警值:首要方一条数据最多关联次要方多少条数据报出告警。
  • 了解服务创建流程 在AstroPro中创建一个服务的流程,如图1所示。 图1 创建服务流程图 新增一个服务 创建一个空服务,并指定服务的版本。创建服务前,请确保已创建项目和服务组。 基本配置 设置服务框架、版本和单元化策略等信息,请根据实际业务直接在界面进行勾选。 框架配置 设置服务的架构、数据库、缓存和安全认证等信息,请根据实际业务直接在界面进行勾选。 生成策略 设置服务的API、代码风格、部署和性能测试等信息,请根据实际业务直接在界面进行勾选。 业务设计 基本配置、框架配置和生成策略需要用户根据自身业务的实际情况进行配置,配置不同生成的效果有所不同。业务设计是AstroPro的核心能力,是用户设计自己业务的基础。 服务依赖 通常情况下,一个应用不是一个单独的服务,可能由多个服务共同组成。这些服务之间可能存在一些跨服务的调用,此时就需要通过添加依赖服务,把这些服务的客户端集成过来。 生成服务代码 根据配置的业务模型,生成服务的代码。
  • 操作步骤 在业务设计页面,选中某个业务对象。 单击BO属性操作中的“自定义API”,进入编辑自定义API页面。 单击,按需添加所需的API。 图2 添加API 实例级别:定义API实例的级别,如类型、实例。 动作名称:设置API的动作名称。 请求方法:HTTP请求方法(也称为操作或动作),用于告诉服务您正在请求什么类型的操作。 get:请求服务器返回指定资源。 put:请求服务器更新指定资源。 post:请求服务器新增资源或执行特殊操作。 delete:请求服务器删除指定资源。 请求对象:设置请求的对象,即API请求的输入参数。 返回对象:请求发送后,您会收到的响应,如状态码。 设置完成后,单击“保存”。
  • 操作步骤 具备workspace_admin权限的用户,参考如何登录AstroPro中操作,登录AstroPro界面。 在项目列表中,单击对应项目后的“配置”。 在工作空间角色管理中,单击“新增”。 图1 单击新增 在添加用户页面,输入用户ID,单击“确认”。 图2 输入用户ID 参考创建IAM用户中操作创建用户后,在用户详情页面可获取到用户ID。 图3 获取用户ID 用户添加完成后,在工作空间角色管理列表中,可查看到已添加的用户,角色类型为“workspace_admin”。如果需要删除用户,可单击用户后的,删除已添加的用户。 图4 查看已添加的用户 使用已添加的用户登录AstroPro,该用户即可对本工作空间下的所有资源进行增删改查等操作。 图5 IAM用户登录
  • 步骤3:生成策略 生成策略和基本配置、框架配置一样,需要您根据实际情况进行勾选配置,不同的配置会呈现不同的效果。 API设置。 图1 API设置 Json序列化 小驼峰:序列化后的json属性名,采用驼峰格式。 下划线:序列化后的json属性名,采用下划线连接单词。 标准响应体:返回的响应体是否使用标准样式。 { "code": 200, "msg": "success", "data": { "name": "zhangsan", "birthday": "1990-01-01", "other_properties": "..." } } Web框架模型:生成基于spring-webmvc的API层。 关闭API中根对象前缀:设置为“是”时,sharding bo的API前面不需要添加root bo的路径。 查询参数阈值:设置查询参数阈值,值为“0”时不生效。当查询参数大于该阈值时,将多个查询参数转换为对象。 设置代码风格。 图2 设置代码风格 配置文件格式:配置spring boot properties文件格式。 yaml :配置文件使用yaml格式。 properties :配置文件使用properties格式。 Lombok插件:是否为DO、DTO或QO定义类自动生成Lombok注解。 工程目录:设置生成代码的工程目录样式。 单Module:工程目录结构只有一个模块。 base/service:工程目录结构包含base和service两个模块。 DDD:和单Module一样,工程目录结构只有一个模块。 图3 工程目录不同类型设置效果 module添加服务名前缀:配置为“是”时,模块名称前会添加服务名前缀。 图4 开启前后效果 设置部署信息。 图5 设置部署信息 服务部署脚本 图6 服务部署脚本设置效果对比 主机部署:对接鲁班部署,将生成“.clouddeploy”和必备的目录和文件。 容器部署:对接流水线部署,将生成“.cloudbuild”和对应的“build.yml”文件。 否:不对接部署。 服务打包方式 jar:打成jar包。jar通常包含一些Java类文件、相关元数据和资源,在声明了Main_class后可使用java命令运行。 war:打成war包。war是Java Web应用程序的标准打包格式,war是一个Web模块,包括WEB-INF目录,可直接运行于Web容器中。 性能测试。 是否使用CodeArts PerfTest进行性能测试。性能测试CodeArts PerfTest是一项为基于HTTP/HTTPS/TCP/UDP/HLS/RTMP/WEBSOCKET/HTTP-FLV等协议构建的云应用提供性能测试的服务,支持快速模拟大规模并发用户的业务高峰场景,可以很好的支持报文内容和时序自定义、多事务组合的复杂场景测试,测试完成后会为您提供专业的测试报告呈现您的服务质量。更多关于CodeArts PerfTest的介绍,请参见性能测试CodeArts PerfTest。 图7 性能测试 租户配置。 图8 租户配置 多租模型:是否支持多租户资源隔离。 Tenant:支持多租模式,BO级多租配置multiTenant生效,开启BO级多租的业务对象必须关联到租户,包含租户id字段,租户id字段可自定义名称。 否:无内置租户模型。 租户验证方式:设置租户ID资源获取方式。“多租模型”设置为“Tenant”时,才显示该配置。 Header:使用header头携带方式传入tenantId。 Token:使用token方式传入tenantId。 设置完成后,单击“下一步”,进入业务设计页面。 父主题: 编辑服务
  • 了解构建流程 在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。业务建模是指通过业务设计,将实际业务涉及的对象和行为转换为元数据中的对象、对象关系、服务依赖等构成的模型,通过模型生成服务,实现业务需求。 使用AstroPro创建企业核心应用的流程,如图1所示。 图1 创建企业核心应用流程图 创建项目 项目是使用AstroPro核心业务的入口。在使用AstroPro前,需要先创建一个项目。 创建服务组 服务组用于对项目中的服务进行分组,一般一个分组对应一个研发团队。创建项目后,默认会创建一个和项目同名的服务组,所有新建服务默认在此分组下。 添加服务 在新增服务界面,通过简单的配置,完成服务框架的搭建。 编辑服务 添加服务的操作,相当于为服务搭建了一个框架。如果需要服务实现某些特定的功能,还需要您根据业务需求,对服务进行业务模型配置。 生成服务代码 基于配置的业务模型,生成服务的基本代码。代码生成后,会提供一个压缩包,供您直接使用。 父主题: 创建企业核心应用
  • 创建项目 在软件开发生产线首页,“新建项目”。 在“选择模板”页签,选择“IPD-系统设备类”,单击“选用”,进入“新建项目”页面。 填写基本信息。 根据下表输入“项目名称” 、“项目代号”、“项目描述”,然后单击“确定”按钮。 参数名 参数说明 项目名称 根据自己需求设置。 项目代号 针对第三方业务。设置项目代号后,便于业务管理。 项目描述 对项目的简要说明。 创建成功后,项目自动进入到主页,提示 “新建项目成功”。 父主题: 管理员:初始化项目
  • 业务场景及设计流程说明 在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统,帮助您快速上手AstroPro。 本入门为创建一个简单的订单系统,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,例如手机、耳机等,商品可以记录数量。在AstroPro中,构建上述一个订单系统的流程,如图1所示。 图1 开发订单系统流程图 步骤一:添加一个项目 项目是使用AstroPro核心业务的入口。在AstroPro中会为每个租户提供一个工作空间,您可以在工作空间中新建项目。 步骤二:新建一个服务 在AstroPro中,快速添加一个服务,新增服务中的配置均采用默认配置。此处创建的服务相当于为服务搭建了一个框架,如果需要实现某些特定的功能,还需要您根据自身业务需求进行业务建模。 步骤三:编辑服务 在已创建的服务中,根据自身业务需求,设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖。 步骤四:生成服务代码 基于配置的业务模型生成服务的基本代码。代码生成后,会提供一个压缩包,供您直接使用。 父主题: 订单系统服务开发示例
  • 操作步骤 进入购买Astro企业应用实例页面。 选择购买的规格(仅支持专业版),单击“立即购买”。 图1 选择购买规格 确认订单无误后,单击“去支付”。 图2 确认订单 选择支付方式,单击“确认”,完成支付。 订单支付成功后,单击“返回Astro企业应用控制台”。 在Astro企业应用控制台中,可以查看到Astro企业应用的实例状态。当“实例状态”变为“运行中”时,说明实例已安装好,可以正常使用Astro企业应用。 图3 查看实例状态
  • 规则介绍 自动续费可以减少手动续费的管理成本,避免因忘记手动续费而导致AstroPro无法使用。自动续费的规则如下所述: 以AstroPro的到期日计算第一次自动续费日期和计费周期。 AstroPro自动续费周期,以您选择的套餐版本时长为准。 AstroPro到期前均可开通自动续费,到期前7日凌晨3:00首次尝试自动续费,如果扣款失败,每天凌晨3:00尝试一次,直至AstroPro到期或者续费成功。 开通自动续费后,还可以手动续费AstroPro。手动续费后,自动续费仍然有效,在新的到期时间前的第7天开始扣款。 自动续费的到期前7日自动扣款属于系统默认配置,您也可以根据需要修改此扣款日,如到期前6日、到期前5日等。 更多关于自动续费的规则介绍,请参见自动续费规则说明。
  • 到期后影响 图1描述了AstroPro套餐包年/包月的各个阶段的状态。购买后,在计费周期内资源正常运行,此阶段为有效期。资源到期而未续费时,将陆续进入宽限期和保留期。 图1 包年/包月AstroPro套餐生命周期 到期预警 AstroPro套餐在包年/包月的到期前第7天内,系统将向用户推送到期预警消息。预警消息将通过邮件、短信和站内信的方式通知到华为账号的创建者。 到期后影响 当您包年/包月的AstroPro套餐到期未续费,首先会进入宽限期,资源状态变为“已过期”。宽限期内您可以正常访问AstroPro。 如果在宽限期内仍未续费AstroPro套餐,那么就会进入保留期,资源状态变为“已冻结”,您将无法对处于保留期的包年/包月AstroPro执行任何操作。 保留期到期后,若仍未续费,那么超过AstroPro基础版范围的功能会进入停用状态。
  • 操作步骤 登录云耀云服务器L实例控制台,单击云耀云服务器L实例资源卡片。 云耀云服务器L实例提供了多处重装系统入口,您可以在以下任意位置进行操作。 位置一:在页面右上方,选择更多操作,单击“切换镜像”。 位置二:在“概览”菜单“服务器操作”区域,选择更多操作,单击“切换镜像”。 位置三:在“云耀云服务器L实例”菜单,选择更多操作,单击“切换镜像”。 位置四:在“云耀云服务器L实例”菜单单击服务器名称。在“服务器详情”页右上角,选择更多操作,单击“切换镜像”。 进行切换操作系统的相关设置。 选择待切换的镜像。 其中,私有镜像是由您现有华为云或其他云平台的云服务器创建而来,或从第三方下载的镜像而来。列表显示您帐号下同区域所有的私有镜像。 对于私有镜像,请根据管理私有镜像章节,先了解私有镜像的约束限制、使用方法,再使用私有镜像。 选择Windows Server系统镜像时存在配置费用,在支付时系统使用代金券自动抵扣,镜像的实际费用为0。 云耀云服务器L实例和私有镜像必须属于同一个区域,否则云耀云服务器L实例无法选用镜像。例如,如果您想在“华北-北京四”区域创建实例,则仅能选取“华北-北京四”的镜像。如需跨区域使用镜像,请先将其他区域的镜像复制到当前区域。请参见跨区域复制镜像。 使用私有镜像创建或切换L实例时,私有镜像无法使用,提示“该镜像未安装重置密码插件或缺少onekey_resetpasswd特性标签,无法切换,请确保安装插件并添加特性标签后再切换。”。请根据私有镜像未安装重置密码插件或缺少onekey_resetpasswd特性标签,无法使用镜像创建/切换L实例怎么办?处理。 勾选“立即关机”。云耀云服务器L实例在“运行中”时显示此选项。 阅读并勾选“协议许可”。 单击“确定”。 切换操作系统后,云服务器自行启动。当云服务器再次为“运行中”状态时,表示切换操作系统结束。 切换操作系统后,云服务器的登录密码将被清除,请重新设置密码,用于登录切换后的操作系统。如果您切换的是应用镜像,请在应用镜像启动完毕后再重置密码,否则应用镜像可能启动异常。
共100000条