-
本帖最后由 云彩飞扬 于 2018-3-16 11:55 编辑 DMS TCP Demo示例工程中包含DmsProducerDemo和DmsConsumerDemo两个示例,DmsProducerDemo用于展示生产消息流程,DmsConsumerDemo用于展示消费和确认消息流程。生产消息[*]创建并启动DmsProducer。 DmsProducer producer = new DmsProducerImpl();producer.start(); [*]构建要发送的消息内容。 List messages = new ArrayList();final int messageNum = 10;for (int i = 0; i messageNum; i++){ DmsMessage record = new DmsMessage(); record.setBody(("Hello DMS syn produce: " + i).getBytes()); messages.add(record);} [*]发送消息。 try{ List result = producer.produce(queueId, messages); result.forEach(r -> { System.out.println(r.getState()); });}catch (Throwable t){ t.printStackTrace();} [*]停止生产。 producer.stop();消费消息[*]创建并启动消费实例。 DmsConsumer consumer = new DmsConsumerImpl();consumer.start(); [*]消费消息。 List records = consumer.consume(queueId, groupId); [*]构建确认请求。 DmsCommitRequest commitRequest = new DmsCommitRequest();List messages = new ArrayList();for (DmsConsumeResult record : records){ System.out.println(record.getHandler()); DmsCommitItem commitItem = new DmsCommitItem(); //确认时需要回填对应消息handler commitItem.setHandler(record.getHandler()); //设置消息处理状态: true or false commitItem.setStatus(true); messages.add(commitItem);}//一次可确认多条消息commitRequest.setMessage(messages); [*]确认消息。 DmsCommitResult commitResult = consumer.commit(queueId, groupId, commitRequest); [*]停止消费。 consumer.stop();
-
本帖最后由 云彩飞扬 于 2018-3-16 11:35 编辑1.下载并解压。DMS TCP Demo示例工程代码2.打开Eclipse,通过“File -> Import…”菜单导入已存在的Maven工程,选择DmsTcpDemoClient解压目录,导入示例工程代码。3.鼠标右键点击“dms.tcp.demo”项目,在弹出的上下文菜单中选择“Run As -> Maven build…”,执行目标输入“clean package”,执行编译构建。4.构建输出位于DmsTcpDemoClient工程的target目录下,缺省文件名为dms.tcp.demo-1.0.0-SNAPSHOT.jar。5.使用dms.tcp.demo-1.0.0-SNAPSHOT.jar替换弹性云服务器DmsTcpDemoClient/dist/libs目录下的dms.tcp.demo-1.0.0.jar文件,按照“运行示例工程”执行验证。
-
本帖最后由 云彩飞扬 于 2018-3-15 18:14 编辑 开发环境Eclipse:Eclipse 3.6.0及以上版本,可至Eclipse官方网站下载。JDK:Java Development Kit 1.8.111及以上版本,可至Oracle官方下载页面下载。Maven:Apache Maven 3.0.3及以上版本。创建消息队列[*]通过HTTP API创建队列参考《分布式消息服务API参考》创建队列和查看队列。 [*]通过Web Console创建队列通过浏览器登录华为云,在分布式消息服务控制台中创建队列,队列类型选择“普通队列”或“有序队列”。请记录队列ID,后续访问需要使用。如果已创建过消息队列,可以跳过此步骤。创建消费组[*]通过HTTP API创建消费组参考《分布式消息服务API参考》创建消费组和查询消费组。 [*]通过Web Console创建消费组通过浏览器登录华为云,在分布式消息服务控制台中选择上文创建的消息队列,为该队列创建一个消费组。请记录消费组ID,后续访问需要使用。如果已为该消息队列创建过消费组,可以跳过此步骤。创建访问密钥通过浏览器登录华为云,选择“我的凭证”菜单,点击“管理访问密钥”标签,新增一组访问密钥,保存credentials.csv文件到本地。从credentials.csv文件中可以提取“Access Key Id”和“Secret Access Key”。如果之前已创建过访问密钥,可以跳过此步骤。获取项目ID通过浏览器登录华为云,选择“我的凭证”菜单,点击“项目列表”标签,根据所属区域记录对应的项目ID。获取区域和EndpointRegion域名端口号中国华北区1dms-tcp.cn-north-1.myhwclouds.com60010中国华东区2dms-tcp.cn-east-2.myhuaweicloud.com60010中国华南区1dms-tcp.cn-south-1.myhuaweicloud.com60010申请弹性云服务器通过浏览器登录华为云,在弹性云服务器控制台中申请创建一台Linux弹性云服务器,并绑定弹性IP。请记录弹性IP地址、用户名和密码,后续访问需要使用。如果已申请过华为云弹性云服务器,可以跳过此步骤。说明:弹性IP用于登录弹性云服务器,以及上传文件等。环境信息汇总表1类型项目收集的信息(以下为示例,请根据实际情况替换)弹性云服务器弹性IP114.115.141.228用户名huaweicloud密码password分布式消息服务队列名称my-tcp-queue队列ID5964181e-b67e-4d35-9281-a58c352abda6队列类型普通队列消费组名称my-tcp-group消费组IDg-c861aa48-a082-48ff-bc9d-ff36fe7aed38访问密钥AK (Access Key Id)VAODAIIJGPUAYTJRRLODSK (Secret Access Key)ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi项目ID所属区域中国华北区1项目cn-north-1项目IDbd67aaead60940d688b872c31bdc663b区域和Endpoint区域名称中国华北区1Endpointdms-tcp.cn-north-1.myhwclouds.com端口号60010DNSDNS服务器IP华北:100.125.1.250华东:100.125.17.29华南:100.125.1.250
-
ServiceComb不能做api gateway,但是却有api gateway的一些功能,功能重合怎么办。 比如:ServiceComb有限流等,但是限流一般是api gateway的功能,大部分微服务需要gateway,用作权限控制,限流等,但是如果再用ServiceComb,就会发现有一些功能是重复的,不清楚这种情况怎么解决,ServiceComb有做gateway的功能吗
-
活动时间: 输出体验报告:2018年3月5日—5月14日 体验报告评审:2018年5月15-17日 活动结果公布:2018年5月18日(所有体验报告正在公平公正地评选中,待评选完成后将公布结果) 华为云API SDK介绍: 您可以基于华为云SDK通过编写代码的方式调用华为云API,或通过发起HTTP/HTTPS请求调用华为云API的方式来使用云产品,实现对应用、资源和数据更灵活的部署、更快速的操作、更精准的使用、更及时的监控。 活动参与方式: 1、注册登录并实名认证; 2、调用已购买产品或免费试用产品的API/SDK; 3、在该贴下按模板输出体验报告(问题描述+使用界面截图); 4、体验报告评审:筛选有效体验报告后由产品专家对报告进行综合评分。 5、活动结果公布:公布活动最终结果,获奖用户奖品寄送(所有奖品均包邮)。 体验报告输出规则: 1、文字、图片必须本人原创;逻辑清晰、图文并茂容易获得专家加分; 2、内容包含但不限于产品使用感受(如使用中存在bug,接口定义不够准确、规范不够清晰、文档不够细化、很难读懂、交互性和体验性不够好,以及使用华为云API/SDK存在的问题,有哪些需要重点提升的方面等各种建议。) [color=rgb(54,56,60)]3、报告格式: a.注明购买的产品和调用的API或使用的SDK; b.反馈跟API/SDK相关的使用问题(问题描述+截图)或改进建议; c.如有重复反馈,以最先回帖的用户为准。 [color=rgb(54,56,60)]体验报告参考模板(两种方式可任选): 1、#API SDK体验报告#使用的产品名称+是否好用+有没有需要优化的地方 如:XX产品可调用的SDK支持语言太少,建议增加XX语言。 2、#API SDK体验报告# 产品名称+ 使用环节 + 问题描述 + 优化建议 + 界面截图 如:在调用XX产品API时,在XX环节发现XX问题,建议做XX优化。 [color=rgb(54,56,60)]奖项评选方式: 1、产品团队从问题或BUG的级别、用户建议的价值等方面进行综合评分。最具价值体验官须反馈提议3条以上有效体验报告; 2、各类奖项不能叠加,每个用户只能获得一个奖项,如遇同一用户获得两个奖项,则以所获最高奖项为准,其奖品顺延至下一用户; 3、如体验报告总数未达到30份,则奖项及奖品酌情处理;4、活动参与需遵守《华为云社区常规活动规则》,戳>>>这里 活动奖品展示: [color=rgb(54,56,60)]最具价值体验官(1名):华为mate 10(4GB+64GB) [color=rgb(54,56,60)]优质建议奖(3名):华为VR [color=rgb(54,56,60)]特别参与奖(15名):荣耀引擎耳机二代 华为云开发者中心:http://developer.huaweicloud.com/ 更多开发者活动请戳:礼献开发者 爱在华为云
-
本活动已结束,获奖公告详见:https://forum.huaweicloud.com/thread-8500-1-1.html 华为云DevCloud API测试功能重磅上线,助力轻松玩转API测试,降低技术门槛,适用多种角色,限时免费体验,反馈意见有机会赢取好礼,还等什么,快来参与吧!一、 活动时间2018年2月27日至2018年4月30日 二、 活动规则 1. 按照指引免费体验API测试功能,戳此查看详情>>>; 2. 体验后,回复本帖进行意见反馈; 3. 用户可从#产品功能#、#用户体验#、#使用技巧#、#实践分享#、#产品对比#、#其他#角度反馈意见,字数至少30字以上,可以提交多条反馈意见,活动结束后进行评奖; 请参照如下格式进行回帖: #用户体验#拖拽脚本模板即可编排测试用例,降低了编写测试用例的工作量,增强了使用乐趣,但拖拽仅限制于拖拽到指定方框内,而不是整个空白区域,有些不便,希望能够改善。 4. 专家评审将从用户建议的价值、问题或BUG的级别等方面进行综合评选,文字、图片需本人原创,逻辑清晰、图文并茂者加分; 5. 回复无意义内容(纯数字、标点、表情或词不达意等)、谩骂、造谣等,均视为无效; 三、 评奖方式: 以下所有奖项将于活动结束后在论坛公布获奖名单。 1. 最牛体验官 专家评审,评选出一份最有价值的体验报告,获最牛体验官奖,奖品为kindle一个; 2. 优质建议奖 专家评审,评选出三份较为优质的体验意见,获优质建议奖,奖品为肩颈**器一个; 3. 幸运满满奖 活动结束后,在所有盖楼的用户中抽取获奖楼层,获奖楼层=总楼层*中奖百分比,中奖百分比为5%、15%、25%、35%、45%、55%、65%、75%、85%、95%。例如:活动结束后总楼层为500,500*5%=25,即第25楼获奖,其他获奖楼层同理可得。如出现小数点,则四舍五入,例如:活动结束后总楼层为530,530*5%=26.5,即第27楼获奖。无效楼层不参与中奖,做顺延处理,例如:抽取获奖楼层为第5楼,但5楼为无效楼层,即顺延至第6楼获奖,若依然为无效楼层,则继续顺延,以此类推,奖品为笔记本支架一个; 四、 奖品展示: 1. 最牛体验官一名,可获得kindle一个: 精巧轻薄外观设计,电子墨水屏,媲美纸书,运行内存翻倍,更加稳定,超长续航,持久陪伴。 10268 2. 优质建议奖三名,可获得肩颈10290器一个: 红光热敷,八颗10294头,更立体更真实,正反结合,推拿捏揉层层深入,全身适用,多重享受,守护健康。10269 3. 幸运满满奖十名,可获得笔记本支架一个: 折叠便携,稳固支撑,办公要舒适,拒做低头族。 10270 五、 奖品发放说明: 获奖用户请扫描下方二维码添加服务人员微信,验证信息请输入“API”,请将华为云用户名、帖子所在楼层、姓名、手机号、收货地址发送给微信群的服务人员,奖品将于活动结束后15个工作日内发放完毕。所有奖品均包邮,不额外收取任何费用。 10271 六、 注意事项: [*] 同一ID只能获奖一次,不能重复获奖; [*] 如有重复反馈,以最先回帖的用户为准; [*] 获奖用户需在奖项公布后的7个工作日内在华为云提交实名认证,并扫描微信二维码联系工作人员,提供收货人信息,否则视为自动放弃; [*] 奖品视为特殊商品,颜色和型号随机发送,发出后,不予退换; [*] 请大家文明参与活动,凡涉及在论坛灌水、作弊等违规行为,一经查出,将取消获奖资格; [*]活动参与需遵守《华为云社区常规活动规则》,戳>>>这里。
-
前提条件1. 已经获取相关API文档。 登录华为云官网 http://support.huaweicloud.com 查看各个云服务的接口参考文档。 通过这些文档,可以学习云平台所支持的API参数。2. 获取Java SDK(jar包)及其介绍文档 登录以下网站获取Python OpenStack SDK 的官方文档: http://developer.huaweicloud.com/dev/sdk?all3. 获取华为云IAM鉴权信息和endpoint信息。 projectId/userDomainId参数获取方法见: http://forum.huaweicloud.com/forum.php?mod=viewthread&tid=1813 endpoint/AZ信息见: http://developer.huaweicloud.com/endpoint.html4. 开发环境已经安装好JDK 1.85. 欲了解Java SDK项目的源代码,请访问如下地址。 https://github.com/huawei/openstack4jJava代码示例DNS服务的简单Demo:创建zone、查询zone、删除zonepackage openstack4jdemo;import java.util.List;import com.huawei.openstack4j.core.transport.ProxyHost;import com.huawei.openstack4j.api.OSClient.OSClientV3;import com.huawei.openstack4j.api.types.ServiceType;import com.huawei.openstack4j.core.transport.Config;import com.huawei.openstack4j.model.common.Identifier;import com.huawei.openstack4j.model.dns.v2.Zone;import com.huawei.openstack4j.openstack.OSFactory;import com.huawei.openstack4j.openstack.dns.v2.domain.DesignateZone;import com.huawei.openstack4j.openstack.identity.internal.OverridableEndpointURLResolver;public class dns_test { private static final String LANGUAGE = "zh-cn"; public static void main(String[] args) { // step 1: add cloud service override endpoint 注意:示例中endpoint都使用华北区的,如果需要在华南区操作资源,需要相应修改为华南区的endpoint OverridableEndpointURLResolver endpointResolver = new OverridableEndpointURLResolver(); endpointResolver.addOverrideEndpoint(ServiceType.VOLUME_BACKUP, "https://vbs.cn-north-1.myhwclouds.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.DNS, "https://dns.myhwclouds.com/v2"); endpointResolver.addOverrideEndpoint(ServiceType.AUTO_SCALING, "https://as.cn-north-1.myhwclouds.com/autoscaling-api/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_EYE, "https://ces.cn-north-1.myhwclouds.com/V1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.LOAD_BALANCER, "https://elb.cn-north-1.myhwclouds.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAP_REDUCE, "https://mrs.cn-north-1.myhwclouds.com/v1.1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.KEY_MANAGEMENT, "https://kms.cn-north-1.myhwclouds.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_TRACE, "https://cts.cn-north-1.myhwclouds.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.ANTI_DDOS, "https://antiddos.cn-north-1.myhwclouds.com/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.Notification, "https://smn.cn-north-1.myhwclouds.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MessageQueue, "https://dms.cn-north-1.myhwclouds.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAAS, "https://maas.cn-north-1.myhwclouds.com/v1/%(project_id)s/objectstorage"); endpointResolver.addOverrideEndpoint(ServiceType.DATABASE, "https://rds.cn-north-1.myhwclouds.com"); // step 2: setup the authentication credit String user = "wanglianmin"; String password = "XXXX"; String projectId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // 华为云-用户中心-账号管理-基本信息-安全凭证-管理我的凭证,项目ID,按照region区分,如果想在华北创建资源,就找cn-north-1对应的项目ID。 String userDomainId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // 华为云-用户中心-账号管理-基本信息-安全凭证-管理我的凭证,账户ID,各个区域统一。 String authUrl = "https://iam.cn-north-1.myhwclouds.com/v3"; // step 3: initial OpenStack4j Client OSFactory.enableHttpLoggingFilter(true); // config of the client // with language setting is required for RDS(trove&database) service Config config = Config.newConfig().withEndpointURLResolver(endpointResolver).withLanguage(LANGUAGE) .withSSLVerificationDisabled(); // initial client OSClientV3 osclient = OSFactory.builderV3().withConfig(config).endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomainId)).scopeToDomain(Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate(); // // use client to visit DNS API // // create a public zone Zone creation = DesignateZone.builder().name("sdk.tutorial.com.").description("tutorial").ttl(600) .email("admin@tutorial.com").build(); Zone zone = osclient.dns().zones().create(creation); // get the created zone Zone get = osclient.dns().zones().get(zone.getId()); // delete the created zone //osclient.dns().zones().delete(get.getId()); List list = osclient.dns().zones().list(); System.out.println(list); // delete zone osclient.dns().zones().delete(get.getId()); }}[/code]再来一个ECS弹性云服务器的示例,包括查询Server、创建Server、启动、停止、重启、删除Server[code]import java.util.List;import java.util.stream.Collectors;import sun.misc.BASE64Encoder;import sun.misc.BASE64Decoder;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;import com.huawei.openstack4j.api.Builders;import com.huawei.openstack4j.api.OSClient.OSClientV3;import com.huawei.openstack4j.api.types.ServiceType;import com.huawei.openstack4j.core.transport.Config;import com.huawei.openstack4j.model.common.ActionResponse;import com.huawei.openstack4j.model.common.Identifier;import com.huawei.openstack4j.openstack.OSFactory;import com.huawei.openstack4j.openstack.identity.internal.OverridableEndpointURLResolver;import com.huawei.openstack4j.model.compute.Action;import com.huawei.openstack4j.model.compute.RebootType;import com.huawei.openstack4j.model.compute.Server;import com.huawei.openstack4j.model.compute.Server.Status;import com.huawei.openstack4j.model.compute.ServerCreate;public class Demo_for_WebSite { private static final String LANGUAGE = "zh-cn"; public static void main(String[] args) { /* 第一步:填入华为云区域的endpoint * 如下,对接华北区1就需要填入华北区服务的endpoint,以下为全量服务,用户根据自己的需要进行覆写 */ OverridableEndpointURLResolver endpointResolver = new OverridableEndpointURLResolver(); endpointResolver.addOverrideEndpoint(ServiceType.VOLUME_BACKUP, "https://vbs.cn-north-1.myhuaweicloud.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.DNS, "https://dns.myhuaweicloud.com/v2"); endpointResolver.addOverrideEndpoint(ServiceType.AUTO_SCALING, "https://as.cn-north-1.myhuaweicloud.com/autoscaling-api/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_EYE, "https://ces.cn-north-1.myhuaweicloud.com/V1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.LOAD_BALANCER, "https://elb.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAP_REDUCE, "https://mrs.cn-north-1.myhuaweicloud.com/v1.1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.KEY_MANAGEMENT, "https://kms.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_TRACE, "https://cts.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.ANTI_DDOS, "https://antiddos.cn-north-1.myhuaweicloud.com/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.Notification, "https://smn.cn-north-1.myhuaweicloud.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MessageQueue, "https://dms.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAAS, "https://maas.cn-north-1.myhuaweicloud.com/v1/%(project_id)s/objectstorage"); endpointResolver.addOverrideEndpoint(ServiceType.DATABASE, "https://rds.cn-north-1.myhuaweicloud.com"); /* 第二步: 配置鉴权信息(以对接华北区为例) * user为用户名 * projectId为华为云控制台-账户中心-基本信息-管理我的凭证-项目列表中华北区的项目ID * userDomainId为华为云控制台-账户中心-基本信息-管理我的凭证的账户ID * authURL为IAM服务华北区的域名 */ String user = "wanglianmin"; String password = "XXXXXX"; String projectId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; String userDomainId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; String authUrl = "https://iam.cn-north-1.myhuaweicloud.com/v3"; // 第三步: 初始化一个连接 OSFactory.enableHttpLoggingFilter(true); //调试用,可以显示request body和response body Config config = Config.newConfig().withEndpointURLResolver(endpointResolver).withLanguage(LANGUAGE) .withSSLVerificationDisabled(); OSClientV3 osclient = OSFactory.builderV3().withConfig(config).endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomainId)).scopeToDomain(Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate(); // 第四步: 过滤查询弹性云服务器列表 Map filter_name = new HashMap(); filter_name.put("name", "ecs"); filter_name.put("status", "ACTIVE"); List servers = osclient.compute().servers().list(filter_name); System.out.println(servers); // 第五步:创建虚拟机,填入所需参数;停止、启动、重启、删除虚拟机 String imageId = "1189efbf-d48b-46ad-a823-94b942e2a000"; String flavorId = "s2.small.1"; String networkId = "ef039b60-6a14-42d1-963b-687b627fea08"; String imageId_Windows = "201150a6-479e-45f3-8a4c-fe91855758f0"; // 创建Linux密码虚拟机,目前密码使用user-data参数传入,将来会统一使用adminPass参数(注意echo后面的是单引号,单引号!!!) String userData_org = "#!/bin/bash \r\n echo ´root:P@ssWr0d123´ | chpasswd ;"; byte[] userData_byte = userData_org.getBytes(); String userData = new BASE64Encoder().encode(userData_byte); // generate networkList ArrayList networkList = new ArrayList(); networkList.add(networkId); // generate server body ServerCreate sc_Linux = Builders.server().name("zt-Linux-test-sdk").flavor(flavorId).image(imageId).availabilityZone("cn-north-1b").userData(userData).networks(networkList).build(); System.out.println("New Server body " + sc_Linux); Server newServer = osclient.compute().servers().boot(sc_Linux); osclient.compute().servers().waitForServerStatus(newServer.getId(), Status.ACTIVE, 10, TimeUnit.MINUTES); System.out.println("New Server " + newServer); // 创建Windows密码虚拟机,目前密码使用metadata参数传入,将来会统一使用adminPass参数 ServerCreate sc_Windows = Builders.server().name("zt-Windows-test-sdk").flavor(flavorId).image(imageId_Windows).availabilityZone("cn-north-1b").addMetadataItem("admin_pass", "P@ssWr0d123").networks(networkList).build(); System.out.println("New Server body " + sc_Windows); Server newServer_Windows = osclient.compute().servers().boot(sc_Windows); osclient.compute().servers().waitForServerStatus(newServer_Windows.getId(), Status.ACTIVE, 10, TimeUnit.MINUTES); System.out.println("New Server " + newServer_Windows); // 停止虚拟机 ActionResponse repStop = osclient.compute().servers().action(newServer.getId(), Action.STOP); if(repStop.isSuccess()) { System.out.println("Stop the server success, status = " + newServer.getId() + newServer.getVmState()); }else { System.out.println("Stop the server failed " + newServer.getId()); } osclient.compute().servers().waitForServerStatus(newServer.getId(), Status.SHUTOFF, 3, TimeUnit.MINUTES); // 启动虚拟机 ActionResponse repStart = osclient.compute().servers().action(newServer.getId(), Action.START); if(repStart.isSuccess()) { System.out.println("Start the server success, status = " + newServer.getId() + newServer.getVmState()); }else { System.out.println("Start the server failed " + newServer.getId()); } osclient.compute().servers().waitForServerStatus(newServer.getId(), Status.ACTIVE, 3, TimeUnit.MINUTES); // 重启虚拟机 ActionResponse repReboot = osclient.compute().servers().reboot(newServer.getId(), RebootType.SOFT); if(repReboot.isSuccess()) { System.out.println("Reboot the server success, status = " + newServer.getId() + newServer.getVmState()); }else { System.out.println("Reboot the server failed " + newServer.getId()); } osclient.compute().servers().waitForServerStatus(newServer.getId(), Status.ACTIVE, 3, TimeUnit.MINUTES); // 删除虚拟机 ActionResponse repDelete = osclient.compute().servers().delete(newServer.getId()); if(repDelete.isSuccess()) { System.out.println("Delete the server success, status = " + newServer.getId() + newServer.getVmState()); }else { System.out.println("Delete the server failed " + newServer.getId()); } ActionResponse repDelete_Windows = osclient.compute().servers().delete(newServer_Windows.getId()); if(repDelete_Windows.isSuccess()) { System.out.println("Delete the server success, status = " + newServer_Windows.getId() + newServer.getVmState()); }else { System.out.println("Delete the server failed " + newServer_Windows.getId()); } }
-
本帖最后由 开发者 于 2018-3-16 09:29 编辑不少开发者反馈在使用华为云SDK/API时遇到了各种各样的坑: 小明觉得文档不够细化,很难读懂; 老王觉得SDK每个接口可调用次数不明确; 小强认为SDK/API没有统一规范;...... 做为开发者,你在使用华为云SDK/API时,都遇到了哪些糟心的问题? 你觉得华为云SDK/API目前存在的最大问题是什么?有哪些需要重点提升的地方? 说出你的问题或建议就有机会挑战最具价值体验官,更有mate10等你来领! -----------------------------------------我是活动详情分割线----------------------------------------- 活 动 主 题 华为云API SDK上线挑战最具价值体验官 mate10等你领! 活动时间: 调用API/SDK并输出体验报告:2017年12月15日—2018年3月11日 体验报告评审:2018年3月12-14日 活动结果公布:2018年3月15日 华为云API SDK介绍: 您可以基于华为云SDK通过编写代码的方式调用华为云API,或通过发起HTTP/HTTPS请求调用华为云API的方式来使用云产品,实现对应用、资源和数据更灵活的部署、更快速的操作、更精准的使用、更及时的监控。 活动参与方式: 1、注册登录,点击领取代金券礼包,轻松上云; 2、调用已购买产品或礼包产品的API/SDK; 3、在该贴下按模板输出体验报告(问题描述+使用界面截图); 4、体验报告评审:筛选有效体验报告后由产品专家对报告进行综合评分。 5、活动结果公布:公布活动最终结果,获奖用户奖品寄送。 体验报告输出规则: 1、文字、图片必须本人原创;逻辑清晰、图文并茂容易获得专家加分; 2、内容包含但不限于产品使用感受(如使用中存在bug,接口定义不够准确、规范不够清晰、文档不够细化、很难读懂、交互性和体验性不够好,以及使用华为云API/SDK存在的问题,有哪些需要重点提升的方面等各种建议。) 3、报告格式: a.注明购买的产品和调用的API或使用的SDK; b.反馈跟API/SDK相关的使用问题(问题描述+截图)或改进建议; c.如有重复反馈,以最先回帖的用户为准。 奖项评选方式: 1、产品团队从问题或BUG的级别、用户建议的价值等方面进行综合评分。最具价值体验官须反馈提议3条以上有效体验报告; 2、各类奖项不能叠加,每个用户只能获得一个奖项,如遇同一用户获得两个奖项,则以所获最高奖项为准,其奖品顺延至下一用户,如活动体验报告未达到30份,奖项另外酌情处理。 3、为达到活动公平公正公开,避免恶意刷楼等行为,回复无意义内容(纯数字、标点、表情或词不达意等)、谩骂、造谣等,均视为无效。 4、活动参与需遵守《华为云社区常规活动规则》,戳>>>这里 活动奖品展示: 最具价值体验官(1名):华为mate 10(4GB+64GB) 6741 优质建议奖(5名):华为VR 6752 特别参与奖(20名):荣耀引擎耳机二代 6753 体验报告参考模板(两种方式可任选): 1、#API SDK体验报告#使用的产品名称+是否好用+有没有需要优化的地方 如:XX产品可调用的SDK支持语言太少,建议增加XX语言。 2、#API SDK体验报告# 产品名称+ 使用环节 + 问题描述 + 优化建议 + 界面截图 如:在调用XX产品API时,在XX环节发现XX问题,建议做XX优化。 6883 10361(点击图片即可参与活动) 了解更多活动详情,领产品代金券,请戳链接: http://activity.huaweicloud.com/ ... 9N-sso&locale=zh-cn 参考: 密钥管理服务API调用的简单实现(附完整代码) http://forum.huaweicloud.com/for ... =5408&highlight=API 华为云sdk调用知识1-华为云的帐户介绍: http://forum.huaweicloud.com/thread-5371-1-1.html 华为云sdk调用知识2-domain_id/user_id以及project_id: http://forum.huaweicloud.com/thread-5372-1-1.html 【干货】【详情】用华为云账号通过smn-sdk-java简单发送SMN短息: http://forum.huaweicloud.com/thread-5187-1-2.html 华为云ECS服务API使用指南(1) - 获取虚拟机列表: http://forum.huaweicloud.com/thread-397-1-1.html 华为云ECS服务API使用指南(2) - 根据浮动ip过滤查询虚拟机列表: http://forum.huaweicloud.com/thread-623-1-1.html 华为云ECS服务API使用指南(3) - 使用python cli获取keystone认证: http://forum.huaweicloud.com/thread-858-1-1.html 本活动由开发者中心与华为云社区共同策划,有任何活动问题,请联系工作人员咨询。 本活动参加华为云社区嘉年华活动盛典,详情请戳: http://activity.huaweicloud.com/carnival/index.html?icn_source=%E5%88%86%E4%BC%9A%E5%9C%BA&icn_campaign=JNH2018
-
本帖最后由 Mercy 于 2017-11-27 10:33 编辑前提条件 1. 已经获取相关API文档。 登录以下网站获取API相关文档: http://developer.huaweicloud.com/index.html 通过这些文档,可以学习云平台所支持的API参数。 2. 已获取Python OpenStack SDK的官方文档。 登录以下网站获取Python OpenStack SDK 的官方文档: https://developer.openstack.org/ ... dk/users/index.html 了解如何使用Python OpenStack SDK对用户而言非常重要。 3. 已经申请到云平台账号,并开通所需的服务。 Project/Domain参数获取方法见: http://forum.huaweicloud.com/forum.php?mod=viewthread&tid=1813 endpoint/AZ信息见: http://developer.huaweicloud.com/endpoint.html 4. python-openstacksdk 适用于 Python 2.7.x 和 3.5.x 系列版本。 5. 欲了解Python SDK项目的源代码,请访问如下地址。 https://github.com/huawei/python-openstacksdk SDK获取与安装(使用git) 请从GitHub 上下载源代码进行安装。(以下为Linux示例,Windows可以使用pycharm)cd your-workspace-folder git clone https://github.com/Huawei/python ... python-openstacksdk cd huawei-python-openstacksdk # install master git checkout master pip install -r requirements.txt python setup.py install 脚本示例:(脚本示例放在examples文件夹下,见帖子最下方截图) 脚本示例中包含如下内容: 1、创建虚拟机(带安全组、带反亲和性组),将虚拟机加入到ELB后端,从ELB上移除虚拟机,查询ELB后端,删除虚拟机、 2、启动、停止、查询虚拟机 3、创建空卷,创建快照,从快照创建卷,挂载卷到虚拟机,从虚拟机卸载卷,删除卷,删除快照 4、申请弹性IP并绑定给虚拟机,查询弹性IP,删除弹性IP #encoding:utf-8 # Copyright 2017 HuaWei Tld # Copyright 2017 OpenStack.org # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. #encoding:utf-8 import sys reload(sys) sys.setdefaultencoding(´utf8´) import os import random import time from openstack import connection from openstack import exceptions # those services´s endpoint will be auto detected from V3 auth token # # Nova -> ECS # Cinder -> EVS # Neutron -> VPC # Keystone -> IAM # Glance -> IMS # Heat -> RTS # # so, we do not need to setup the endpoint override for them. # setup endpoint override for cloud services os.environ.setdefault( ´OS_CLOUD_EYE_ENDPOINT_OVERRIDE´, ´https://ces.cn-north-1.myhwclouds.com/V1.0/%(project_id)s´ ) os.environ.setdefault( ´OS_VOLUME_BACKUP_ENDPOINT_OVERRIDE´, ´https://vbs.cn-north-1.myhwclouds.com/v2/%(project_id)s´ ) os.environ.setdefault( ´OS_LOAD_BALANCER_ENDPOINT_OVERRIDE´, ´https://elb.cn-north-1.myhwclouds.com/v1.0/%(project_id)s´ ) # create connection with authenticationes username = "XXXXXXXX" password = "XXXXXXXX" projectId = "XXXXXXXX" userDomainId = "XXXXXXXX" auth_url = "https://iam.cn-north-1.myhwclouds.com/v3" conn = connection.Connection(auth_url=auth_url, user_domain_id=userDomainId, project_id=projectId, username=username, password=password) # parameteres for ECS,VPC RANDOM = random.randint(1000, 9999) # 使用随机数以确保查询结果的唯一性 SERVER_NAME = "test-pythonsdk-" + str(RANDOM) IMAGE_NAME = "test-image-" + str(RANDOM) flavor = "s2.small.1" availability_zone = "cn-north-1a" image_id = "c4b5bef2-5cd4-4d26-824c-456ba4515315" network_id = "eafa3880-32f9-4586-9545-1bf5bf9a1842" server_group_id = "70542220-2e4b-499f-b117-16949f9fa6f6" # Nova anti-affinity server group security_group_id = "90241b5b-cf8c-4940-b118-265204b5cdc9" # Neutron security group keypair = "KeyPair-e344" # parameteres for ELB mds_loadbalancer = "16dbea1701154c0ba48b70a5540bfead" mds_listener80 = "2cf38492f14140eb85b5e76ce8d5af74" mds_listener1860 = "e2d3d83e10024470baabe17c537c7444" # parameteres for Scaling resources template_server_id = "de8c4868-6088-4b47-9fdd-58f41c3b39ac" template_volume_id = "089911f0-7065-4645-b66b-75c8c65f8d91" def create_server(): # 带安全组、反亲和性组、AZ创建虚拟机,不支持min_count参数 server = conn.compute.create_server( name=SERVER_NAME, image_id=image_id, flavor_id=flavor, networks=[{"uuid": network_id}], key_name=keypair, availability_zone=availability_zone, security_groups=[{"name": security_group_id}], scheduler_hints={"group": server_group_id}) server = conn.compute.wait_for_server(server, interval=10, wait=300) return server def delete_server(server): conn.compute.delete_server(server) def start_server(server): conn.compute.start_server(server) conn.compute.wait_for_server(server, interval=5, wait=150) # 参数server应该是Server对象,而不是String id def stop_server(server): conn.compute.stop_server(server) conn.compute.wait_for_server(server, status="SHUTOFF", interval=5, wait=150) def attach_volume(server, volume_id): conn.compute.create_volume_attachment(server, volume_id=volume_id) def detach_volume(server, volume_id): conn.compute.delete_volume_attachment(volume_id, server) def wait_for_volume(volume, status="available", interval=5, wait=150, failures=[´error´]): volume = conn.block_store.get_volume(volume) if volume.status == status: return volume total_sleep = 0 if failures is None: failures = [] while total_sleep wait: volume = conn.block_store.get_volume(volume) if volume.status == status: return volume if volume.status in failures: msg = ("Volume %s transitioned to failure state %s" % (volume.id, volume.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (volume.id, status) raise exceptions.ResourceTimeout(msg) def wait_for_snaps**(snaps**, status="available", interval=5, wait=150, failures=[´error´]): snaps** = conn.block_store.get_snaps**(snaps**) if snaps**.status == status: return snaps** total_sleep = 0 if failures is None: failures = [] while total_sleep wait: snaps** = conn.block_store.get_snaps**(snaps**) if snaps**.status == status: return snaps** if snaps**.status in failures: msg = ("Snaps** %s transitioned to failure state %s" % (snaps**.id, snaps**.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (snaps**.id, status) raise exceptions.ResourceTimeout(msg) # def create_image(server, name, **metadata): # 该方法限制太多,不建议使用,建议在控制台页面导出镜像 # server = conn.compute.get_server(server) # conn.compute.create_server_image(server, name, **metadata) # # 请确保name的唯一性 # images = conn.image.images(name=name, owner_id=server.project_id) # return images.next() def list_servers(**query): print("****************************List Servers:****************************") for server in conn.compute.servers(**query): print(server.name) def list_loadbalancers(): print(´****************************List Load Balancer:****************************´) query = { # ´vip_address´: ´192.168.2.36´ # ´name´: ´elb-yc5f´ } for load_balancer in conn.load_balancer.load_balancers(**query): print(load_balancer) def add_members_to_listener(listener, members): print(´****************************Add Member To Listener:****************************´) # listener = "83c8765e77a84f7b9dbe4215564171cc" # members = [{"server_id": "5b9762f4-4883-4664-9ca6-6bd9feef75df", "address": "192.168.0.40"}] conn.load_balancer.add_members_to_listener(listener, members) def wait_for_job(job_id, status="SUCCESS", interval=3, wait=60, failures=[´FAIL´]): job = conn.load_balancer.get_job(job_id) if job.status == status: return job total_sleep = 0 if failures is None: failures = [] while total_sleep wait: job = conn.load_balancer.get_job(job_id) if job.status == status: return job if job.status in failures: msg = ("Job %s transitioned to failure state %s" % (job_id, job.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (job_id, status) raise exceptions.ResourceTimeout(msg) # 创建、删除虚拟机示例,并将虚拟机加入listener后端 print("****************************Create Server:****************************") test_server = create_server() print(test_server) print("****************************Add Member to Listener:****************************") test_server_ip = test_server.addresses.values()[0][0].get(´addr´) # 获取虚拟机IP test_add_member = [{"server_id": test_server.id, "address": test_server_ip}] # 组装member消息体 add_job = conn.load_balancer.add_members_to_listener(mds_listener80, test_add_member) # 添加ECS后端到ELB上 add_job = wait_for_job(add_job.id) # 等待后端添加成功 print(add_job) listener_members = conn.load_balancer.listener_members(mds_listener80) # 查询ECS后端列表 member_id = "" for member in listener_members: # 获取member_id print(member) if member.server_id == test_server.id: member_id = member.id break print("****************************Remove Member from Listener:****************************") test_remove_member = [member_id] # 组装member消息体 remove_job = conn.load_balancer.remove_members_of_listener(mds_listener80, test_remove_member) # 移除ECS后端 remove_job = wait_for_job(remove_job.id) # 等待后端移除成功 print(remove_job) listener_members = conn.load_balancer.listener_members(mds_listener80) # 查询ECS后端列表 for member in listener_members: print(member) delete_server(test_server.id) # 删除虚拟机 # 启动、停止、查询虚拟机 conn.compute.start_server(template_server_id) # 启动虚拟机 template_server = conn.compute.find_server(template_server_id) # 查询指定server # 等待server状态为ACTIVE,注意wait_for_server中的server参数要是Server对象,而不能只是server_id template_server = conn.compute.wait_for_server(template_server, interval=5, wait=150) print(template_server) conn.compute.stop_server(template_server_id) # 停止虚拟机 template_server = conn.compute.wait_for_server(template_server, status="SHUTOFF", interval=5, wait=150) print(template_server) servers = conn.compute.servers(name="test") # 过滤查询虚拟机示例 for server in servers: print server # 卷、快照操作示例:创建空白卷,创建快照,从快照创建卷,挂卸卷,删除卷 blank_volume = conn.block_store.create_volume(size=150, availability_zone=availability_zone, name="test-blank-volume", volume_type="SAS") # 创建空卷,SATA、SAS、SSD blank_volume = wait_for_volume(blank_volume) # 等待卷状态为available print(blank_volume) attach_volume(template_server_id, blank_volume.id) # 挂载卷到虚拟机上,要求卷和虚拟机在同一AZ blank_volume = wait_for_volume(blank_volume, status="in-use") snaps** = conn.block_store.create_snaps**(name="test-snaps**-from-datavolume", volume_id=template_volume_id, is_forced=True) # 从数据盘创建快照 snaps** = wait_for_snaps**(snaps**) # 等待快照状态为available print(snaps**) 从快照创建卷,要求新卷与快照的AZ相同,volume-type相同 snaps**_volume = conn.block_store.create_volume(snaps**_id=snaps**.id, availability_zone=availability_zone, name="test-volume-from-snaps**", volume_type="SAS") snaps**_volume = wait_for_volume(snaps**_volume) # 等待卷状态为available print(snaps**_volume) attach_volume(template_server_id, snaps**_volume.id) # 挂载卷到虚拟机上 snaps**_volume = wait_for_volume(snaps**_volume, status="in-use") detach_volume(template_server_id, blank_volume.id) # 卸载卷 detach_volume(template_server_id, snaps**_volume.id) # 卸载卷 blank_volume = wait_for_volume(blank_volume) # 等待卷状态为available snaps**_volume = wait_for_volume(snaps**_volume) # 等待卷状态为available conn.block_store.delete_volume(blank_volume) # 删除卷,需要卷状态为available,且卷没有快照 conn.block_store.delete_volume(snaps**_volume) # 删除卷,需要卷状态为available,且卷没有快照 conn.block_store.delete_snaps**(snaps**) # 删除快照 # 弹性IP相关操作: 申请EIP、绑定EIP、解绑定EIP server_inte**ce = conn.compute.server_inte**ces(template_server_id).next() # 获取虚拟机第一张网卡ID print(server_inte**ce) net_external = conn.network.networks(is_router_external=True).next() # 获取公网网络 print(net_external) floating_ip = conn.network.create_ip(floating_network_id=net_external.id, port_id=server_inte**ce.port_id) # 申请EIP,带宽默认是300M/s time.sleep(10) # 等待弹性IP创建并绑定成功 floating_ip = conn.network.get_ip(floating_ip) # 查询EIP状态 print(floating_ip) conn.network.delete_ip(floating_ip) # 删除EIP
-
本帖最后由 Mercy 于 2018-1-5 11:34 编辑 简介华为云是基于开源OpenStack架构进行开发的,已经获得开源Defcore认证。IaaS基础组件:IAM(Keystone)、ECS(Nova)、EVS(Cinder)、VPC(Neutron)、IMS(Glance)遵循原生OpenStack API规范,能够使用开源CLI Client去调用华为云接口管理云上资源。 前提1、 客户已经在华为云注册账户2、 客户有一台能够访问公网的Linux服务器,推荐Ubuntu/CentOS/RedHat操作系统,其上已经安装python、pip工具3、 客户已经获取华为云endpoint,http://developer.huaweicloud.com/endpoint.html4、 客户在华为云控制台-用户-我的凭证处获取鉴权信息:User、Domain、Tenant、Project4935 准备CLI执行机 1、安装开源CLI客户端华为云OpenStack基于社区Mitaka版本,能够适配Mitaka版本的client端,需要在Linux服务器上安装python包,所需版本如下:python-openstackclient: 3.2.1python-novaclient: 6.0.0python-glanceclient: 2.5.0python-keystoneclient: 3.5.1python-neutronclient: 6.0.0python-cinderclient: 1.9.0python-heatclient: 1.5.1 安装命令示例:pip install python-novaclient==6.0.0 2、配置环境变量export OS_USERNAME=wanglianmin # 输入User信息export OS_USER_DOMAIN_NAME=wanglianmin # 输入Domain信息export OS_PROJECT_DOMAIN_NAME=wanglianmin # 输入Domain信息export OS_PASSWORD=XXXXXX # 输入华为云账号密码export OS_TENANT_NAME=cn-north-1 # 输入Tenant信息export OS_PROJECT_NAME=cn-north-1 # 输入Project信息export OS_AUTH_URL=https://iam.cn-north-1.myhwclouds.com/v3 # 输入IAM的endpoint,使用v3鉴权接口# No changes needed beyond this pointexport NOVA_ENDPOINT_TYPE=publicURLexport OS_ENDPOINT_TYPE=publicURLexport CINDER_ENDPOINT_TYPE=publicURLexport OS_VOLUME_API_VERSION=2export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2 CLI命令示例 创建云服务器ECS:neutron net-list 查询网络neutron security-group-list 查询安全组nova flavor-list 查询规格nova server-group-list 查询云服务器组nova keypair-list 查询密钥对glance image-list 查询镜像创建虚拟机,带密钥、带安全组、带云服务器组nova boot --flavor s2.large.2 --image b966f093-7f4c-49b9-a932-534c4d1d7bdf(镜像uuid) --availability-zone cn-north-1a(可用区) --nic net-id=eafa3880-32f9-4586-9545-1bf5bf9a1842(网络uuid) --security-group snsg-hqtfl1-wp(安全组名称,不填就创建在默认安全组default下) --hint group=70542220-2e4b-499f-b117-16949f9fa6f6(云服务器组uuid,保证虚拟机分布在不同的物理主机上,只在创建时生效) --key-name KeyPair-e344(密钥name) test_cli_group(虚拟机名称) 上面创建虚拟机使用的是密钥对方式,那么如何在创建虚拟机时注入初始化密码呢? 原理介绍: 华为云使用开源第三方软件Cloudinit(Linux系统软件,已预装到公共镜像中)/CloudBase-Init(Windows系统软件,已预装到公共镜像中),去实现GuestOS自定义初始化密码(密码要求大写字母、小写字母、数字、特殊字符四选三)配置。 操作指导: 1、对于Windows虚拟机,增加--meta admin_pass=$password(比如cloud.1234): nova boot --flavor s2.large.2 --image b966f093-7f4c-49b9-a932-534c4d1d7bdf --availability-zone cn-north-1a--nic net-id=eafa3880-32f9-4586-9545-1bf5bf9a1842 --security-group snsg-hqtfl1-wp--hint group=70542220-2e4b-499f-b117-16949f9fa6f6 test_cli_group --meta admin_pass=cloud.1234 2、对于Linux虚拟机,增加--user-data参数: 首先在当前目录下vi一个文件,文件名自定义,比如user_data_linux.txt ,内容格式如下: #!/bin/bash echo 'root:cloud.1234' | chpasswd ; 第二步执行nova boot命令,带入user-data参数 nova boot --flavor s2.large.2 --image b966f093-7f4c-49b9-a932-534c4d1d7bdf --availability-zone cn-north-1a --nic net-id=eafa3880-32f9-4586-9545-1bf5bf9a1842 --security-group snsg-hqtfl1-wp --hint group=70542220-2e4b-499f-b117-16949f9fa6f6 test_cli_group --user-data user_data_linux.txt 创建网络:neutron net-create test333 创建网络neutron subnet-create test333 10.108.100.0/24 --name test-subnet (CIDR要在VPC网段内,比如VPC网段为10.108.0.0/16,subnet网段可以为10.108.100.0/24) 在网络下创建子网neutron router-list 查询路由器,对应于console控制台页面的虚拟机私有云VPCneutron router-inte**ce-add bcc0e8c3-a734-4c54-b206-95e3cc94bf39(路由器uuid) 8ccd2559-e0e5-4866-b4f1-54e0946df8e8(子网uuid) 将子网添加到router上,这样才能与其他子网三层互通,才能绑定EIP,配置VPN隧道 卷操作:cinder create 100 --name data-volume --volume-type SAS(SATA/SAS/SSD) --availability-zone cn-north-1a(可用区) nova volume-attach 9d9025bd-fa5d-4bd7-9b39-6ddf0689c5be(server_uuid) b4e08076-bb3a-4a63-ac1f-30fee7e64f99(volume_uuid) 挂载卷到虚拟机(注意:虚拟机ECS与卷EVS要在相同的AZ下)
-
本帖最后由 Tim Lee 于 2017-11-17 14:32 编辑解读华为云RDS技术如何助力企业IT云转型 云趋势 据《福布斯》网站报道,贝恩咨询公司(Bain&Company)最新的一份报告称,预计到2020年,全球云计算市场规模将达到3900亿美元。与2015年的1800亿美元规模相比,意味着该市场年均复合增长率(CAGR:CompoundAnnual Growth Rate,以下简称CAGR)将达到17%。 目前超过90%的客户对的需求为:替换或者升级现有的云服务、某些非关键应用,以及创建新的数字业务。 报告显示,在《财富》全球50强企业当中,有48家公司公开宣布了自己的云部署计划,其中多家企业的IT部门已在广泛使用云服务。 企业IT云转型已经成为趋势,企业对云服务完成了由“不放心”,“不安全”到“云化”纳入企业规划的转变,云时代已经到来。 本文将从一个用户的角度为您解读华为云服务如何助力企业IT云化,并在华为云服务中RDS技术上能给企业带来怎么样的支持。 认识云服务 那么是什么云服务呢?大家都有去饭店吃饭消费的经历,其实一道菜端到饭桌前包含很多服务在里面: [*]基础原材料类:食材,水,油盐酱醋等多种辅料,店面,餐椅,装修,空调,宽带等 这个恰似云服务里的IASS(基础设施即服务,又简称I层) [*]平台工具类:菜刀,砧板,煤气灶,锅碗瓢盆以及各种工具。 这个恰似云服务里的PASS(平台即服务,又简称P层) [*]成果类:一道道美味的菜肴。 这个恰似云服务里的SASS(软件即服务,又简称S层) 那么作为客户的我们所要做的只有几件事:1.点菜。 2.品尝。3.买单。简单快捷 :) 如果您不满意菜的味道,您还能要求换菜,如果您今天胃口好,您还能按需加菜。这个服务体验实际上跟“云服务”很类似。以上提到的三层也是云服务构成,云服务实际上是基于云平台的服务打包,下图展示了云服务能提为企业供多种层次的服务,甚至是“一站式”,“**”服务。 (云服务三层结构如下图) 4800 为什么要选择云服务/RDS 那么有些持家有道的朋友可能会说:饭店吃饭是很方便,但是我自己做比在外面吃便宜。“云服务”恰恰相反,“云服务”更像一家亲民饭店,不但各方面服务有更保障,而且价格还比自己做便宜放心。 我们如果想建立一个基于数据库的企业软件应用,传统的做法是自建数据库,当然我们也可以选择数据库on云服务器(云服务里的I层服务)、RDS(云服务里的S层服务)等,下图详细的展示了几选择对比,可以看出RDS具有便捷,弹性,稳定,成本更低廉的优势: 4886 图1:数据库解决方案详细对比 深入浅出RDS RDS(Relational Database Service,关系型数据库服务)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。 RDS具有较为完善的性能监控体系和多重安全防护措施,能使企业用户在云中轻松设置、操作和扩展关系型数据库。通过RDS控制台,可以执行所有必需任务而无需编程,简化运营流程,减少日常运维工作量,从而能够专注于应用开发和业务发展。 用户访问RDS实例时,需要经过ECS(Elastic Cloud Server,弹性云服务器),具体关系如图2所示。 4887 图2:访问RDS RDS是以集群为单位进行组织,一个集群由多个实例构成,集群中包含一个主机,还可能包含一个备机和若干个只读实例,它们一起为业务提供数据库服务。 RDS的最小管理单元是实例,一个实例代表了一个独立运行的关系型数据库,实例可进行如下分类: [*]主实例 [*]备实例 [*]只读实例 用户可以在RDS系统中自助创建及管理各种数据库引擎的实例。 RDS Open API 使用场景 RDS的Open API提供针对用户数据库实例的创建、查看、删除等基本操作,以及查询系统支持的API版本、数据库引擎及版本、运行环境规格、可用区域等操作。其主要的调用场景如图3和图4所示。 4888 图3:使用场景一 在创建实例之前,需要获取系统支持的数据库引擎及版本,运行环境规格以及可用区域信息。 在获取到信息之后,可以将返回结果作为调用参数,执行创建实例操作。 在实例创建成功后,用户可以对自己所属的实例进行列举、查询详细信息、以及删除操作。 4889 图4:使用场景二 数据库实例需要先查询数据库所有参数和参数信息后才能进行设置参数取值和参数恢复默认值。 数据库实例可以进行扩容和重启,可以将返回的任务号作为调用参数查询异步任务的进展情况。 RDS Open API 涉及的数据模型 在RDS的Web界面中,考虑到面向用户的易用性,将用户的数据库实例组织成集群的形式进行展现,通常一个MySQL集群中可以包含一个主实例、一个HA备实例以及若干个只读实例,或者只包含一个主实例和若干个只读实例,不包含备实例,其中只读实例不超过5个。如图5所示为API数据模型。 4890 图5:API数据模型 在RDS的Open API中,考虑到与OpenStack Trove的兼容,对外只以实例级别提供服务, 与Web界面上的集群组织方式的对应关系为: 在创建实例时会默认创建出一个集群,并将创建出的实例显示在此集群下。 在列举实例时会将此用户所属的所有实例以列表方式给出,不会体现出集群到实例的层次关系。 删除只读实例与界面功能相同,都是指定实例进行删除;删除主备实例时会同时将实例所属的集群一同删除,但前提条件是必须将集群下属的只读实例提前删除。 数据库解决方案对比 RDS背后聚集了华为的DBA团队专门负责运维,数据库内核开发团队负责改进数据库,将很多需要DBA日常运维的工作逐渐纳入实现产品化。使用的客户可以从很多底层的任务中解放出来。 RDS 数据库实例的生命周期包括创建、修改、重启、备份和还原以及删除等,具体如图7所示。 4891 图7:数据库实例生命周期管理 认识华为云RDS RDS作为云服务中I层之上S层之下一种居于数据库的重要的P层服务,华为云RDS为是华为云推出的一种关系型数据库服务,把关系型数据库作为一种服务部署于云上,旨在实现数据库的自动化部署和运维,大幅降低数据库的使用门槛和运维成本。 华为云RDS 能为企业带来哪些好处? 即开即用——省钱、快速 企业无需购买昂贵的服务器、操作系统和数据库管理系统等软硬件,无需手工安装部署和调优数据库管理系统,只需登录华为云,花几分钟按需订购,即可快速开通性价比更高的数据库云服务。 稳定可靠——省事又省心 服务可用性高,任何时候一旦主服务器出现故障,都可以快速自动切换到备服务器上,企业无需安排专人7*24小时全天候值守维护;数据可靠性高,支持自动备份,可保留或恢复最近7天内数据,预防数据丢失或出错造成不良影响。 便捷管理——可视又可控 具有界面友好的Web管理控制台,您只需简单点击几个按钮或链接,很多数据库管理工作(比如备份、恢复、监控等)即可由RDS后台管理系统自动完成,这样就大幅降低了对 DBA 所需要的技能要求门槛。 弹性伸缩——按需、合身 按需弹性伸缩CPU、内存、磁盘或数据库节点等计算和存储资源,无需事先一次性投入固定高成本,大幅缩短扩容周期,避免错过业务发展最佳时机,另外还可以及时采取收缩策略,避免业务回落导致投入资源闲置浪费。 华为云RDS功能特性 [*]数据库类型及版本:RDS数据库实例支持开源社区版MySQL 5.6、5.7,开源社区版PostgreSQL 9.5、9.6,Microsoft官方标准版SQL Server 2014 12.00 (含授权许可)。 [*]数据安全:多种安全策略保护数据库和用户隐私,例如:VPC、子网、安全组、VPN、云专线、SSL认证及通信加密、数据库防火墙(DBF)、数据审计保护(DAP)、数据泄露保护(DLP)、Anti-DDoS等。 [*]数据高可靠:数据库存储支持三副本冗余,可靠性高(达到99.99999%)。 [*]服务高可用(同城容灾):RDS会自动将主实例数据复制到一个备实例中,一旦主实例发生故障导致不可用,即可在很短时间内切换到备实例上。RDS主备实例支持AZ内或跨AZ部署,服务可用性高(达到99.95%)。 [*]异地容灾:支持创建异地只读实例,通过数据复制服务(DRS)实现异地数据实时复制,在突发状况下,用户可将异地只读实例切换为主实例,保障业务可用性。 [*]实例访问:支持多种访问方式,包括:内网IP访问、VPN访问。 [*]数据迁移:可以结合数据复制服务(DRS),通过自助方式完成平滑的迁移过程,实现业务中断时间最小化。 [*]实例管理:支持实例的增、删、改、查、重启等生命周期管理。 [*]实例监控:支持监控数据库实例及数据库引擎的关键性能指标,包括计算/内存/存储容量使用率、I/O活动、数据库连接数、QPS/TPS、缓冲池、读/写活动等。 [*]弹性伸缩:水平伸缩:支持增删只读实例(MySQL、PG最多5个,SQL Server不支持只读实例);垂直伸缩:支持实例规格变更,存储空间扩容(最大2TB)。 [*]备份与恢复:备份:支持自动备份、手动备份,全量备份、增量备份,支持备份文件的增、删、改、查、复制等生命周期管理。恢复:支持恢复到备份保留期内任意时间点(Point-In-Time Recovery, PITR)/某个全量备份时间点,支持恢复到新实例/原实例。 [*]日志管理:查询MySQL数据库的“错误日志”和“慢查询日志”,PostgreSQL数据库的“最近日志”,SQL Server数据库的“日志信息”,为数据库调优提供参考。 [*]参数管理:数据库管理员可以根据监控和日志等信息,对数据库引擎参数进行自定义设置,从而优化数据库。另外,支持参数组的增、删、改、查、复制、比较、重置等生命周期管理,方便用户批量管理实例的数据库引擎参数。 华为云RDS性能参数 [*]CPU 最大32核 [*]内存 最大128GB [*]IOPS 最大20000(SSD) [*]连接数 最大3000个 [*]存储空间 最大2TB 华为云RDS产品构架: 4892 更多技术细节请参考:http://support.huaweicloud.com/rds/index.html 结语 华为云RDS可以解决当前各类电子商务网站、社区网站、移动APP以及游戏类应用数据库搭建、管理以及维护的高成本及复杂性问题,使用户可以将更多的精力聚焦到应用和业务等核心层面,节约硬件成本和软件等成本,实现按需付费。 华为云RDS支持主从热备、读写分离,且提供了备份、恢复、监控等方面的全套解决方案,从而解决数据库运维上的问题。
-
本帖最后由 小白 于 2017-11-7 16:36 编辑介绍 几个月前,有一个关于关于垃圾邮件广告的Twitter ,当时是一个未知的“downloader”恶意软件,该恶意软件专门用于将恶意软件分发(或加载)到受感染的计算机系统上。根据我们的分析,该“downloader”恶意软件是“SnatchLoader”恶意软件的更新程序,KernelMode.info论坛在2017年1月期间有对SnatchLoader进行简要讨论的相关帖子的。正如论坛上该帖子所述,尽管没有进行详细的代码比较,但SnatchLoader和H1N1 Loader的恶意软件家族似乎有一些相似之处。除此之外,目前我们还没有看到任何关于SnatchLoader恶意软件的进一步讨论,因此本文我们将对SnatchLoader最新版本更新进行分析。 样本 Twitter 中引用的示例在VirusTotal上可以找到。 然而,我们的大多数静态分析工作是在更新版本的“核心DLL”上执行的,该更新程序的最新编译日期为2017-10-04,该DLL在2017年10月11日首次被上传到了VirusTotal上。 Windows API调用 通过我们的分析发现,该恶意软件对Windows API的调用都是在运行时通过函数名哈希的方式进行的,散列算法是ROL和XOR运算的组合,在GitHub上可以找到该散列算法的一个Python代码实现。以下是一些API函数名称及其对应的哈希表:
-
[indent]原文:The Basics Of API Management 作者:Kin Lane 翻译:Vincent [/indent]译者注:作者在本文中将API管理的一些基础知识整合成了综合列表,这些列表是由一位API管理大神提炼出来的,可以说是API管理的不同组件了。以下为译文。 我正在开发一套基础的API管理策略。这套管理策略涉及到的每一个方面,都倾注了我的毕生之所学。这么多年过去了,我已经将API管理的许多方面单独分离出来,形成了一组核心元素,这些元素也反映了API管理是如何一步一步发展成为数字商品的。总的来说,这有助于我去认真思考API操作的每个方面,而且也能将我平日里面所学习到的内容应用到我正在从事的项目,这样我就可以对API管理做进一步的提炼。 API管理是我所有研究领域中存在时间最久的。正是它启发了我对于其他方面的研究,而且同时它也是API经济里面相对比较成熟的了。我正在研究的这个项目给了我一个机会,让我去思考API管理究竟是什么,应该拆分为哪些不同的关注领域。我已经把API管理的精髓给提炼出来,大概包括以下几个方面: [*]Portal - 是一个单独的URL,可以用来查找关于API的所有信息,将该服务启动运行起来,并使用所有的可用资源。 [*]On-Boarding - 只需要考虑如何让新开发人员在portal主页上登陆,以实现API的第一次调用,接下来就是在生产应用实现调用。 [*]Accounts - 允许API使用者注册一个帐户,用于个人或企业访问API资源。 [*]Applications - 允许每个帐户持有人注册一个或多个应用程序,这些应用程序将使用API资源。 [*]Authentication - 为API使用者提供一种或多种方式进行身份验证,从而能够访问API资源。 [*]Services - 定义在一个或多个API路径上提供哪些服务,从而提供对各种业务服务的HTTP访问。 [*]Logging - 对API的每个调用都通过API管理层记录,以及DNS、web服务器、文件系统和数据库级别。 [*]**ysis - 了解API是如何被使用的,以及应用程序如何将API资源用于使用,识别所有API的使用模式。 [*]Usage - 对所有帐户和它们的应用程序进行量化使用,然后向所有API使用者报告、计费和协调使用。 [*]APIs - API访问帐户、身份验证、服务、日志记录、分析和使用API资源。 还有一些与API管理**在一起的比较常见的元素,这些元素也反映了API管理的核心是什么——API的业务。哪些人拥有哪些权限,他们又使用了哪些权限,将这些信息都记录下来。API管理中还有许多其他方面也需要考虑,但我已经将它们作为一些单独的模块了。这些元素包括: [*]Documentation - 静态或交互式文档,用于所有可用的API路径、参数、头,以及API请求和响应表面积的其他细节。 [*]Support - 自助服务,或直接支持通道,API消费者在此过程中使用这些通道来获得帮助。 [*]SDKs - 用于web、移动或其他类型应用程序的SDKs、示例、库和其他支持代码元素。 [*]Road Map - 当涉及到API时,交流未来的内容。 [*]Issues - 有关API的可用性的任何公开问题的通知。 [*]Change Log - 关于更改API的历史。 这些领域也对API管理做了补充,但应该超越API操作的日常管理方面。我还考虑了身份验证、日志记录和分析,而不仅仅是API管理,因为这三个领域都应该不仅仅涵盖API,但是它们仍然与API管理的核心部分紧密相连。在我的定义中,API管理在很大程度上是关于管理资源的消耗,而不是API操作的其他方面。这不仅仅是我的定义,而是我所看到的API管理的商品化,就像我们在Amazon Web服务上看到的那样。 AWS API Gateway实际上是关于帐户、应用程序、身份验证以及服务的。日志、分析等都是由AWS CloudWatch提供的。对于正在研究的这个特定项目,我使用了GitHub和Jekyll作为Portal,并分别使用自定义交付、使用和支持api。进一步缩小我对API管理的定义。我想说,AWS在API管理方面表现得不错,与AWS API Gateway和AWS CloudWatch之间的关注点分离。如果你将AWS Cognito应用于身份验证,那么你可以将另一个应用程序分离出来。我没有看到任何可行的解决方案来处理使用、计费和API管理的业务和货币化方面。 我正在从事的API项目已经使用了AWS作为操作后端,因此我也有机会去更好的了解API管理中的活动件在AWS平台中是怎么一回事。在AWS平台里面认真研究一下API管理如何解耦是非常意义的,因为它们是商品化的主要参与者,而且也在日益趋于成熟。一旦完成了AWS以后,谷歌和Azure将是接下来的目标,这些也都是定义API管理未来的主要参与者。
-
本帖最后由 梅子 于 2017-11-2 15:52 编辑 什么是SoftRadio呢? SoftRadio是用来实现远程online调试模式的系统,在项目集成时,有时模组、基站等还没有就绪,便会使用SoftRadio进行端到端集成验证,提升设备接入调试效率。 IoT平台作为NB-IoT业务统一的联接平台,需要支撑生态建设扩展。因此,需要支撑NB-IoT的模拟器SoftRadio接入到IoT平台。 NB-IoT芯片的开发已使用SoftRadio进行模拟开发。在使用TUP协议后,平台支持SoftRadio使用TUP协议接入到IoT平台。 注意啦注意啦: 该特性仅用于OceanConnect生态圈扩展NB-IoT业务时,提供给开发者做调试使用,属于测试特性,禁止在任何商用局点环境使用。 SoftRadio功能 SoftRadio主要分为三层: [*]芯片终端应用开发者:使用芯片接入到SoftRadio可以观察,也可上报到平台。 [*]不具备芯片的终端应用开发者:开发终端应用,连接到SoftRadio查看数据流,同步数据。 [*]Network Application开发者:使用SoftRadio模拟真实设备上报数据,数据信息等。 我的价值可大啦~ 基于SoftRadio和远程实验室,实现NB-IoT设备及业务的远程集成验证。 仿真工具及平台远程接入,体现伙伴“离岸联调,提升效率”价值。 不具备芯片的终端应用开发者也可以接入进行终端应用的开发。 可模拟真实设备进行数据上报。 虽然我功能如此强大,但是我也有局限性,毕竟我还在成长嘛~ SoftRadio仅应用于测试场景,不允许接入客户现网以及进行商业使用。 SoftRadio使用者同时在线数不可以超过3000个。 SoftRadio使用创建的设备需要保存deviceID,appID和password,一但丢失需要删除设备重新创建。 如何实现的? SoftRadio通过南向REST API接入平台 [*]绑定API:携带verifyCode以及设备详细信息,在平台注册绑定,获取deviceID,appID,password信息。 说明: verifyCode格式为TEST$_UUID,即北向注册时需要填入nodeId和verifyCode格式为TEST$_UUID。获取deviceID,appID,password后需要妥善保存,防止丢失,一但丢失则需要删除device,重新创建和绑定。 [*]登录API:使用deviceID,appID,password登录平台,同时获取token以及CoAP订阅通知的token。 [*]MO API:携带整个CoAP报文和token,上报到平台的SR Adapt,并转换为CoAP over UDP进行处理。 [*]MT API:从平台获取平台向SoftRadio下发的CoAP消息包,每次获取一条。 MO/MT消息 [*]通过头域中的deviceID和accesstoken,调用NSCL的鉴权接口,获取所属的APPID,gatewayID以及设备列表,同进判断参数中的deviceID是否在设备列表中或都等于gatewayID。如果通过则直接返回失败。 [*]MO消息则直接将body体中的payload,通过base64解码后,交由CoAP连接池发送到CIG,并返回成功。 [*]MT消息则在鉴权通过后,直接从数据库中将MT消息取出,并通过base64编码后,通过回应消息返回。 模拟CoAP over UDP接入 IoT平台实现SR Adapt来模拟真实芯片的数据上报、命令下发等功能与CIG对接,提供南向REST接口与SoftRadio对接。 CoAP连接池: 最大支持1000个CoAP Server连接,起始EndPoint的端口为[30000,30999],IP为127.0.0.1。每当device注册、数据上报、命令下发时,从连接池中分配空闲的连接与deviceID绑定,如果16秒内没有数据流,则自动回收(解除deviceID与EndPoint的绑定关系,并放到空闲队列中)。 CoAP协议栈: 提供CoAP发包和收包监听通知,当MO REST消息发的消息包过来时,通过直接抛入UDP层队列,发到CIG上。当CIG发包到SR Adapt时,截取到并查找到对应的deviceID,如果有命令下发消息则入MT队列(数据库实现),MT REST消息过来时,直接从队列中取出整个CoAP包回应给SoftRadio。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中 -
华为云监控CES新特性解读2026/08/26 周三 19:00-20:30
刘英杰-华为云监控产品专家
华为云监控 CES H1 版本重磅全新升级!本次直播特邀华为云监控产品专家,围绕特性深度解读 + 现场实操演示 + 实时线上答疑三大模块,全方位拆解版本核心亮点,直击运维各类痛点难题。助力实现告警高效配置、指标快速检索、插件便捷部署,切实降低运维工作负担,提升监控运维工作效率。欢迎预约观看,互动提问交流!
即将直播
热门标签