华为云用户手册

  • 请求参数 表2 请求参数 参数名称 类型 是否必选 说明 tag tag object 是 tag对象,请参见表3。 表3 tag对象 属性 类型 是否必选 说明 key String 是 标签名称。 不能为空。 长度不超过128个字符(当前控制台操作key长度不超过36个字符)。 由英文字母、数字、下划线、中划线、中文字符组成。 同一资源的key值不能重复。 value String 是 标签值。 长度不超过255个字符(当前控制台操作value长度不超过43个字符)。 由英文字母、数字、下划线、点、中划线、中文字符组成。
  • 响应示例 { "routetable": { "id": "05250d7e-0396-4fc9-9c9c-e4d5594784e4", "name": "rtb-vpc-l2cg-1", "routes": [ { "type": "local", "destination": "192.168.4.0/24", "nexthop": "-" }, { "type": "local", "destination": "192.168.1.0/24", "nexthop": "-" }, { "type": "local", "destination": "198.19.128.0/20", "nexthop": "-" }, { "type": "local", "destination": "127.0.0.0/8", "nexthop": "-" }, { "type": "local", "destination": "100.64.0.0/10", "nexthop": "-" } ], "subnets": [ { "id": "0e0faa8f-ea73-47aa-b919-8c133e98d5ac" }, { "id": "e007e005-10aa-4614-b439-c9a14e55130e" } ], "vpc_id": "7978e43c-f892-49d8-9fab-9bb90a51709b", "default": true, "tenant_id": "05e369f07a800f802f41c002632ba5f9", "created_at": "2022-12-15T02:56:40", "updated_at": "2022-12-15T02:56:40" }}
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 action 是 String 功能说明:操作标识 取值范围:delete tags 是 Array of ResourceTag objects 标签列表 表3 ResourceTag 参数 是否必选 参数类型 描述 key 是 String 功能说明:标签键 约束:同一资源的key值不能重复。 最小长度:0 最大长度:36 value 是 String 功能说明:标签值 最小长度:0 最大长度:43
  • 响应参数 状态码: 400 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 请求示例 example-1:创建资源标签 POST https://{Endpoint}/v2.0/{project_id}/security-groups/{security_group_id}/tags/action{ "action" : "create", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value3" } ]} example-2:删除资源标签 POST https://{Endpoint}/v2.0/{project_id}/security-groups/{security_group_id}/tags/action{ "action" : "delete", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value3" } ]}
  • 响应参数 状态码: 400 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 action 是 String 操作标识 tags 是 Array of ResourceTag objects 标签列表 表3 ResourceTag 参数 是否必选 参数类型 描述 key 是 String 功能说明:标签键 约束:同一资源的key值不能重复。 最小长度:0 最大长度:36 value 是 String 功能说明:标签值 最小长度:0 最大长度:43
  • 请求示例 example-1:删除资源标签 POST https://{Endpoint}/v2.0/{project_id}/security-groups/{security_group_id}/tags/action{ "action" : "delete", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value3" } ]} example-2:批量创建资源标签 POST https://{Endpoint}/v2.0/{project_id}/security-groups/{security_group_id}/tags/action{ "action" : "create", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value3" } ]}
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 action 是 String 功能说明:操作标识 取值范围:filter(过滤),count(查询总条数) limit 否 Integer 功能说明:查询记录数 取值范围:1-1000 约束:action为count时此参数不生效;action为filter时默认为1000 offset 否 Integer 功能说明:索引位置, 从offset指定的下一条数据开始查询。 查询第一页数据时,不需要传入此参数,查询后续页码数据时,将查询前一页数据时响应体中的值带入此参数 约束:action为count时无此参数;action为filter时默认为0;必须为数字,不能为负数 matches 否 Array of Match objects 功能说明:搜索字段,key为要匹配的字段,value为匹配的值 约束:当前仅支持resource_name tags 否 Array of ListTag objects 包含标签,最多包含10个key,每个key下面的value最多10个,结构体不能缺失,key不能为空或者空字符串。Key不能重复,同一个key中values不能重复 表3 Match 参数 是否必选 参数类型 描述 key 是 String 键。当前仅限定为resource_name value 是 String 值。每个值最大长度255个unicode字符,不能包含$ - . /等特殊字符。 最大长度:255 表4 ListTag 参数 是否必选 参数类型 描述 key 是 String 功能说明:标签键 约束:key不能为空 最小长度:1 最大长度:127 values 是 Array of strings 功能描述:标签值列表。 如果values为空列表,则表示any_value。value之间为或的关系。
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 resources Array of ListResourceResp objects 资源列表 total_count Integer 资源数量 表6 ListResourceResp 参数 参数类型 描述 resource_detail Object 资源详情。 资源对象,用于扩展。默认为空 resource_id String 资源ID resource_name String 资源名称,没有默认为空字符串 tags Array of ResourceTag objects 标签列表,没有标签默认为空数组 表7 ResourceTag 参数 参数类型 描述 key String 功能说明:标签键 约束:同一资源的key值不能重复。 最小长度:0 最大长度:36 value String 功能说明:标签值 最小长度:0 最大长度:43 状态码: 400 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表10 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表11 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表12 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表13 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 请求示例 查询安全组资源实例,action为filter时请求体。 POST https://{Endpoint}/v2.0/{project_id}/security-groups/resource_instances/action{ "offset" : "0", "limit" : "100", "action" : "filter", "matches" : [ { "key" : "resource_name", "value" : "resource1" } ], "tags" : [ { "key" : "key1", "values" : [ "*value1", "value2" ] } ]} example-2:action为count时请求体 POST https://{Endpoint}/v2.0/{project_id}/security-groups/resource_instances/action{ "action" : "count", "tags" : [ { "key" : "key1", "values" : [ "value1", "value2" ] }, { "key" : "key2", "values" : [ "value1", "value2" ] } ], "matches" : [ { "key" : "resource_name", "value" : "resource1" } ]}
  • 响应示例 状态码: 200 请求体action为filter时返回资源tag列表,action为count时返回tag总数 { "resources" : [ { "resource_id" : "cdfs_cefs_wesas_12_dsad", "resource_name" : "resouece1", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value1" } ] } ], "total_count" : 1000}
  • 响应参数 状态码: 400 表2 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表3 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 tags Array of ListTag objects tag对象列表 表3 ListTag 参数 参数类型 描述 key String 功能说明:标签键 约束:key不能为空 最小长度:1 最大长度:127 values Array of strings 功能描述:标签值列表。 如果values为空列表,则表示any_value。value之间为或的关系。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 响应参数 状态码: 400 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 支持的授权项 策略包含系统策略和自定义策略,如果系统策略不满足授权要求,管理员可以创建自定义策略,并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应,授权项列表说明如下: 权限:允许或拒绝某项操作。 对应API接口:自定义策略实际调用的API接口。 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。 IAM 项目(Project)/企业项目(Enterprise Project):自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略,可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。关于IAM项目与企业项目的区别,详情请参见:IAM与企业管理的区别。 “√”表示支持,“x”表示暂不支持。
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 tags Array of ResourceTag objects tag对象列表 表3 ResourceTag 参数 参数类型 描述 key String 功能说明:标签键 约束:同一资源的key值不能重复。 最小长度:0 最大长度:36 value String 功能说明:标签值 最小长度:0 最大长度:43 状态码: 400 表4 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 401 表5 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 403 表6 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 404 表7 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 409 表8 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999 状态码: 500 表9 响应Body参数 参数 参数类型 描述 code String 请求返回的错误码 message String 请求返回的错误信息 最小长度:1 最大长度:999
  • 操作步骤 创建VPC。 发送“POST https://VPC的Endpoint/v1/{project_id}/vpcs”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下,其中cidr字段需要提前进行网络规划。 { "vpc": { "name": "vpc", //虚拟私有云名称 "cidr": "192.168.0.0/16" //虚拟私有云下可用子网的范围 }} 查看请求响应结果。 请求成功时,响应参数如下,id就是vpc_id。 { "vpc": { "id": "b6684a27-b049-407d-90b4-c9551f2390e1", "name": "vpc", "cidr": "192.168.0.0/16", "status": "CREATING", "routes": [] }} 请求异常时,错误码请参见错误码。 查询VPC详情。 发送“GET https://VPC的Endpoint/v1/{project_id}/vpcs/{vpc_id}”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 查看请求响应结果。 请求成功时,响应参数如下,id就是vpc_id。 { "vpc": { "id": "b6684a27-b049-407d-90b4-c9551f2390e1", "name": "vpc", "description": "", "cidr": "192.168.0.0/16", "status": "OK", "enterprise_project_id": "0" , "routes": [] }} 请求异常时,错误码请参见错误码。 指定VPC创建子网。 发送“POST https://VPC的Endpoint/v1/{project_id}/subnets”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下,其中dnsList参数参见华为云提供的内网 DNS地址 是多少?,availability_zone参数可通过地区和终端节点获取。 {"subnet": {"name": "subnet","description": "","cidr": "192.168.0.0/24","gateway_ip": "192.168.0.1","dhcp_enable": true,"dnsList": ["114.xx.xx.114", "114.xx.xx.115"],"availability_zone": "aa-bb-cc","vpc_id": "b6684a27-b049-407d-90b4-c9551f2390e1"}} 查看请求响应结果。 请求成功时,响应参数如下: {"subnet": {"id": "4779ab1c-7c1a-44b1-a02e-93dfc361b32d","name": "subnet","description": "","cidr": "192.168.0.0/24","dnsList": ["114.xx.xx.114", "1114.xx.xx.115"],"status": "UNKNOWN","vpc_id": "b6684a27-b049-407d-90b4-c9551f2390e1","gateway_ip": "192.168.0.1","dhcp_enable": true,"primary_dns": "114.xx.xx.114","secondary_dns": "114.xx.xx.115","availability_zone": "aa-bb-cc","neutron_network_id": "4779ab1c-7c1a-44b1-a02e-93dfc361b32d","neutron_subnet_id": "213cb9d-3122-2ac1-1a29-91ffc1231a12","extra_dhcp_opts": []}} 请求异常时,错误码请参见错误码。 查询子网详情。 发送“GET https://VPC的Endpoint/v1/{project_id}/subnets/{subnet_id}”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 查看请求响应结果。 {"subnet": {"id": "4779ab1c-7c1a-44b1-a02e-93dfc361b32d","name": "subnet","description": "","cidr": "192.168.20.0/24","dnsList": ["114.xx.xx.114", "114.xx.xx.115"],"status": "ACTIVE","vpc_id": "b6684a27-b049-407d-90b4-c9551f2390e1","gateway_ip": "192.168.20.1","ipv6_enable": false,"dhcp_enable": true,"primary_dns": "114.xx.xx.114","secondary_dns": "114.xx.xx.115","availability_zone": "aa-bb-cc","neutron_network_id": "4779ab1c-7c1a-44b1-a02e-93dfc361b32d","neutron_subnet_id": "213cb9d-3122-2ac1-1a29-91ffc1231a12","extra_dhcp_opts": []}}
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 详细的公共请求消息头字段请参见表3。 表3 公共请求消息头 名称 描述 是否必选 示例 Host 请求的服务器信息,从服务API的URL中获取。值为hostname[:port]。端口缺省时使用默认的端口,https的默认端口为443。 否 使用AK/SK认证时该字段必选。 code.test.com or code.test.com:443 Content-Type 消息体的类型(格式)。推荐用户使用默认值application/json,有其他取值时会在具体接口中专门说明。 是 application/json Content-Length 请求body长度,单位为Byte。 否 3495 X-Project-Id project id,项目编号。请参考获取项目ID章节获取项目编号。 否 如果是专属云场景采用AK/SK认证方式的接口请求,或者多project场景采用AK/SK认证的接口请求,则该字段必选。 e9993fc787d94b6c886cbaa340f9c0f4 X-Auth-Token 用户Token。 用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 请求响应成功后在响应消息头(Headers)中包含的“X-Subject-Token”的值即为Token值。 否 使用Token认证时该字段必选。 注:以下仅为Token示例片段。 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ API同时支持使用AK/SK认证,AK/SK认证使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参见认证鉴权的“AK/SK认证”。 对于管理员创建IAM用户接口,使用AK/SK方式认证时,添加消息头后的请求如下所示。 1234 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/usersContent-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=****************
  • 请求消息体(可选) 该部分可选。请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-Type对应,传递除请求消息头之外的内容。若请求消息体中的参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于管理员创建IAM用户接口,您可以从接口的请求部分看到所需的请求参数及参数说明,将消息体加入后的请求如下所示,其中加粗的字段需要根据实际值填写。 accountid为IAM用户所属的账号ID。 username为要创建的IAM用户名。 email为IAM用户的邮箱。 **********为IAM用户的登录密码。 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/usersContent-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=**************** { "user": { "domain_id": "accountid", "name": "username", "password": "**********", "email": "email", "description": "IAM User Description" } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中的“X-Subject-Token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务您正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。 当资源不存在的时候,PATCH可能会去创建一个新的资源。 在管理员创建IAM用户的URI部分,您可以看到其请求方法为“POST”,则其请求为: 1 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users
  • 响应示例 { "vpc": { "id": "99d9d709-8478-4b46-9f3f-2206b1023fd3", "name": "vpc", "description": "test", "cidr": "192.168.0.0/16", "status": "OK", "enterprise_project_id": "0" , "routes": [], "tenant_id": "087679f0aa80d32a2f4ec0172f5e902b", "created_at": "2022-12-15T02:25:11", "updated_at": "2022-12-15T02:25:11"}}
  • 请求URI 请求URI由如下部分组成: {URI-scheme}://{Endpoint}/{resource-path}?{query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器 域名 或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。 例如IAM服务在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据。 例如您需要创建IAM用户,由于IAM为全局服务,则使用任一区域的Endpoint,比如“华北-北京四”区域的Endpoint(iam.cn-north-4.myhuaweicloud.com),并在管理员创建IAM用户的URI部分找到resource-path(/v3.0/OS-USER/users),拼接起来如下所示。 1 https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users 图1 URI示意图 为方便查看,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 操作步骤 创建IPv6虚拟IP。 发送“POST https://VPC的Endpoint/v2.0/ports”。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下,其中vip所在子网需与E CS 同子网,subnet_id需要指定为IPv6的subnets对应ID。 { "port":{ "network_id":"b0ad9b80-bb16-4550-8ce0-514f949e35ee", "device_owner":"neutron:VIP_PORT", "name":"ipv6_vip_port_test", "fixed_ips":[ { "subnet_id":"33ce2628-6246-4e3a-859f-99cd753ff704" } ] }} 查看请求响应结果。 请求成功时,响应参数如下: { "port": { "id": "d92cfee7-9ebe-4483-85c1-00ffb1e45cd8", "name": "ipv6_vip_port_test", "status": "DOWN", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "33ce2628-6246-4e3a-859f-99cd753ff704", "ip_address": "2001:db8:a583:21d:2e25:9403:6f3d:4664" } ], "mac_address": "fa:16:3e:99:2e:92", "network_id": "b0ad9b80-bb16-4550-8ce0-514f949e35ee", "tenant_id": "060576782980d5762f9ec014dd2f1148", "project_id": "060576782980d5762f9ec014dd2f1148", "device_id": "", "device_owner": "neutron:VIP_PORT", "security_groups": [], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:profile": {}, "port_security_enabled": true, "created_at": "2020-12-15T03:01:07", "updated_at": "2020-12-15T03:01:07" }} 请求异常时,错误码请参见错误码。 通过云服务器的ID查询网卡信息,fixed_ips中存在IPv4地址和IPv6地址。 发送“GET https://VPC的Endpoint/v2.0/ports?device_id={ecs_id}&network_id={network_id}” 在Request Header中增加“X-Auth-Token”。 查看请求响应结果。 请求成功时,响应参数如下: { "ports": [{ "id": "47b4cd46-cfe5-415d-957f-5068189dce94", "name": "", "status": "ACTIVE", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "0dd17989-1c23-4501-8dc1-40e4085f793f", "ip_address": "172.16.0.191" }, { "subnet_id": "33ce2628-6246-4e3a-859f-99cd753ff704", "ip_address": "2001:db8:a583:21d:dfc0:d452:e9ab:65cf" } ], "mac_address": "fa:16:3e:1e:f7:9a", "network_id": "b0ad9b80-bb16-4550-8ce0-514f949e35ee", "tenant_id": "060576782980d5762f9ec014dd2f1148", "project_id": "060576782980d5762f9ec014dd2f1148", "device_id": "ab7ca781-66bf-48a8-814b-1568cb393a38", "device_owner": "compute:xxx", "security_groups": [ "0552091e-b83a-49dd-88a7-4a5c86fd9ec3" ], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": { "primary_interface": true }, "binding:profile": {}, "port_security_enabled": true, "dns_assignment": [ { "hostname": "ip-172-16-0-191", "ip_address": "172.16.0.191", "fqdn": "ip-172-16-0-191.br-iaas-odin1.compute.internal." } ], "dns_name": "ip-172-16-0-191", "created_at": "2020-11-19T13:32:37", "updated_at": "2020-11-19T13:33:50" }] } 请求异常时,错误码请参见错误码。 将云服务器与虚拟IP绑定。 发送“PUT https://VPC的Endpoint/v2.0/ports/{port_id}”。port_id为上面创建的IPv6虚拟IP对应的port_id。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下,ip_address为2查询出的云服务器的网卡的IPv6 ip。 { "port": { "allowed_address_pairs": [{ "ip_address": "2001:db8:a583:21d:dfc0:d452:e9ab:65cf" }] } } 查看请求响应结果。 请求成功时,响应参数如下: { "port": { "id": "d92cfee7-9ebe-4483-85c1-00ffb1e45cd8", "name": "ipv6_vip_port_test", "status": "DOWN", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "33ce2628-6246-4e3a-859f-99cd753ff704", "ip_address": "2001:db8:a583:21d:2e25:9403:6f3d:4664" } ], "mac_address": "fa:16:3e:99:2e:92", "network_id": "b0ad9b80-bb16-4550-8ce0-514f949e35ee", "tenant_id": "060576782980d5762f9ec014dd2f1148", "project_id": "060576782980d5762f9ec014dd2f1148", "device_id": "", "device_owner": "neutron:VIP_PORT", "security_groups": [], "extra_dhcp_opts": [], "allowed_address_pairs": [{ "ip_address": "2001:db8:a583:21d:dfc0:d452:e9ab:65cf " }], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:profile": {}, "port_security_enabled": true, "created_at": "2020-12-15T03:01:07", "updated_at": "2020-12-15T03:01:07" }} 请求异常时,错误码请参见错误码。 关闭云服务器网卡的源/目的检查。 发送“PUT https://VPC的Endpoint/v2.0/ports/{port_id}”。port_id为2查询到的网卡ID。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下:ip_address为1.1.1.1/0查询出的云服务器的网卡ip。 {"port": {"allowed_address_pairs": [{"ip_address": "1.1.1.1/0"}]}} 查看请求响应结果。 请求成功时,响应参数如下: { "port": { "id": "47b4cd46-cfe5-415d-957f-5068189dce94", "name": "", "status": "ACTIVE", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "0dd17989-1c23-4501-8dc1-40e4085f793f", "ip_address": "172.16.0.191" }, { "subnet_id": "33ce2628-6246-4e3a-859f-99cd753ff704", "ip_address": "2001:db8:a583:21d:dfc0:d452:e9ab:65cf" } ], "mac_address": "fa:16:3e:1e:f7:9a", "network_id": "b0ad9b80-bb16-4550-8ce0-514f949e35ee", "tenant_id": "060576782980d5762f9ec014dd2f1148", "project_id": "060576782980d5762f9ec014dd2f1148", "device_id": "ab7ca781-66bf-48a8-814b-1568cb393a38", "device_owner": "compute:xxx", "security_groups": [ "0552091e-b83a-49dd-88a7-4a5c86fd9ec3" ], "extra_dhcp_opts": [], "allowed_address_pairs": [{ "ip_address": "1.1.1.1/0" }], "binding:vnic_type": "normal", "binding:vif_details": { "primary_interface": true }, "binding:profile": {}, "port_security_enabled": true, "dns_assignment": [ { "hostname": "ip-172-16-0-191", "ip_address": "172.16.0.191", "fqdn": "ip-172-16-0-191.br-iaas-odin1.compute.internal." } ], "dns_name": "ip-172-16-0-191", "created_at": "2020-11-19T13:32:37", "updated_at": "2020-11-19T13:33:50" } } 请求异常时,错误码请参见错误码。
  • Lite Cluster使用流程 ModelArts Lite Cluster面向k8s资源型用户,提供托管式k8s集群,并预装主流AI开发插件以及自研的加速插件,以云原生方式直接向用户提供AI Native的资源、任务等能力,用户可以直接操作资源池中的节点和k8s集群。本文旨在帮助您了解Lite Cluster的基本使用流程,帮助您快速上手。 图1 资源池架构图 如图所示为Lite Cluster架构图。Lite Cluster基于CCE服务实现对资源节点的管理,因此,用户首先需要购买一个CCE集群。在ModelArts控制台购买Lite Cluster集群时,ModelArts的资源池会先纳管这个CCE集群,然后根据用户设置的规格创建相应的计算节点(BMS/ECS)。随后,CCE会对这些节点进行纳管,并且ModelArts会在CCE集群中安装npuDriver、os-node-agent等插件。完成Cluster资源池的购买后,您即可对资源进行配置,并将数据上传至存储云服务中。当您需要使用集群资源时,可以使用kubectl工具或k8s API来下发作业。此外,ModelArts还提供了扩缩容、驱动升级等功能,方便您对集群资源进行管理。 图2 使用流程 推荐您根据以下使用流程对Lite Cluster进行使用。 资源开通:您需要开通资源后才可使用Lite Cluster,在开通资源前,请确保完成所有相关准备工作,包括申请开通所需的规格和进行权限配置。随后,在ModelArts控制台上购买Lite Cluster资源。请参考Lite Cluster资源开通。 资源配置:完成资源购买后,需要对网络、存储、驱动进行相关配置。请参考Lite Cluster资源配置。 资源使用:完成资源配置后,您可以使用集群资源运行训练和推理训练,具体案例可参考Lite Cluster资源使用。 资源管理:Lite Cluster提供扩缩容、驱动升级等管理手段,您可在ModelArts控制台上对资源进行管理。请参考Lite Cluster资源管理。 表1 相关名词解释 名词 含义 容器 容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知。Docker是第一个使容器能在不同机器之间移植的系统。它不仅简化了打包应用的流程,也简化了打包应用的库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包可以被用来在任何其他运行Docker的机器上使用。 Kubernetes Kubernetes是一个开源的容器编排部署管理平台,用于管理云平台中多个主机上的容器化应用。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。使用Lite Cluster需要用户具备一定的Kubernetes知识背景,您可参考Kubernetes基础知识。 CCE 云容器引擎(Cloud Container Engine,简称CCE)是一个企业级的Kubernetes集群托管服务,支持容器化应用的全生命周期管理,为您提供高度可扩展的、高性能的云原生应用部署和管理方案。CCE官网文档可参考云容器引擎。 BMS 裸金属服务器(Bare Metal Server)是一款兼具虚拟机弹性和物理机性能的计算类服务,为您和您的企业提供专属的云上物理服务器,为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能以及数据安全。 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。 os-node-agent ModelArts Lite k8s Cluster节点默认会安装os-node-agent插件,用于对节点进行管理,例如: 驱动升级:通过os-node-agent插件下载驱动文件并进行驱动版本升级、回退。 故障检测:通过os-node-agent插件在系统内周期性巡检故障特征,及时发现节点故障。 指标采集:通过os-node-agent插件采集GPU/NPU利用率指标等重要的观测数据,上报到租户侧 AOM 。 节点运维:授权后,通过os-node-agent插件执行诊断脚本,进行故障定位定界。 父主题: Lite Cluster使用前必读
  • Lite Cluster高危操作一览表 当您在CCE、ECS或BMS服务控制台直接操作ModelArts Lite Lite Cluster资源时,可能会导致资源池部分功能异常。下表可帮助您定位异常出现的原因,风险操作包括但不限于以下内容。 高危操作风险等级说明: 高:对于可能直接导致业务失败、数据丢失、系统不能维护、系统资源耗尽的高危操作。 中:对于可能导致安全风险及可靠性降低的高危操作。 低:高、中风险等级外的其他高危操作。 表1 操作及其对应风险 操作对象 操作名称 风险描述 风险等级 应对措施 集群 升级、修改、休眠集群、删除集群等。 可能影响ModelArts侧基本功能,包括但不限于资源池管理、节点管理、扩缩容、驱动升级等。 高 不可恢复。 节点 退订、移除、关机、污点管理、切换/重装操作系统等。 可能影响ModelArts侧基本功能,包括但不限于节点管理、扩缩容、驱动升级、带本地盘机型的本地盘数据丢失等。 高 不可恢复。 修改网络安全组 可能影响ModelArts侧基本功能,包括但不限于节点管理、扩缩容、驱动升级等。 中 改回原有内容。 网络 修改/删除集群关联网段。 影响ModelArts侧基本功能,包括但不限于节点管理、扩缩容、驱动升级等。 高 不可恢复。 插件 升级、卸载gpu-beta插件。 可能导致GPU驱动使用异常。 中 回退版本、重装插件。 升级、卸载huawei-npu插件。 可能导致NPU驱动使用异常。 中 回退版本、重装插件。 升级、卸载volcano插件。 可能导致作业调度异常。 中 回退版本、重装插件。 卸载ICAgent插件。 可能导致日志、监控功能异常。 中 回退版本、重装插件。 helm 升级、回退、卸载os-node-agent。 导致驱动升级、故障检测、指标采集、节点运维功能异常。 高 联系华为云技术支持重装os-node-agent。 升级、回退、卸载rdma-sriov-dev-plugin。 可能影响容器内使用RDMA网卡。 高 联系华为云技术支持重装rdma-sriov-dev-plugin。 父主题: Lite Cluster使用前必读
  • 配置Lite Cluster存储 如果没有挂载任何外部存储,此时可用存储空间根据dockerBaseSize的配置来决定,可访问的存储空间比较小,因此建议通过挂载外部存储空间解决存储空间受限问题。 容器中挂载存储有多种方式,不同的场景下推荐的存储方式不一样,详情如表1所示。容器存储的基础知识了解请参见存储基础知识,有助您理解本章节内容。您可查看数据盘空间分配说明,了解节点数据盘空间分配的情况,以便您根据业务实际情况配置数据盘大小。 表1 容器挂载存储的方式及差异 容器挂载存储的方式 使用场景 特点 挂载操作参考 EmptyDir 适用于训练缓存场景。 Kubernetes的临时存储卷,临时卷会遵从Pod的生命周期,与Pod一起创建和删除。 使用临时存储路径 HostPath 适用于以下场景: 容器工作负载程序生成的日志文件需要永久保存。 需要访问宿主机上Docker引擎内部数据结构的容器工作负载。 节点存储。多个容器可能会共享这一个存储,会存在写冲突的问题。 Pod删除后,存储不会清理。 使用主机路径 OBS 适用于训练数据集的存储。 对象存储。常用OBS SDK进行样本数据下载。存储量大,但是离节点比较远,直接训练速度会比较慢,通常会先将数据拉取到本地cache,然后再进行训练任务。 静态挂载 动态挂载 SFS Turbo 适用于海量小文件业务场景。 提供posix协议的文件系统; 需要和资源池在同一个VPC下或VPC互通; 价格较高。 静态挂载 动态挂载:不支持 SFS 适用于多读多写场景的持久化存储。 适用大容量扩展以及成本敏感型的业务场景,包括 媒体处理 、内容管理、大数据分析和分析工作负载程序等。 SFS容量型文件系统不适合海量小文件业务。 静态挂载 动态挂载 EVS 适用于Notebook场景,开发过程的数据持久化。 每个云盘只能在单个节点挂载。 存储大小根据云硬盘的大小而定。 静态挂载 动态挂载 父主题: Lite Cluster资源配置
  • 操作步骤 拉取镜像。本测试镜像为bert_pretrain_mindspore:v1,已经把测试数据和代码打进镜像中。 docker pull swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1docker tag swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1 bert_pretrain_mindspore:v1 在主机上新建config.yaml文件。 config.yaml文件用于配置pod,本示例中使用sleep命令启动pod,便于进入pod调试。您也可以修改command为对应的任务启动命令(如“python inference.py”),任务会在启动容器后执行。 config.yaml内容如下: apiVersion: apps/v1kind: Deploymentmetadata: name: yourapp labels: app: infersspec: replicas: 1 selector: matchLabels: app: infers template: metadata: labels: app: infers spec: schedulerName: volcano nodeSelector: accelerator/huawei-npu: ascend-1980 containers: - image: bert_pretrain_mindspore:v1 # Inference image name imagePullPolicy: IfNotPresent name: mindspore command: - "sleep" - "1000000000000000000" resources: requests: huawei.com/ascend-1980: "1" # 需求卡数,key保持不变。Number of required NPUs. The maximum value is 16. You can add lines below to configure resources such as memory and CPU. limits: huawei.com/ascend-1980: "1" # 限制卡数,key保持不变。The value must be consistent with that in requests. volumeMounts: - name: ascend-driver #驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons #驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: hccn #驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi #npu-smi mountPath: /usr/local/sbin/npu-smi - name: localtime #The container time must be the same as the host time. mountPath: /etc/localtime volumes: - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: localtime hostPath: path: /etc/localtime 根据config.yaml创建pod。 kubectl apply -f config.yaml 检查pod启动情况,执行下述命令。如果显示“1/1 running”状态代表启动成功。 kubectl get pod -A 进入容器,{pod_name}替换为您的pod名字(get pod中显示的名字),{namespace}替换为您的命名空间(默认为default)。 kubectl exec -it {pod_name} bash -n {namespace} 激活conda模式。 su - ma-user //切换用户身份conda activate MindSpore //激活 MindSpore环境 创建测试代码test.py。 from flask import Flask, requestimport json app = Flask(__name__)@app.route('/greet', methods=['POST'])def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4)@app.route('/goodbye', methods=['GET'])def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n'@app.route('/', methods=['POST'])def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data))# host must be "0.0.0.0", port must be 8080if __name__ == '__main__': app.run(host="0.0.0.0", port=8080) 执行代码,执行后如下图所示,会部署一个在线服务,该容器即为服务端。 python test.py 图2 部署在线服务 在XShell中新建一个终端,参考步骤5~7进入容器,该容器为客户端。执行以下命令验证自定义镜像的三个API接口功能。当显示如图所示时,即可调用服务成功。 curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/greetcurl -X GET 127.0.0.1:8080/goodbye 图3 访问在线服务 limit/request配置cpu和内存大小,已知单节点Snt9B机器为:8张Snt9B卡+192u1536g,请合理规划,避免cpu和内存限制过小引起任务无法正常运行。
  • 在续费管理页面开通自动续费 登录管理控制台。 单击控制台页面上方“费用与成本”,在下拉菜单中选择“续费管理”。 进入“续费管理”页面。 自定义查询条件。 可在“自动续费项”页签查询已经开通自动续费的资源。 可对“手动续费项”、“到期转按需项”、“到期不续费项”页签的资源开通自动续费。 为包年/包月资源开通自动续费。 单个资源开通自动续费:选择需要开通自动续费的弹性数据库安全服务,单击“操作”列“开通自动续费”。 批量资源开通自动续费:选择需要开通自动续费的服务器,单击列表左上角的“开通自动续费”。 选择续费时长,并根据需要设置自动续费次数,单击“开通”。
  • 通过企业项目进行成本管理 开通企业项目。 只有实名认证为企业的客户才可以开通企业项目,详细步骤请参见如何开通企业项目。 创建企业项目。 您可以根据部门或者业务,创建对应的企业项目,详细步骤请参见创建企业项目。 购买数据库安全服务时选择企业项目。 在购数据库安全审计页面,您可以选择已启用的企业项目,新购数据库安全将按此企业项目进行成本分配。 通过企业项目维度查看成本分析。 通过企业项目查看成本数据时,建议基于摊销成本进行数据汇总,详细步骤请参见通过企业项目维度查看成本分配。 如果您还想了解更多关于成本相关的介绍,请参见:成本中心。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全