• [技术干货] 【DevCloud · 敏捷智库】如何拆分用户故事
    提起用户故事拆分,我们听得最多的就是INVEST原则(关于INVEST原则可以参考文章“用户故事等于需求说明”——你一定没有写好用户故事),但是拿到一个较大的用户故事时,该如何拆分才能使得它满足Small的原则呢?这个是很多人面临的问题,今天和大家一起讨论一下。 首先,拆分可以参考以下流程:评估待拆分用户故事-按方法拆分-评估拆分结果。(文末有彩蛋,不要错过)评估待拆分用户故事拆分前,我们需要知道手中的用户故事是否需要拆分,就是目前是否已经符合了Small的原则。我们推荐一个用户故事在1-2天内能完成,最多不超过3天,则符合Small原则。有些地方给出的说法是1/5-1/10团队速率,这个算法和你每个迭代天数以及团队成员数有关系,所以我个人还是喜欢简单的说,1-2个工作日能完成算Small。在这种情况下如果你的用户故事已经符合了INVEST其他原则的话,那就没必要拆成多个用户故事了,因为再拆就增加了管理成本(这里不包括拆成多个task,task可以再多拆分的)。好,当你已经根据上面评估了用户故事,发现依旧需要拆分的话,那么可以按下面方法进行拆分。按方法拆分目前业界比较好的方法是Richard Lawrence的方法,原文请参考https://agileforall.com/patterns-for-splitting-user-stories/,下图英文原版为Lawrence创作,中文版是姜信宝为Lawrence翻译的,此处引用并对二人致以感谢。图片来自Lawrence官方原文里有作者的切分方式,这里我只根据我的理解选择更熟悉的例子,同时合并了其中一些方法。 方法一:按流程拆分作为有爱心的有财力的中国人,我可以从国外进口口罩捐给武汉。这个用户故事涉及的过程就很多了,需要找到国外可靠的口罩供应商,然后付款,运回国内,再送到武汉捐给指定医院等等。我们可以先分析整个用户故事成一个一个连续的流程,如果每个小流程作为一个用户故事,能对用户有价值,那我们就先这么拆开。结果比如下面l  作为有爱心的有财力的中国人,我可以寻找个国外的朋友帮忙寻找可靠的口罩来源。l  作为有爱心的有财力的中国人,我可以在这个来源付款购买指定数量的口罩。l  作为有爱心的有财力的中国人,我可以将口罩从外国运回国内。l  作为有爱心的有财力的中国人,我可以将口罩从国内某地送到武汉捐给医院。方法二:按操作种类划分作为有爱心的中国人,我可以在口罩购买平台上操作以完成购买。如果是一个业务更简单的系统的话,对应的就是增删改查动作。这里的操作会复杂些,把每个操作拆分成一个用户故事即可。l  作为有爱心的中国人,我可以在口罩购买平台上购买。l  作为有爱心的中国人,我可以在口罩购买平台上退货。l  作为有爱心的中国人,我可以在口罩购买平台上查询。l  作为有爱心的中国人,我可以在口罩购买平台上卖货。方法三:拆出主要的工作作为有爱心的中国人,我可以购买N95/KN95/医用外科三种口罩进行捐赠。整个购买捐赠流程就很复杂了,还要买不同种类的口罩,明显这三种口罩可以拆成三个故事,同时考虑一点,就是无差别的完成购买一个口罩进行捐赠的故事后,剩下的两种需要的工作量就会很少了,同时这里如果没有区分三种口罩的优先级的话,我们可以先拆出一个作为主要工作,再看剩下的两个是合到一起还是继续拆分。比如拆成如下l  作为有爱心的中国人,我可以购买其中一种(N95/KN95/医用外科)口罩进行捐赠。(3个故事点)l  作为有爱心的中国人,我可以购买另外一种(N95/KN95/医用外科)口罩进行捐赠。(1个故事点)l  作为有爱心的中国人,我可以购买最后一种(N95/KN95/医用外科)口罩进行捐赠。(1个故事点)如果后两个都比较小,合道一起也没问题的话,也可以拆成如下l  作为有爱心的中国人,我可以购买其中一种(N95/KN95/医用外科)口罩进行捐赠。(3个故事点)l  作为有爱心的中国人,我可以购买另外两种(N95/KN95/医用外科)口罩进行捐赠。(2个故事点)方法四:业务规则分类作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉。这里购买的口罩可以选择多种类型,价格不一样,效果不一样,这就是我们要区分的不同的业务规则,拆分后可能如下l  作为有爱心的中国人,我可以购买三十万个最贵的口罩捐赠给武汉。l  作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉,不区分口罩种类。l  作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉,只要N95和KN95级别的。方法五:简单到复杂作为有爱心的中国人,我可以购买口罩捐赠给武汉。简单一句话,涉及的业务可以是购买何种口罩,如何捐赠,给什么机构等,明显不能作为一个故事进行交付,需要拆分。但是业务太复杂,一开始无法全都想清楚,可以先做最基本的,然后再根据方法四的业务规则分类进行扩展。l  (简单)作为有爱心的中国人,我可以购买口罩捐赠给武汉。l  (复杂)在XXX日期购买。l  (复杂)通过不同的运输通道送到武汉。l  (复杂)捐赠给XXX不同的医院。方法六:推迟性能实现作为有爱心的中国人,我可以明天购买口罩捐赠给武汉。明天这个性能太高了,实现起来可能比较困难,我们先实现购买和捐赠,不考虑哪天能完成,再考虑明天这个性能要求。l  作为有爱心的中国人,我可以购买口罩捐赠给武汉。l  作为有爱心的中国人,我可以明天购买口罩并完成捐赠给武汉。方法七:探针作为有爱心的中国人,我可以明天购买口罩捐赠给武汉。这个可能对我来说太复杂了,完全不知道该买什么类型的口罩,买30万个大概多少钱,渠道买比较靠谱,怎么捐赠,给哪个机构,如果现在就强行做计划的话,可能最后发现,我手上的钱是不够的,或者周期太长,到最后才发现的话,会损失很多。所以一般都是先去探探路。l  调查市场上口罩类型、价格、渠道。l  调查捐赠方式,靠谱的接受机构。l  实施捐赠(需要等前面的工作完毕后重新评估) 评估拆分结果拆分完毕后,再用INVEST原则进行评估,如果符合,那就没问题了。但是有的时候会不符合其中某些原则,比如独立性,但是实际业务就只能这样。比如上面提到的方法三的拆分,这个是必然有关系的,不可能先做第二个用户故事后做第一个。这时只能选择不符合独立性原则。 彩蛋看了上面这么多拆分方法,是否迷糊了?是否每次拆分都要对照上面的方法一个一个的试?其实不需要的,根据经验,拆分用户故事最重要的是,先捋清楚整个业务(划重点,这个最重要,之前很多例子你感觉切分的不如作者好,都是因为对举例的业务不熟悉),然后按照最重要的原则-纵着切即可。如下图所示。图片来自网络纵着切的意思是,每个切分出来的需求是个单独对用户有价值的,就像上图中切出来的一块蛋糕,是独立的个体,包括这一块蛋糕的所有层次以及上面的小人。对比的横着切的意思是所有的需求放一起将前台、后台、数据库操作这样切分出来,结果就是先用几个迭代将所有的需求前台工作做完了,再开发后台的,这样无法尽早交付有价值的需求,比如先将蛋糕上上所有的小人都切下来了。如果业务比较复杂,那么就以MVP的思想,先交付一个简单的端到端的业务,再慢慢扩展复杂程度。如果过于复杂,就尝试探针方法。如果捋清楚了需求,尝试纵着切,发现很难下手,这时候再来看上面提到的Lawrence的七个方法,寻求帮助。
  • [技术干货] 【DevCloud · 敏捷智库】“用户故事等于需求说明”——你一定没有写好用户故事
    背景某公司在二手房交易平台项目中采用了敏捷开发模式,项目的一个需求为通过输入关键字可以为用户检索对应的房源信息。产品经理将这个需求编写成用户故事如下:“我想通过输入一些词,查询相关的房源信息”开发团队拿到用户故事后,有很多疑问:输入的信息包含哪些?搜索完成后,给用户展示什么信息?在展示效果上,只做一个查询房源信息的搜索框,能否满足用户需求?这条用户故事要实现得价值是什么?很多团队都遇到过这样的情况。用户故事可以帮助开发人员更好的理解需求,让开发人员形成以用户为中心的思维模式,从而开发出更符合用户期望的产品。那么应该如何有效的编写一个用户故事呢?问题分析什么是用户故事分析问题之前,我们先了解下用户故事。用户故事维基百科给出的定义是:“In software development and product management, a user story is an informal, natural language description of one or more features of a software system.”即在软件开发和产品管理过程中,对系统的一个或多个功能进行非正式,自然的语言描述。用户故事是为了表述用户渴望的功能和价值。与需求规格说明书对比同样是用来记录需求,用户故事和传统的需求规格说明书有什么差别呢?需求规格说明书是软件开发过程的范围标准,通常会很正式客观的说明系统需求范围,功能实现要点等,说明书的好处是可以让产品完全符合约定规范,达到交付标准;但是说明书要求做到的和客户内心期望的可能并不一样,比如:说明书中写“产品logo是黑豹”,产品经理是一个漫威粉丝,他希望产品logo是漫威的黑豹;只看说明书,很难看出产品经理的真实需求,于是研发人员就画了一个动物黑豹作为logo;从结果来看,按照说明书做出的产品与用户期望之间存在着很大偏差。用户故事通常比较短小,其核心是围绕用户期望的价值;它不像说明书那样事无巨细的记录下产品想要实现的功能,而是提醒研发人员正在开发或者待开发的功能要实现什么价值(理论上,用户故事应该由用户或用户代理如产品经理录入)。用户故事的三要素为角色、功能、价值,编写用户的通用模板如下:“作为一个<角色>, 我想要通过 <功能>, 以便于实现 <价值>。”使用用户故事来写描述刚才的需求可能就会写成,“作为产品经理,我想制作一个黑豹的logo,以便于利用漫威品牌去吸引用户。”研发人员通过用户故事的“价值”,可以知道这个logo应该是漫威的人物;如果不知道,也可以去问产品经理,这豹子和漫威有啥关系,经过产品经理解释,需求也可以被正确理解(体现了用户故事“可以商讨的”的原则),简而言之,需求规格说明书强调:“功能”,而用户故事比起“功能”更注重“价值”。根本原因了解了上述信息,再看背景中用户故事存在的问题。这条故事虽然有用户故事的样子,但是本质上更像一条需求说明——没有体现用户期望的价值,它只写了“作为 一个<角色>, 我想要通过 <功能>”,没有后半部分的“以便于实现 <价值>”, 所以这条用户故事不合格的根本原因是没有体现价值,这是一条无效的用户故事。这种无效的用户故事一方面会导致研发人员很难理解需求要实现的目的,做出的产品令用户不满意;另一方面,这个用户故事写的太粗略,研发人员不知道从哪下手。无效的用户故事只是一种形式,对需求澄清起到的作用微乎其微。接下来看下合格的用户故事应该怎么写。解决措施要写好用户故事,首先应该了解用户故事的必备条件,或者说用户故事的原则。用户故事的原则一个用户故事通常具备6个原则:独立的(Independent),可以商讨的(Negotiable),有价值的(Valuable),可以估计的(Estimatable),合适的小(Small),可测试的(Testable),6个原则取英文首字母会组成一个单词“INVEST”,所以用户故事的6个原则也被称为“INVEST原则”。独立的(Independent):避免故事之间的依赖;这样做的好处是便于故事优先级排序以及估算。A故事:“作为购房者,我想要通过学区搜索房源,以便买到学区房,方便孩子上学”,B故事“作为购房者,我想要通过学校名称搜索房源,以便于生活在有文化气息的地方”,一定程度上来说,B故事对A故事有依赖,学校的范围包含学区内的公立学校外,还有学区外的私立学校和大学等。如果A故事需要1天,B故事需要3天,总体估算两个故事完成应该是4天,可是A故事完成后,B故事相当于完成了一部分,最后B故事可能只需要2天就完成了;而且本来优先级相同的两个故事,A故事优先级无形之中提高了。用户故事之间的依赖会让估算不准确,即不符合“独立的”原则;想解决这个问题,我们可以对故事重新划分,比如:重新划分成三个故事:“作为购房者,我想要通过私立学校名称搜索房源,以便于孩子将来得到不一样的教育”,“作为购房者,我想要通过大学名称搜索房源,以便于生活的地方有文化气息”,“作为购房者,我想要通过学区搜索房源,以便买到学区房,方便孩子上学”,这样故事之间就没有耦合性,每个故事都是独立的,便于优先级排序和估算故事点。可以商讨的(Negotiable):用户故事只提供适量信息,让开发人员和用户(产品经理)针对一些细节进行讨论;“作为购房者,我想要通过学校名称搜索房源,以便于生活的地方有文化气息 ”,常规理解,这条需求包含:小学,中学,那大学是否包含呢,这样就形成了讨论性。这种情况我们可以在故事中加一段注释:“注释:包含小学,中学,是否包含大学待确认”。与客户的讨论过程在可能会挖掘新的需求,比如艺术学校等。用户故事注释不建议写的面面俱到,因为会减少故事的可商讨性。有价值的(Valuable):敏捷开发以价值为导向,所以故事应该体现对用户的价值。“有价值的”原则在问题分析里面已经做了部分解释;还有一种情况“作为研发人员,我希望给后台数据库创建XX表,以便于我实现XX模块的功能”,这条用户故事看似ok,但实际上该用户故事只对研发人员有价值,换句话说用户不关心后台表结构,只关心系统是否可用,所以这条故事不符合“有价值的”原则。技术实现方面的需求可以适当转化成对用户有价值的故事,或者把它作为“作为购房者,我希望通过XX功能,以便于实现XX价值”这条故事下面的一个Task。可以估计的(Estimatable):每个故事都应该可以估算出故事点,以便于对个人工作量以及团队速率进行估算;一个用户故事估算的工作量不能超过一个迭代,如果故事太大难以估算,可以将大的故事进行分解,分解成多个小的可估算的故事。“作为购房者,我需要按交通线路搜索房源,以便于找到方便搭乘公共交通的房源”,公共交通种类繁多:公交,地铁,轻轨等,假设实现每种交通工具搜索需要4天,要一下子实现这个故事至少需要12天,一个迭代开发不完,这不符合“可以估计的”的原则。针对这种情况,我们可以将这个大的故事拆分成三个小的用户故事,每种交通工具分别对应一个故事,这样一个故事就是4天,就符合了“可估计的”原则。合适的小(Small):故事分解的小,便于估算也便于交付,但是如果故事分解的太小,以至于难以估算故事点,就需要对多个实现共同功能的小故事进行整合。“作为购房者,我希望搜索框背景是红色,以便于我可以更好的找到搜索框”这种用户故事工作量很难估算,可能少至十分钟,多则半小时就完成了;如果迭代中有很多这种小的故事,那对于整体速率估算是非常不利的。小故事可以和其他故事进行整合,形成可估算大小的故事;或者将小故事作为一个Task挂到其他类似用户故事下。可测试的(Testable):用户故事必须要有一个明确的完成标准,以判断开发的功能是否满足用户期望。“作为购房者,我希望搜索到大房子,以便于我和父母孩子居住”,“大房子”是一个模糊的概念,面积90㎡还是140㎡算大房子?是不是三室两厅就符合条件?这种用户故事很难进行验收,也不符合“可测试的”原则。正确描述是:“作为购房者,我希望搜索到90㎡以上,三室两厅的房子,以便于我和父母孩子居住”这样标准就清晰很多,评审会议时也好判断功能是否符合用户期望。用户角色好的用户故事除了满足它的基本原则,还应该考虑一个问题:对于不同的“角色”,实现同样“价值”所需要的“功能”是否也不同?我们来对比两个用户故事:“作为购房者,我想要通过总房款的范围搜索房源,以便于找到我能买的起的房子”和“作为月薪5000,手头有30万存款的职场新人,我想要通过总房款的范围搜索房源,来确定我能负担得起的房子”,开发相同的“通过总房款范围搜索房源”功能,前者需求描述比较模糊:在搜索栏中输入比如100万,然后展示100万左右的房源信息?100万左右的“左”和“右”分别是多少?按这个需求做出来的产品,很大概率是模棱两可的产品,也很难被用户认可;而且在这个用户故事中,“角色”并没有起到该有的作用;第二个故事相对就好很多:30万做首付, 5000月薪可以作为月供的参考,通过这些参数可以大概的推测出总房款的范围,这个范围也可以作为这类人预算的参考;再深一点考虑:房屋总价做成可选区间,代替从搜索栏输入,也许用户体验会更好。由此可见,如果对用户角色进行细致划分能起到意想不到的效果。敏捷以用户为中心,不了解用户就无法掌握用户真正期待的价值。而研发时每个人对用户的理解是不同的,用户角色可以帮助团队形成统一的用户形象,研发人员可以聚焦目标用户,重点挖掘该角色需要的价值;同时使用用户角色会更有代入感,便于研发人员站在用户角度去实现产品该有的价值。用户角色可以通过头脑风暴或其他形式进行识别:按实际需求对用户群体进行细致分类;分类完成后,对有共性的用户适量整合形成具有代表性的用户。比如,对于购房者我们头脑风暴后,可能形成如下群体:年轻人,中年人,老年人,每个群体自身条件和期望都会有差异。年轻人群体中大多数个体财富积累较少,上班时间早,从他们角度会写出特定的用户故事,比如:“在市中心上班的小王,想要通过地跌线路搜索房源,以便于解决上班堵车导致迟到的问题”,要怎么做,为什么这样做,一目了然。同样对于已经成家的中年人,可能更关注孩子的教育(学区);对于老年人群体,可能更关注附近是否有菜市场便于买菜,是否有公园便于日常锻炼,从这些群体的角度出发,搜索功能会形成不一样的用户故事。还应该想到一些极端情况,比如:“作为一个事业有成的企业家,我想要在空气清新的郊区买一个独栋别墅,以满足私人会谈和休假”,所以房源类型是别墅还是普通住宅也要考虑。接下来看一个例子。实例操作用户故事通常以手写的方式写在纸质卡片上,但是纸质卡片很难提供准确的数据用来进行相关分析,所以现在很多企业都选择使用电子卡片。华为云DevCloud是基于敏捷思想设计的DevOps研发平台,接下来在华为云DevCloud中写几个规范的用户故事,故事呈现的需求是背景提到的搜索功能。首先对年轻的上班族群体进行需求划分,比如有些年轻人工作单位在市中心,市中心房子太贵,离市中心稍微远一点开车或坐公交时间不可控(容易堵车),所以他们希望按照地铁线路搜索房源,以解决上班迟到的问题。用户角色就是:早晨八点要到单位(单位位置在市中心)的小王,小王想要做的事是:在这个网站里通过地铁线路搜索地铁站附近的房源信息,他这样做的目的是为了减少上班迟到的风险,写成用户故事:Tips:华为云DevCloud支持填写故事的各种属性,比如所属迭代,优先级,估算工时,故事点等。通过规范的用户故事,研发人员发现原来用户想要的搜索并不是无目的的搜索,而是想找到和自己特定需求相匹配的房源,如果在搜索框基础上,加上若干CheckBox会更有利于用户搜索,最后产品搜索页面如下。总结站在不同用户的角度,遵循用户故事的“INVEST”原则,可以更深层次的挖掘用户的需求,写出更有效的用户故事。参考附录Mike Cohn:用户故事与敏捷方法.北京:清华大学出版社文章博客地址:【DevCloud · 敏捷智库】“用户故事等于需求说明”——你一定没有写好用户故事
  • [技术干货] 【DevCloud · 敏捷智库】开发团队中的任务没人领取,你头疼吗?
    背景在传统开发模式下,开发任务是由项目经理指派给个人的,而在敏捷开发模式中,开发任务是团队领取的。很多企业在转型中遇到过这样的问题:“计划会议认领开发任务的时候,有几个任务没人认领怎么办?”问题分析首先,相对于传统开发模式的指派开发任务,我们需要知道为什么在敏捷开发中是领取任务。在敏捷中,不管是敏捷宣言还是Scrum指南,都没有指派(assign)一词,而是使用了一个术语“自组织”,如下:最佳的架构、需求和设计出自于自组织的团队(敏捷宣言12项原则)自组织团队自己选择如何以最好的方式完成工作,而不是由团队之外的人来指导(Scrum指南)他们是自组织的。没有人(即使是 Scrum Master)有权告诉开发团队应该如何把产品待办列表变成潜在可发布的功能增量(Scrum指南)那么“自组织”是什么呢?从字面的意思来理解,“自组织”就是:安排分散的人或事物使具有一定系统性或整体,而安排的人就是他们自己。在敏捷开发中,自组织团队就是具备自我管理、自我驱动、自我学习等能力的敏捷开发团队本身,这样的团队一般具备如下特点:团队成员自己“拉”工作,不是被动等待他们的领导分配工作;团队作为一个整体管理他们的工作;团队仍然需要辅导和指导,但不需要指挥和控制;团队成员彼此沟通紧密互通有无;团队主动发现和提出问题并共同解决;团队不断提高自己的技能,鼓励探索和创新。更多关于“自组织”的相关内容不在此FAQ的范围内,如感兴趣请参阅更多文献。从敏捷宣言和Scrum指南关于任务的工作方式上来看,在我们践行敏捷的时候,主要发挥的是开发团队自身的主观能动性,开发团队由原来的控制性转变成了自组织性,而开发任务也就由原来的指派变为了领取。这样的好处是,领取任务就是发挥了人的主动性,而自主性是人们从事创造性和解决问题的动力之一,良好的自我组织能给团队和个人带来高绩效、出色的工作成果以及喜欢的工作环境。另外,每个人都是最了解自己的,也擅长为自己分配任务,相对于传统的指派开发任务所带来的易主观臆断、分配不当等更具有合理性。然后再回 “计划会议认领任务的时候,有几个任务没人认领怎么办?”这个问题上。不过在此之前,需要先澄清的一个观点就是,在计划会议中,不一定非要全部领取完开发任务。在Scrum指南中指出“领取工作在Sprint计划会议和Sprint期间按需进行。”这个期间,可以理解为在每日Scrum站会上基于目标领取任务。另外,Mike Cohn 也表示过,不建议在计划会议中领取开发任务,这样可能会导致目标由团队变为了个人,进而违背了敏捷的本意,降低了灵活性。更多请详见参考附录“Should Team Member Sign Up for Tasks During Sprint Planning?”。一般来说,开发任务没人认领的原因主要有:开发任务的难度大:当开发任务比较难以解决,超出了团队大部分成员的能力时,团队成员可能会存在担心加班加点,甚至“996”的情况而不愿意认领。开发任务超范围:当开发任务的内容超出团队成员所掌握的范围时,如 Android 不会 IOS,开发不会测试等,就可能会出现“我是想认领的,但实例它不允许啊”的情况。担心受到他人指责:工作内容存在一定的挑战性,担心由于自己没有做好,导致团队目标没有达成而受到指责。那么应该如何解决呢?解决方案在一个敏捷Scrum团队中,Scrum Master扮演着重要的角色,该角色一部分的作用就是要帮助团队成为自组织型团队,以便让团队能以积极的心态去面对冲刺的开发任务。此外,当出现任务没有人愿意认领的情况时,首先 Scrum Master应该帮助团队弄清楚没有人认领的原因是什么再对症下药,下面基于分析中的三种情况分别给出解决措施。开发任务难度大对于开发任务难度大的情况,Scrum Master应该组织团队进行有效的任务分解,使用探针Spike技术,探索出解决措施以降低任务的难度,再由团队去认领(更多关于Spike的解释请见附录)。或者鼓励技术能力较一般的成员和技术大牛通过结对编程的方式来一同认领任务(更多关于结对编程的解释请见附录)。在华为云DevCloud中,可以对该类难度大的用户故事通过子工作项的方式进行拆分,同时在基本信息中通过设置处理人和抄送人的方式以记录结对编程的人员配对情况,如下图。除此以外,在每日Scrum站会的时候,要留意和了解该开发任务的情况,进行风险评估,如有问题及时帮助协调解决。在回顾会议中,应对该类情况问题进行分析并能输出基于团队的一套标准工作方式方法,然后将解决方案记录在团队知识库中,华为云DevCloud提供了Wiki的功能,可以为团队很好的整理和记录工作方式,如下图。开发任务超范围敏捷提倡的团队是跨职能团队,但是团队的跨职能并不意味着个人能做所有的事情,我们希望的跨职能团队往往是由掌握多项技能的T型人才(每个成员在一个专业领域具有深度,而在其他领域具有广度)所组成的。那么首先,需要Scrum Master能够和团队整理和维护成员技术矩阵,把个人技能掌握情况对团队公开(知道团队欠缺什么、知道可以和谁学等),然后定期组织技术分享等活动以帮助团队成员学习(主要以学习一项新的技术后的分享方式),这样可以在一定程度上提升成员在冲刺中愿意领取其他任务的热情(学完了当然是想去用一下咯)。另外,还可以由专长成员和意愿成员组队,采用结对编程的方式领取任务,以实现个人技术的扩充。团队成员的T型能力建设,不仅仅能让团队领取任务的时候有更多的选择,也提供了成员的backup能力,减少无人认领的情况发生。此外,同样也需要Scrum Master留意日常评估风险和引导团队回顾该事项并维护团队知识库。担心受到他人指责工作内容存在一定的挑战性,担心由于自己没有做好,导致团队目标没有达成而受到指责。Scrum Master应该对团队贯彻以团队为整体的思想,并指导和强调Scrum的价值观,尊重团队的每一个成员的背景、经验,当然也包括开发任务的选择,还要鼓励成员能有勇气去选择和尝试。在实际的工作中,我们可以通过在墙上、白板等贴上标语(如“尊重他人”、“只有团队没有个人”等)的方式,让团队从思想意识方面发生转变,慢慢敢于去领取有挑战性的任务。此外,Scrum Master要充分保护好成员对有挑战工作认领的热情。如,防止在回顾会议上出现指责和批斗的情况,回顾和总结永远应该聚焦的是做事的方式方法而不是对人的苛刻和指责。总结以上三种没有人认领任务的情况,是比较常见的。但在真正的实际项目中,每个公司或团队的情况都不尽相同,无法穷举所有,应具体情况具体分析。比如,当一个公司首要考虑的是存活问题时,又比如一个刚刚转型的敏捷团队,在开发任务的领取上可能会更偏向于半指派半领取的方式,就像FAQ《从敏捷管理的角度来说,是团队主动认领任务好还是通过管理任务分发好》中所提到的,当团队敏捷成熟度较低时,可先由团队认领再让领导管控。这就好比中国经济一样 “以市场经济为导向,适当进行宏观调控”。但不管这个“调控”的力度如何,我们都应该鼓励团队成员能积极主动地领取任务,并随着任务的进展情况灵活调整,及时做好风险把控,必要的时候需要其他渠道的协调帮助或相关领导的介入,以保证迭代的目标不受影响。参考附录spike华为云DevCloudShould Team Member Sign Up for Tasks During Sprint Planning?文章博客地址:https://bbs.huaweicloud.com/blogs/152629
  • [ManageOne二...] 【华为云Stack ManageOne运营面北向对接】如何使用订单接口管理VPC
    1 订单接口说明ManageOne中,用户通过申请订单的方式对云资源进行申请、变更、释放操作,实现对云资源生命周期的管理,订单接口具有以下特点:订单支持关联审批流程(最大支持五级审批,详情参考ManageOne用户指南),用户完成资源配置并提交后,如果审批通过,Manageone会自动完成订单实施;订单接口对云服务接口(经加固后对外开放的OpenStack接口)进行了一定程度的封装,通过调用订单接口,可以同步完成云资源的多个操作,如,申请虚拟机的同时,为虚拟机挂载数据盘,绑定弹性IP;通过订单接口申请、释放云资源时,会同步扣除、恢复租户配额,当租户配额不够时,会导致订单实施失败;订单接口只提供资源的申请,延期,变更,释放功能,不提供云服务的查询,操作(如虚拟机的开关机,列表查询等)功能,不能独立使用,需要配合云服务接口使用,也就是说,您需要通过ManageOne订单接口申请,延期,变更,释放云资源,使用云服务接口查询,操作云资源说明:    云服务接口也支持申请云资源,与使用ManageOne订单接口的区别是:通过云服务接口创建的资源,在ManageOne页面上,可以查询,操作这些资源,但不能执行变更(如扩容,减容),释放云资源的操作ManageOne中为该租户设置的配额也将不再生效(即使用云服务接口申请、释放资源,ManageOne中对应租户的配额不会变化),这也意味着,如果您不加约束,租户可以超配额申请资源2 订单接口使用场景如第1部分所述,ManageOne订单接口是在云服务接口的基础上封装得到的,包含了ManageOne自身的运营特性,例如产品、服务、区域、配额等,使用上有一定的约束,如果您希望通过调用接口实现对华为云Stack中云资源的生命周期管理,请参考以下几个场景进行评估,符合以下任何一种场景的,建议您选择使用ManageOne订单接口进行对接:如果您公司购买了并部署了华为云Stack产品,您希望通过自动化工具实现云服务资源的自动化发放,从而提高资源申请效率;如果您购买了并部署了华为云Stack产品,公司围绕IT资产的运营运维有一整套流程,您希望已有的流程平台(如ITSM、BOSS等)能够与华为云Stack进行对接,实现现有流程与云服务的整合,在简化服务的申请周期,提高应用上线效率的同时,还能够实现云资源的全流程监控;如果您是云服务提供商,将华为云Stack提供的云服务,按照租户的形式租售给了客户,客户希望实现云服务的自动化发放,需要您提供对接接口;如果您是云服务提供商,希望现有运营平台能够与华为云Stack对接,实现租户的自动化创建,并为每个租户预置指定类型的云资源,租户的日常运维由运维部门通过ManageOne进行运维。如果您购买了多家厂商的云平台,希望通过一套云管理软件进行纳管,建议您直接对接云服务接口进行对接,这样可以屏蔽ManageOne的运营特性,只关注云服务特性,对接起来更加灵活。3 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配华为云Stack 6.5.X,8.0版本4 订单接口对接步骤我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:通过用户名和密码调用鉴权接口获取Token和user_id。(可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。选择需要申请的云服务类型,比如云硬盘的service_type为evs。订购接口还需要product_id,因此通过查询可用产品列表接口获取。根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 6.5.x 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放VPC的详细步骤5 申请VPC这里先给出涉及到的接口清单,如下:序号接口功能URL涉及到的接口文档调用接口使用的域名(样例)1鉴权【POST】/v3/auth/tokens《ManageOne 6.5.X OTenantSecurity服务API参考.doc》iam-apigateway-proxy.demo.com2查询用户关联的project列表【GET】/rest/vdc/v3.0/users/{user_id}/projects《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com5查询云资源池可用分区【GET】/rest/serviceaccess/v3.0/available-zones《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 6.5.X 运营面API参考.doc》《ManageOne 6.5.x 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com8获取外部网络列表【GET】/v2.0/networks《华为云Stack 6.5.X API接口参考.chm》>网络>VPC>VPC>网络vpc.sa-fb-1.demo.com具体接口调用步骤如下:步骤 1 获取token调用示例:URL:https://{IAM对外访问域名}/v3/auth/tokens 请求方法:POST 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive 请求体: { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "租户名" }, "name": "XXXXXX", "password": "XXXXXX" } } }, "scope": { "project": { "domain": { "name": "租户名" }, "id": "项目Id" } } } }响应消息如下:响应头: X-Subject-Token→MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 响应体: { "token": { "expires_at": "2019-09-09T07:38:55.643000Z", "methods": [ "password" ], "catalog": [], "roles": [ { "name": "vdc_adm", "id": "880ed0477e684b1db7634572ecf19c5c" }, { "name": "te_admin", "id": "7849dd0fc806417c908bb21ea93b5def" }, { "name": "tag_adm", "id": "7ef11d3399a44a56b722b3c017478e34" }, { "name": "approv_adm", "id": "5528afb8b7c946b5bda00a10ca041748" }, { "name": "vdc_owner", "id": "2034341ae2b44fee94c244a8069cde0b" } ], "project": { "domain": { "name": "xssvdc", "id": "15488ac7aec547a68d9451c91173c68c" }, "name": "xssvdc", "id": "27a008f1b83e4dfdbf1143dd336006df" }, "issued_at": "2019-09-08T07:38:55.643000Z", "user": { "domain": { "name": "xssvdc", "id": "15488ac7aec547a68d9451c91173c68c" }, "name": "xssvdc", "id": "b54310fb838b4f8ebf1e9d23bf9691d5"   //用户Id } } }从响应头中我们可以获得X-Subject-Token的值,即为我们所需要的token的值;从响应体中还可以获得用户的Id,以便后续查询用户关联的所有的project步骤2 查询用户关联的project(可选)创建资源时,需要指定该资源所属的project,若一个租户下有多个project,第三方平台需要指明需要使用的project,此时需要查询该用户关联的project,若仅涉及单个project,则不涉及此操作。需要说明的是,当选择某个project创建资源时,需要用该project参考步骤1去获取token。调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/users/{user_id}/projects 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "total": 1, "projects": [ { "domain_id": "15488ac7aec547a68d9451c91173c68c", "tenant_id": "39d881e6-e6a6-4516-8d8e-83446abc263b", "role_name": null, "tenant_name": "tt002", "regions": [ { "region_status": "normal", "region_id": "dg-tky-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "level": "2", "role_id": null, "name": "pj002", "iam_project_name": "pj002", "description": null, "id": "4313bc0e240e4086995e606f6601b730", "enabled": true }, { "domain_id": "15488ac7aec547a68d9451c91173c68c", "tenant_id": "1cfbb21d-3e45-4a0a-887f-c9e6ab215cec", "role_name": null, "tenant_name": "test001", "regions": [ { "region_status": "normal", "region_id": "dg-tky-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "level": "2", "role_id": null, "name": "test001", "iam_project_name": "test001", "description": null, "id": "147c59f42277405e854e7a3123dea3a9", "enabled": true } ] }步骤 3 查询资源池信息创建、变更、删除资源时,需要指定资源所在的region、资源池、可用分区,我们可以通过查询project详情获取该project关联的region、资源池、可用分区信息,接口调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/projects/{project_id} 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "project": { "domain_id": "15488ac7aec547a68d9451c91173c68c", "tenant_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9", "tenant_name": "xssvdc", "regions": [ { "region_status": "normal", "cloud_infras": [ { "cloud_infra_status": null, "cloud_infra_name": null, "cloud_infra_type": null, "azs": [], "cloud_infra_id": null }, { "cloud_infra_status": "normal", "cloud_infra_name": "OpenStack_dg-tky-1", "cloud_infra_type": "FUSION_CLOUD", "azs": [ { "az_status": "normal", "az_name": "华为", "az_id": "az0.dc0" } ], "cloud_infra_id": "FUSION_CLOUD_dg-tky-1" }, { "cloud_infra_status": "normal", "cloud_infra_name": "VMware_dg-tky-1", "cloud_infra_type": "VMWARE", "azs": [], "cloud_infra_id": "VMWARE_dg-tky-1" } ], "region_id": "dg-tky-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "is_shared": false, "name": "xssvdc", "tenant_type": "vdc", "region_name": null, "id": "27a008f1b83e4dfdbf1143dd336006df", "enabled": true } }此处我们可以获得region_id、cloud_infra_id、az_id,需要注意的是,创建资源时指定的AZ必须与cloud_infra_id、region_id匹配,不能交叉混用!!!步骤4 查询产品列表不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type),常用类型有:service_type云服务名称ecs弹性云服务器evs云硬盘ims镜像服务vpc虚拟私有云vfw虚拟防火墙elb弹性负载均衡as弹性伸缩bms裸金属服务调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/products?limit=100&start=1&status=online&service_type=vpc&region_id={region_id}(region_id取值由步骤3获取)请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: {     "total": 1,     "products": [         {             "product_id": "1222c648ff284296b0f5d848806aba9b",             "service_type": "vpc",             "create_vdc_id": "all",             "create_user_id": "32cb5a3c9de44bcf9696db98c1db828a",             "icon_id": "defaulticonvpc",             "catalog_id": "3",             "region_id": "dg-dg-1",             "params": "{}",             "name": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}",             "description": "{\"zh_CN\": \"虚拟私有云即VPC,是一套为云服务器构建的逻辑隔离的、由用户自主配置和管理的虚拟网络环境,同时提供灵活可靠的数据连接方式和全方位的安全防护层,旨在提升用户资源的安全性,简化用户的网络部署。\",\"en_US\": \"Virtual Private Cloud (VPC) lets you provision logically isolated, configurable, and manageable virtual networks for cloud servers. VPC also provides flexible and reliable network connection modes and comprehensive security protection. VPC is designed to improve the security of user resources and simplify network deployment.\"}",             "create_time": 1585897486000,             "publish_status": "publish",             "deletable_status": "normal",             "is_default": true,             "publish_scope": "[]",             "online_scope": "[{\"vdcName\":\"all\",\"vdcId\":\"all\"}]",             "online_status": "online",             "approval": false,             "price": null,             "resource_pool_id": "",             "project_id": "",             "az_id": "",             "secret_params": null,             "product_type": null         }     ] }响应体中,approval字段值为false的产品表示该产品没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,提交订单后就会实施,对接时建议使用此类产品。步骤 5 查询可用外部网络查询可用的外部网络,请求示例如下:URL: https://{VPC对外访问域名}/v2.0/networks?router:external=True&tags=service_type=Location(若使用参数tags=service_type=Location查不到列表,请更换为tags=service_type=Intranet) 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体:{ "networks": [ { "provider:physical_network": "physnet1", "ipv6_address_scope": null, "port_security_enabled": true, "mtu": 1500, "id": "cfd58c32-eb48-4fe4-8744-749940b73b72", "router:external": true, "availability_zone_hints": [], "availability_zones": [ "nova" ], "provider:segmentation_id": 210, "ipv4_address_scope": null, "shared": true, "project_id": "a3f457bbf1054e27a59804f4050f24e1", "status": "ACTIVE", "subnets": [ "39385d8e-0d67-4ecc-a1f0-1db294c3f21f" ], "description": "", "tags": [ "group=group1", "service_type=Intranet", "az=az0.dc0", "location=DG:localcloud", "name=exNet_02" ], "updated_at": "2019-06-11T01:24:17", "is_default": false, "qos_policy_id": null, "name": "ext_net02", "admin_state_up": true, "tenant_id": "a3f457bbf1054e27a59804f4050f24e1", "created_at": "2019-06-11T01:24:17", "provider:network_type": "vlan" }, { "provider:physical_network": "physnet1", "ipv6_address_scope": null, "port_security_enabled": true, "mtu": 1500, "id": "eaded83b-1f76-42a0-84ea-df711e01db3e", "router:external": true, "availability_zone_hints": [], "availability_zones": [ "nova" ], "provider:segmentation_id": 209, "ipv4_address_scope": null, "shared": true, "project_id": "a3f457bbf1054e27a59804f4050f24e1", "status": "ACTIVE", "subnets": [ "dd6e78b3-aa76-406e-b81a-947f31f0c584" ], "description": "", "tags": [ "group=group2", "service_type=Intranet", "az=az0.dc0", "location=DG:localcloud", "name=exNet_01" ], "updated_at": "2019-06-11T01:24:04", "is_default": false, "qos_policy_id": null, "name": "ext_net01", "admin_state_up": true, "tenant_id": "a3f457bbf1054e27a59804f4050f24e1", "created_at": "2019-06-11T01:24:04", "provider:network_type": "vlan" } ] }provider:physical_network的值即为物理网络名称,Id即为外部网络的Id我们现在获得了创建VPC所需的所有参数,订购接口所需主要参数如下:序号参数名称参考值备注1operate_typeapply申请,固定值apply2service_typevpc虚拟私有云,固定值vpc3region_idsa-fb-11区域id,步骤3获取4tenancy2018-07-27 15:59:59租期租期截止时间,永久有效则填写05product_id产品id,步骤4获取6tenant_id云服务中的tenant_id和manageOne中的project_id相同,步骤3获取7nametestvpc自定义新建vpc的名称8external_gateway_info:network_id外部网关的网络ID,参考步骤5,Type3场景下不需要填写,Type1、Type2场景必填9display订单显示信息,可根据需要填写,值可以为空,属性名必须有10subnetregionId子网区域id,和vpc区域id相同tenant_id和vpc的tenant_id相同,公共参数章节获取namesubnet_test子网名称,用户自定义cidr192.168.0.0/24子网IP地址段,用户自定义gatewayIp192.168.0.1子网网关地址,用户自定义dnsListDNS服务器列表physicalNetworkphysnet1外部网关的网络ID,查询接口为:【GET】/v2.0/networks,参考《华为云Stack 6.5.X API接口参考.chm》,Type1、Type2场景下不需要填写,Type3场景必填步骤6 创建订单,申请VPC订单接口中的params参数说明,请参考《ManageOne 6.5.x 云服务Params参数说明》当华为云Stack组网场景为type1、type2时,申请VPC请求示例如下:URL:  https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体: { "subscriptions": [ { "operate_type": "apply", "product_id": "e50123fc503049fa9e5f9072d8b47585", "region_id": "sa-fb-11", "project_id": "1d998b1c7e264baba3203cfe9867b011", "service_type": "vpc", "tenancy": "2018-07-27 15:59:59", "params": "{\"regionId\":\"sa-fb-11\",\"tenant_id\":\"1d998b1c7e264baba3203cfe9867b011\",\"vpc\":{\"name\":\"vpc-eabb\",\"external_gateway_info\":{\"network_id\":\"27e6e110-8d29-481c-93af-c3ba39c22c37\"}},\"subnet\":{\"regionId\":\"sa-fb-11\",\"tenantId\":\"1d998b1c7e264baba3203cfe9867b011\",\"availableZoneId\":\"\",\"name\":\"subnet-eabc\",\"cidr\":\"192.168.0.0/24\",\"gatewayIp\":\"192.168.0.1\",\"dhcpEnable\":true,\"dnsList\":[\"18.125.1.51\",\"18.125.1.52\"]},\"display\":[{\"label\":\"Region\",\"value\":\"sa-fb-11\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-eabb\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"dummy_external_network\",\"type\":\"string\"}]}" } ] } 响应体: { "purchases": [ { "subscription_id": "20190914113546169610061" } ], "expected_total": 0, "error_details": null }subscription_id即为订单ID当华为云Stack组网场景为type3时,申请VPC请求示例如下:URL:  https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体: { "subscriptions": [ { "operate_type": "apply", "product_id": "04e12eba75e243368f5cb6a0f52db4af", "region_id": "dg-tky-1", "project_id": "27a008f1b83e4dfdbf1143dd336006df", "service_type": "vpc", "tenancy": 0, "params": "{\"regionId\":\"dg-tky-1\",\"tenant_id\":\"27a008f1b83e4dfdbf1143dd336006df\",\"vpc\":{\"name\":\"vpc-97f0\",\"ntp\":[],\"ntp_v6\":[]},\"subnet\":{\"regionId\":\"dg-tky-1\",\"tenantId\":\"27a008f1b83e4dfdbf1143dd336006df\",\"availableZoneId\":\"\",\"name\":\"subnet-97f1\",\"dhcpEnable\":true,\"cidr\":\"192.168.100.0/24\",\"gatewayIp\":\"192.168.100.1\",\"physicalNetwork\":\"physnet1\",\"segmentationId\":\"\",\"routed\":false,\"dnsList\":[\"160.102.8.53\",\"160.102.8.54\"],\"allocation_pools\":[{\"start\":\"192.168.100.2\",\"end\":\"192.168.100.254\"}]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-97f0\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-97f0\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"\",\"type\":\"string\"}]}}" } ] } 响应体: { "purchases": [ { "subscription_id": "20190914113546169610061" } ], "expected_total": 0, "error_details": null }subscription_id即为订单ID步骤7 查询订单详情,确认订单实施状态订单提交成功后,需要定时轮询订单状态,直到订单状态(status字段)为成功URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}(order_id由上一步响应体获得) 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "order_id": "20190914113546169610061", "parents_id": null, "type": "apply", "service_type": "vpc", "params": "{\"regionId\":\"dg-tky-1\",\"tenant_id\":\"27a008f1b83e4dfdbf1143dd336006df\",\"vpc\":{\"name\":\"vpc-5e10\",\"ntp\":[],\"ntp_v6\":[]},\"subnet\":{\"regionId\":\"dg-tky-1\",\"tenantId\":\"27a008f1b83e4dfdbf1143dd336006df\",\"availableZoneId\":\"\",\"name\":\"subnet-5e10\",\"dhcpEnable\":true,\"cidr\":\"192.168.10.0/24\",\"physicalNetwork\":\"physnet1\",\"segmentationId\":\"177\",\"routed\":false,\"dnsList\":[\"160.102.8.53\",\"160.102.8.54\"]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"\",\"type\":\"string\"}]}}", "create_user_id": "b54310fb838b4f8ebf1e9d23bf9691d5", "create_user_name": "xssvdc", "vdc_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9", "vdc_name": "xssvdc", "status": "successed", "create_time": "2019-06-11 01:53:42", "implement_time": "2019-06-11 01:53:43", "complete_time": "2019-06-11 01:53:48", "project_id": "27a008f1b83e4dfdbf1143dd336006df", "cloud_infra_id": null, "product_id": "04e12eba75e243368f5cb6a0f52db4af", "region_id": "dg-tky-1", "product_defination_params": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}", "tenancy": "0", "original_tenancy": "0", "time_zone": null, "comments": null, "contract_number": null, "rate_params": null, "domain_id": null }6 删除VPC删除VPC,我们需要指定VPC的Id,所属的区域,AZ等信息,步骤如下:步骤 1 获取token参考第5章 步骤1即可步骤2 查询指定VPC下关联的子网列表涉及接口如下:接口功能接口方法接口URL提供接口的云服务调用接口使用的域名(样例)获取VPC信息GET/v2.0/routers虚拟私有云vpc.sa-fb-1.demo.com获取端口列表GET/v2.0/ports?device_id={vpc_id}虚拟私有云vpc.sa-fb-1.demo.com获取子网详情GET/v2.0/subnets/{subnet-id}虚拟私有云vpc.sa-fb-1.demo.com接口调用步骤略,上表所列接口的具体参数说明,请参考接口文档《华为云Stack 6.5.X API接口参考.chm》“网络”-->“VPC”-->“VPC”章节步骤3 删除指定VPC下的所有子网涉及接口如下:接口功能接口方法接口URL提供接口的云服务调用接口使用的域名(样例)获取子网详情DELETE/v2.0/subnets/{subnet-id}虚拟私有云vpc.sa-fb-1.demo.com上表所列接口的具体参数说明,请参考接口文档《华为云Stack 6.5.X API接口参考.chm》“网络”-->“VPC”-->“VPC”章节步骤4 查询区域列表参考 第5章 步骤3即可至此,我们获得了创建删除VPC订单所需要的参数,如下:序号参数名称参考值备注1operate_typedelete删除,固定值delete,必选2service_typevpc虚拟私有云,固定值vpc,不选3region_idsa-fb-11区域id,步骤4获取4vpcIdvpc的id,即router的Id,查询接口为:【GET】/v2.0/routers,参考《华为云Stack 6.5.X API接口参考.chm》5tenant_id云服务中的tenant_id和manageOne中的project_id相同,此处与步骤1中获取token时指定的project相同6display订单显示信息,可根据需要填写,值可以为空,属性名必须有步骤5 调用订单接口删除VPC订单接口中的params参数说明,请参考《ManageOne 6.5.x 云服务Params参数说明》URL:  https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体: { "subscriptions": [ { "operate_type": "delete", "service_type": "vpc", "region_id": "sa-fb-11", "project_id": "1d998b1c7e264baba3203cfe9867b011", "params": "{\"vpcId\":\"d887af5c-1d20-43b3-8bb8-7c284813b3a9\",\"tenant_id\":\"1d998b1c7e264baba3203cfe9867b011\",\"regionId\":\"sa-fb-11\",\"display\":[{\"label\":\"Region\",\"value\":\"sa-fb-11\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-eabb\",\"type\":\"string\"}],\"ids\":[{\"id\":\"d887af5c-1d20-43b3-8bb8-7c284813b3a9\",\"service_type\":\"vpc\"}]}" } ] } 响应体: { "purchases": [ { "subscription_id": "20190914110658422269247" } ], "expected_total": 0, "error_details": null }同样的,我们需要调用订单查询接口(参考底5章 步骤7),查询订单状态,直到VPC删除完成补充说明:VPC的查询、属性更新等操作均需要调用云服务的接口,具体接口参考文档《华为云Stack 6.5.X API接口参考.chm》中“网络”-->“VPC”-->“VPC”章节。VPC的申请、删除、扩容需要使用ManageOne订单接口,不可将ManageOne订单接口与VPC接口混用(如:使用ManageOne订单接口创建资源,使用VPC接口删除资源),否则会导致ManageOne上数据展示异常
  • [问题求助] DVPP的VPC模块是否支持输出图像大小可设置?
    目标就是类似CV的copymakeborder等比缩放然后空白区域填0.VpcUserRoiOutputConfigure结构体成员变量说明uint8_t* addr输出图片的首地址。如果用户申请内存,推荐使用Matrix提供的HIAI_DVPP_DMalloc接口申请内存,申请到的内存满足DVPP的要求(在同一4G空间内、首地址16对齐)。HIAI_DVPP_DMalloc接口的说明,请参见Matrix API参考。uint32_t bufferSize输出buffer的大小,根据yuv420sp计算。uint32_t widthStride输出图片的宽步长,需要16对齐;宽stride最小为32,最大为4096。uint32_t heightStride输出图片的高步长,需要2对齐;高stride最小为6,最大为4096。输出为yuv420sp图像,需要根据heightStride计算出uv数据的起始地址。VpcUserCropConfigure outputArea用户指定输出区域坐标,详细见•VpcUserCropConfigure 结构...。若实现8K缩放功能,不用配置该参数是否可以通过widthStride*ratio,heightStride*ratio.然后outputArea填[0,223][0,223]这样实现呢?
  • [问题求助] VPC做resize时插值方式是什么?
    请问一下VPC在做硬件resize时插值方式是bilinear or nearest or其他的什么?目前想验证VPC做resize的正确性,请问应该和opencv的什么方式做对齐?
  • [云实验室] 云计算:《基于ECS实现一分钟自动化部署》-交流讨论帖
    欢迎小伙伴们体验《基于ECS实现一分钟自动化部署》实验,有任何问题都可以在这里讨论交流哦! 通过本实验:§   您将学习以Tomcat应用为例,通过DevCloud的自动化部署功能将应用快速部署到服务器上。华为云软件开发平台DevCloud是专为开发者打造的一站式云端DevOps平台,支持云上开发,可实现云端持续交付,并覆盖了软件交付的全生命周期,让开发者快速无忧地开启云端开发之旅。 §   您将体验1. 创建实验所需资源2. 新建并执行部署任务§   您将掌握1. 软件开发平台 DevCloud的基本操作2. 主机自动化部署的方法 实验开始前,推荐您先学习相关课程,掌握实验背景知识:1. 软件开发服务介绍及实战2. 华为DevOps实践3. 弹性云服务器ECS:轻松上云第一步 实验完成后,欢迎学习相关领域微认证,认证您的AI技能:微认证:一分钟自动化部署 实验过程中,如有任何问题可在该帖进行交流,也可以添加华为云学院小助手(微信号:HWcloudedu),专业人员为您实时解疑答惑,互相交流,共同进步!如要提出问题,请详细描述您的问题及出现的步骤,附上实验操作截图,如有其他参考信息可一并附上。
  • [经验交流] 华为云(亚太-新加坡) VPC、EVS、ECS、VPC-Endpoint、APIGateway服务于2019年11月19日-11
    尊敬的华为云客户:华为云VPC、EVS、ECS、VPC-Endpoint、APIGateway计划于2019/11/19-2019/11/20 对亚太-新加坡平台进行升级,升级详情如下:升级时间影响区域影响服务升级影响2019/11/19 00:00-06:00(北京时间)亚太-新加坡VPC升级过程访问管理面控制台可能出现1-2次闪断,每次闪断小于1分钟。2019/11/20 00:00-06:00(北京时间)亚太-新加坡EVS、ECS、VPC-Endpoint、APIGateway如您有不中断传输的操作需求,请您避开升级时间段。给您带来的不便,敬请谅解。感谢您对华为云的支持!
  • [经验交流] 华为云(亚太-新加坡) VPC、EVS、ECS、VPC-Endpoint、APIGateway服务于2019年11月19日-11
    尊敬的华为云客户:华为云VPC、EVS、ECS、VPC-Endpoint、APIGateway计划于2019/11/19-2019/11/20 对亚太-新加坡平台进行升级,升级详情如下:升级时间影响区域影响服务升级影响2019/11/19 00:00-06:00(北京时间)亚太-新加坡VPC升级过程访问管理面控制台可能出现1-2次闪断,每次闪断小于1分钟。2019/11/20 00:00-06:00(北京时间)亚太-新加坡EVS、ECS、VPC-Endpoint、APIGateway如您有不中断传输的操作需求,请您避开升级时间段。给您带来的不便,敬请谅解。感谢您对华为云的支持!
  • [Atlas300] vpc抠图失败
    这些提示都是哪些问题产生的?
  • VPC终端节点服务于2019年10月9日 - 10月15日00:00-02:00(北京时间)升级通知
    尊敬的华为云客户:VPC终端节点服务计划于2019/10/09-2019/10/15 00:00-02:00(北京时间)进行升级,升级详情如下:             升级时间影响区域影响服务升级影响2019/10/09   00:00-01:00(北京时间)华北-北京四VPC终端节点升级过程中VPC终端节点服务、分布式缓存服务DCS的redis 4.0和5.0实例将会出现1~2次闪断,每次闪断小于2秒。2019/10/09   01:00-02:00(北京时间)华东-上海二2019/10/15   00:00-01:00(北京时间)华南-广州2019/10/15   01:00-02:00(北京时间)华北-北京一如您有不中断传输的操作需求,请您避开升级时间段。给您带来的不便,敬请谅解。感谢您对华为云的支持!
  • [网络] 【云小课】基础服务第21课 如何通过虚拟私有云保障服务安全?
    在第十六课的时候,我们一起学习了如何规划网络,部署云上业务。当您在云上部署了自己的服务后,接下来就要考虑如何保障服务的安全性了。比如说,绑定了EIP的ECS仅允许访问公网,但不允许被公网用户访问。再比如说,要防止某个病毒的攻击,需要隔离具有漏洞的应用端口。.....这些问题通通不用担心,虚拟私有云不仅可以帮助您构建虚拟网络环境,还可以提供访问控制策略进而保障您的服务安全。温馨小提示1:还没有华为云账户来体验本节课程的操作吗?戳这里,免费注册华为云账户!有账户没有云服务器?戳这里,免费试用4核8G高速云服务器!温馨小提示2:了解更多VPC信息,戳这里。访问控制虚拟私有云主要提供以下两种访问控制策略:安全组:基于ECS的访问控制安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的云服务器提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当ECS加入该安全组后,即受到这些访问规则的保护。网络ACL:基于子网的访问控制网络ACL是对子网的访问控制策略系统,根据与子网关联的入站/出站规则,判断数据包是否被允许流入/流出关联子网。知识扩展:了解更多安全组与网络ACL的区别,请戳这里。场景一:仅允许访问公网绑定了EIP的ECS仅允许访问公网,但不允许被公网用户访问,通过安全组实现。安全组配置:安全组入方向:为空,不添加任何规则。安全组出方向:放通全部协议端口,如下所示。知识扩展:了解创建安全组具体操作,请戳这里。不清楚如何配置安全组规则,请戳这里。了解更多安全组配置示例,请参见这里。场景二:拒绝特定端口访问假设要防止勒索病毒Wanna Cry的攻击,需要隔离具有漏洞的应用端口,例如TCP 445端口。您可以在子网层级添加网络ACL拒绝规则,拒绝所有对TCP 445端口的入站访问。网络ACL配置需要添加的入方向规则如下所示。知识扩展:了解创建网络ACL具体操作,请戳这里。不清楚如何配置网络ACL规则,请戳这里。了解更多网络ACL配置示例,请戳这里。【往期回顾】【第一课】我该怎么选择云主机的规格? 【第二课】云小课带你了解镜像家族!【第三课】云小课带你学习购买云硬盘,快速读懂云存储。【第四课】云服务器网络怎么选?安全组怎么配?云小课为你支招!【第五课】云小课带您大话安全组【第六课】你了解云服务器的远程登录吗?小课教你自助排查MSTSC远程登录问题!【第七课】 云小课带你快速实现主机的上云迁移【第八课】 云小课教你轻松切换操作系统【第九课】如何通过镜像实现跨可用区的业务迁移?【第十课】“VPC连接”知多少?【第十一课】项目与企业项目【第十二课】云计算小课之ECS实例:新一代计算增强型云服务器C6蓄势起航【第十三课】怎么解决Windows云服务器带宽和CPU利用率高问题【第十四课】云计算小课之:快速购买弹性云服务器【第十五课】怎么解决Linux云服务器带宽和CPU利用率高问题【第十六课】如何根据业务需求进行网络规划【第十七课】配置云服务器跨可用区容灾:购买并配置SDRS【第十八课】使用主机迁移服务轻松实现服务器迁移到ECS【第十九课】服务器迁移方法合集【第二十课】云小课教你怎样配置Windows云服务器多用户登录
  • [分享交流] 开发者&amp;BDA福音--多模NoSQL服务GeminiDB
    华为云多模 NoSQL服务(Multi-Model NoSQL Service)GeminiDB 是一款基于华为自主研发的计算存储分离架构的分布式非关系型数据库服务。在华为云高性能、高可用、高安全、可弹性伸缩的基础上,提供了一键部署、备份、监控等服务能力。兼容 Cassandra 等主流 NoSQL 接口,具有高性价比,适用于IoT、气象、互联网、游戏等领域。点击申请免费试用->熟悉MySQL的开发者和DBA可以半天内完全掌握Cassandra用法,是不是开发者和DBA的福音呢,以下是该款产品的详细分解,坐稳扶好哦~系统架构多模NoSQL服务GeminiDB是一款基于计算存储分离架构的分布式数据库,由多个同构节点组成计算集群。数据存储在分布式共享存储池中。计算和存储资源解耦,支持独立弹性伸缩,扩缩容无数据迁移。图1 Cassandra接口的系统架构 产品优势性能更稳定优化了Full GC,使长尾时延更低,集群性能更稳定。数据更可靠复制集下沉到共享存储池,经过海量客户验证过的存储解决方案,保障数据更可靠。扩容更敏捷基于计算存储分离技术,Rebalance过程只涉及元数据操作,零数据迁移 ,达到分钟级计算资源扩容和秒级存储资源扩容。与其他服务的关系对象存储服务备份数据存储至对象存储服务(Object Storage Service,简称OBS),在提高数据容灾能力的同时有效降低磁盘空间占用。虚拟私有云通过虚拟私有云(Virtual Private Cloud,简称VPC)和网络安全组实现网络隔离。虚拟私有云允许租户通过配置虚拟私有云入站IP范围,来控制连接数据库的IP地址段。数据库实例运行在租户独立的虚拟私有云内,可提升数据库实例的安全性。多模NoSQL服务GeminiDB盛大公测 ,免费试用公测福利华为AI音响mini,华为移动电源,华为云数据库纪念T恤 添加小助手微信加入华为云Cassandra技术交流群,面对面与专家交流哦
  • [网络] 【云小课】基础服务第16课 如何根据业务需求进行网络规划?
    华为虚拟私有云(VPC)是华为云网络的基础,越来越多的企业开始基于VPC部署云上业务。VPC不仅为用户提供了安全、隔离的网络环境,还可以让用户根据自身业务情况进行自主网络规划。那么问题来了,如何使用VPC进行网络规划呢?该创建几个VPC?该创建几个子网,网段怎么规划?怎么规划路由策略?怎么连接本地IDC?最终又是怎么连接Internet?......别担心,别着急,让小课为您一一解开这些疑惑吧^_^温馨小提示1:还没有华为云账户来体验本节课程的操作吗?戳这里,免费注册华为云账户!有账户没有云服务器?戳这里,免费试用4核8G高速云服务器!温馨小提示2:了解更多VPC信息,戳这里。如何规划VPC数量?VPC具有区域属性,默认情况下,不同区域的VPC之间内网不互通,同区域的不同VPC内网不互通,同一个VPC下的不同可用区之间内网互通。一个VPC当您没有多地域部署需求且各业务之间不需要网络隔离时,您只需要使用一个VPC就可以。多个VPC当您在当前区域下有多套业务部署,且希望不同业务之间进行网络隔离时,则可为每个业务在当前区域建立相应的VPC。两个VPC之间可以采用对等连接进行互连。最多可以创建多少个VPC?默认情况下一个用户支持创建5个VPC,如果配额不满足实际需求,可以提工单申请扩容。知识扩展:创建VPC,请参考创建虚拟私有云和子网。了解对等连接更多信息,请参考对等连接创建流程。如何规划子网?子网是VPC内的IP地址块,VPC中的所有云产品都必须部署在子网内。同一个VPC下,子网网段不可重复。子网创建成功后,网段无法修改。VPC支持的网段如下,子网的网段须在VPC网段范围内,且子网的掩码范围为:子网所在VPC掩码~29。10.0.0.0/8~24172.16.0.0/12~24192.168.0.0/16~24例如:设置VPC的网段为10.0.0.0/16,则子网网段可设置为10.0.0.0/16~29。规划子网如果只是VPC的子网规划,不涉及和本地IDC的网络通信,则可以选择上述任何一个网段进行新建子网。 如果要通过VPN/云专线与线下IDC进行互通,本端网段(VPC网段)和对端网段(您的IDC网段)不能重叠,所以在新建VPC及子网的时候需要避开对端网段。在划分网段时还应考虑该网段的IP容量,即有多少可用的IP数。最后,建议在同一个VPC下的业务内可按照业务模块分别划分子网,例如子网1用于Web层,子网2用于逻辑层,子网3用于数据层,有利于结合网络ACL进行访问控制和过滤。最多可以创建多少个子网?一个用户可以创建100个子网,如果无法满足实际需求,可以提工单申请扩容。知识扩展:申请VPC时会创建默认子网,当默认子网不能满足需求时,您可以创建新的子网。请参考为虚拟私有云创建新的子网。如何规划路由策略?路由表由一系列路由规则组成,用于控制VPC内子网的出流量走向。用户创建VPC时,系统会自动为其生成一个默认路由表,该默认路由表含义为VPC内网互通。 如果不需要对子网的流量走向进行特殊控制,默认VPC内网互通的情况下,则使用默认路由表即可,无需配置自定义路由策略; 如果需要对VPC内的网络流量走向进行特殊控制,则可以对路由表进行自定义路由配置。知识扩展:添加自定义路由操作,请参考添加自定义路由。如何连接本地IDC?当您有VPC与本地IDC互通的需求时,要确保VPC的网段和要互通的网络的网段都不冲突。比如您在华北区域有VPC1一个VPC,华东有VPC2和VPC3两个VPC。VPC1需要连接用户北京IDC,通过VPN走Internet互连。VPC2需要连接用户上海IDC,通过云专线连接。同时在华东区域的VPC3与VPC2通过对等连接建立连接。此例中,各VPC网段划分需要注意以下几点:VPC1的网段(CIDR)不能与北京IDC的网段有重叠。VPC2的网段(CIDR)不能与上海IDC的网段有重叠。VPC3和VPC2的网段也不能有重叠。知识扩展:了解更多VPN信息,请参考通过VPN连接VPC。了解更多云专线信息,请参考通过用户专线访问多个VPC。如何连接Internet?少量弹性云服务器通过弹性公网IP连接Internet当您仅有少量弹性云服务器访问Internet时,您可将弹性公网IP(EIP)绑定到弹性云服务器上,弹性云服务器即可连接公网。您还可以通过动态解绑它,再绑定到NAT网关、弹性负载均衡上,使这些云产品连接公网,管理非常简单。不同弹性公网IP还可以共享带宽,减少您的带宽成本。大量弹性云服务器通过NAT网关连接Internet当您有大量弹性云服务器需要访问Internet时,单纯使用弹性公网IP管理成本过高,公有云NAT网关来帮您,它提供SNAT和DNAT两种功能。SNAT可轻松实现同一VPC内的多个弹性云服务器共享一个或多个弹性公网IP主动访问公网,有效降低管理成本,减少了弹性云服务器的弹性公网IP直接暴露的风险。支持最大100万并发连接、3万新建连接。DNAT功能还可以实现端口级别的转发,将弹性公网IP的端口映射到不同弹性云服务器的端口上,使VPC内多个弹性云服务器共享同一弹性公网IP和带宽面向互联网提供服务。海量高并发场景通过弹性负载均衡连接Internet对于电商等高并发访问的场景,您可以通过弹性负载均衡(ELB)将访问流量均衡分发到多台弹性云服务器上,支撑海量用户访问。弹性负载均衡采用集群化部署,支持多可用区的同城双活容灾。同时,无缝集成了弹性伸缩,能够根据业务流量自动扩容,保证业务稳定可靠。知识扩展:了解更多弹性公网IP连接Internet信息,请参考为弹性云服务器申请和绑定弹性公网IP。需要减少带宽成本,请参考共享带宽简介。了解更多NAT网关连接Internet信息,请参考使用SNAT连接公网和使用DNAT面向公网提供服务。了解更多弹性负载均衡连接Internet信息,请参考弹性负载均衡介绍。随堂小测验如何搭建一个IPv4网络,使VPC内云服务器可访问Internet?以下内容或许会帮到您哦~线索:搭建Ipv4网络【往期回顾】【第一课】我该怎么选择云主机的规格?【第二课】云小课带你了解镜像家族!【第三课】云小课带你学习购买云硬盘,快速读懂云存储。【第四课】云服务器网络怎么选?安全组怎么配?云小课为你支招!【第五课】云小课带您大话安全组【第六课】你了解云服务器的远程登录吗?小课教你自助排查MSTSC远程登录问题!【第七课】 云小课带你快速实现主机的上云迁移【第八课】 云小课教你轻松切换操作系统【第九课】如何通过镜像实现跨可用区的业务迁移?【第十课】“VPC连接”知多少?【第十一课】企业与企业项目【第十二课】云计算小课之ECS实例:新一代计算增强型云服务器C6蓄势起航【第十三课】怎么解决Windows云服务器带宽和CPU利用率高问题【第十四课】云计算小课之:快速购买弹性云服务器【第十五课】怎么解决Linux云服务器带宽和CPU利用率高问题
  • VPC终端节点服务于2019年8月17日00:00-06:00(北京时间)升级通知
    尊敬的华为云客户:VPC终端节点服务计划于2019/08/17 00:00-03:00(北京时间)进行升级,升级详情如下:升级时间影响区域影响服务升级影响2019/08/17 00:00-01:00(北京时间)华南-广州VPC终端节点升级过程中网络将会出现1~2次闪断,每次闪断小于2秒2019/08/17 01:00-02:00(北京时间)华北-北京一2019/08/17 02:00-03:00(北京时间)华东-上海二如您有不中断传输的操作需求,请您避开升级时间段。给您带来的不便,敬请谅解。感谢您对华为云的支持!