使用 ROS CDK 在云上从零开始构建解决方案
1.前言
资源编排服务ROS(Resource Orchestration Service)是阿里云提供的一项简化云计算资源管理的服务。开发者和管理员可以编写模板,在模板中定义所需的阿里云资源(例如:ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。
为什么选择ROS资源编排
企业云上大量的资源管理需求带来了效率、合规和成本方面的挑战,ROS可以帮助您轻松管理多个资源:
- 采用基础设施即代码(Infrastructure as Code, IaC)的设计理念,模板的管理融入CI/CD流程,确保合规性。
- 无需手动创建多个资源,使用模板一键部署多个资源。
- 提供大量模板示例和解决方案示例,帮助企业客户部署复杂解决方案。
- 利用云上弹性,按需批量部署和释放资源,节省成本。
更多选择理由,请参见产品优势和应用场景。
本文将以一个小白视角,探索如何根据阿里云的文档从0开始写一篇ROS资源编排的代码。
2.工具准备
注:本次教程所有的操作均基于macos,其他平台的操作请自行稍作修改
2.1 ROS CDK安装
阿里云ROS CDK(Cloud Development Toolkit)是资源编排(ROS)提供的一种命令行工具,帮助您使用多种编程语言定义云资源。您无需使用繁琐的JSON或YAML模板语法,即可使用ROS CDK完成资源的创建和配置,实现自动化部署及运维。写一篇ROS自动化测试脚本的第一步是安装ROS CDK工具。如何安装ROS在帮助文档中已经写得非常详细。
2.2 python环境安装
2.2.1使用Anaconda(推荐)
ⅰ. 开源、免费,强大的python环境管理软件,社区版包含很多常用软件
ⅱ. 简单、方便的环境隔离与虚拟环境创建
ⅲ. Anaconda 还附带了一个叫做 Navigator(导航)的桌面 GUI 工具,可以直观地创建和管理环境,安装、删除扩展包
ⅳ. 下载链接
2.2.2 直接安装python
ⅰ. 下载链接
2.3 IDE、代码编辑器推荐
2.3.1 VScode(推荐)
ⅰ. 开源免费、轻量的代码编辑器
ⅱ. 社区生态好、更新快
ⅲ. 插件生态众多,推荐部分插件
- Python
- Atom Material Icons
- GitLens — Git supercharged
- IntelliCode
ⅳ. 下载链接
2.3.2 pycharm
ⅰ. 开箱即用、功能强大的IDE
ⅱ. 补全、代码检查等功能做得较好
ⅲ. 下载链接
2.4 AI编码插件
使用AI编码插件可以大幅提升代码编写效率,最经典的插件是Github Copilot,功能包括行/函数级自动续写、自然语言生成代码、生成单元测试、生成代码注释等等,然而这是一个收费插件(10美元/月),有很多免费版的插件可以平替,这里推荐几个
2.4.1 通义灵码
ⅰ. 通义千问系列产品,目前已经开放公测,阿里云账号可以直接使用
ⅱ. 功能简介与下载链接
ⅲ. 代码解释,询问一段代码是什么意思,帮忙理解代码逻辑,这里给出一段阿里云ROS的代码,但是插件给出的解释是AWS的CDK,但是除了这一点错误,其余的代码解释都是正确的
ⅳ. AI代码生成(根据注释生成代码),这里我只写了注释「#创建安全组」,插件自动帮我生成了一段代码来放开80端口
2.4.2 Amazon CodeWhisperer
ⅰ. AWS出品的AI编码工具,免费
ⅱ. 功能简介与下载链接
2.4.3 CodeGeeX
ⅰ. 模型开源
ⅱ. 功能简介与下载链接
3. 环境准备
3.1 创建工程目录并初始化工程
进入终端,执行以下命令,创建工程目录并初始化工程。每个ROS CDK应用都要求创建在一个独立的工程目录下,且该应用需要使用独立工程目录中模块的依赖项。所以在创建应用之前,需要先创建一个工程目录并进行初始化。
#创建iac-ros-cdk文件夹 mkdir iac-ros-cdk #进入iac-ros-cdk文件夹 cd iac-ros-cdk #使用ros cdk初始化项目 ros-cdk init --language=python --generate-only=true
3.2 创建虚拟环境
Python工程的运行依赖于虚拟环境(virtualenv),所以在初始化Python工程之后需要创建一个属于当前工程的虚拟环境。
python3 -m venv .venv
3.3 进入虚拟环境
source .venv/bin/activate
3.4 测试环境是否创建成功
在终端执行以下命令,测试环境是否创建成功
python
若出现此界面则说明你的虚拟环境已经创建成功,此时的项目应该是这样的
3.5 在编译器中配置环境
打开项目中的一个示例python文件「iac_ros_cdk_stack.py」,在VScode中选择python解释器,开始编写python代码
3.6 安装需要的包
此时无法解析编译器无法解析「ros_cdk_core」,表明当前python环境「.venv」里没有这个包
在VScode中新建终端,终端会自动执行命令切换到当前目录并激活「.venv」环境
将pip源换成清华大学的源,加速pip安装包的速度(可选),然后执行pip install xx,在「.venv」环境中安装包
# 将pip的源换为国内的清华源,加速下载,这一步为可选项 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 安装ros_cdk_core pip install ros_cdk_core
示例,换源并安装「ros_cdk_core」这个包
以上安装方式对应的是单次安装一个包的情况,如果你需要安装很多包,可以在「requirements.txt」中添加你需要的包
然后在终端中执行如下命令来安装「requirements.txt」中写的所有包
#安装requirements.txt中写的包 pip install -r requirements.txt
3.7 配置阿里云凭证信息
登录阿里云官网,获取当前账号的AK信息
执行以下命令,配置阿里云凭证信息。
ros-cdk config
根据界面提示输入配置信息。
endpoint(optional, default:https://ros.aliyuncs.com): defaultRegionId(optional, default:cn-hangzhou):cn-hangzhou [1] AK [2] StsToken [3] RamRoleArn [4] EcsRamRole [0] CANCEL Authenticate mode [1...4 / 0]: 1 accessKeyId:************************ accessKeySecret:****************************** ✅ Your cdk configuration has been saved successfully!
配置内容说明:
- endpoint:ROS服务地址。默认值为https://ros.aliyuncs.com。
- defaultRegionId:ROS资源栈部署的地域。默认值为cn-hangzhou。
- Authenticate mode:鉴权方式。本示例的鉴权方式为AccessKey,您需要输入AccessKey ID和AccessKey Secret。关于如何获取AccessKey,请参见交互式配置(快速配置)。
4.代码编写演示
4.1 代码文件建立与命名规范
找到你领取的文档,这里以我本次领取的一篇文档为例
https://help.aliyun.com/zh/ecs/use-cases/build-an-ftp-site-on-an-instance-that-runs-alibaba-cloud-linux
完整代码如下
https://github.com/XiaoTianJianJun/ROS_JINZ_DEV/blob/master/examples/documents/ros/usage-examples/python/python_cdk/ECS/deploy_FTP_on_ECS_460772.py
- 新建文件,要注意以下三点
- 文件正确归类—计算的ROS代码应该放在ECS目录下
- 文件正确命名—deploy_FTP_on_ECS_460772.py
- 「deploy_FTP_on_ECS」描述文档测试内容,在ECS上部署FTP服务
- 「460772」该文档的id
- 类的正确命名
- 类名应遵循 CapWords 约定 (https://copyprogramming.com/howto/capwords-conventions-get-myclass-or-get-my-class)
- 类名应该能体现当前类的功能,比如「DeployFTP」
4.2 找寻文档描述的前提条件
一般文档会描述实验前需要部署的资源,比如本篇文档规定了以下内容
- 实例规格:ecs.g6.large
- 操作系统:Alibaba Cloud Linux 3.2104 LTS 64位
现在已经知道需要首先建立一个ECS,建立ECS需要以下依赖资源
- VPC
- Vswitch
- 安全组
那么已经可以明确你的ROS代码需要编排的资源清单
4.3 分步骤编写代码
如果是没用过的资源怎么找必填参数、怎么填写参数(通过文档,比如https://help.aliyun.com/zh/ros/developer-reference/datasource-cs-clusternodepools)
a. 建立VPC
# 创建VPC vpc = ecs.Vpc( self, "VPC", ecs.VPCProps( cidr_block="10.0.0
推荐阅读
-
openEuler郑州用户组成立!openEuler与hyperfusion携手共建河南地区用户生态 - 开幕致辞 超融合操作系统业务总经理、openEuler委员会成员蒋振华先生为本次活动致辞。 在本次活动的致辞中,他提到,作为openEuler社区早期的成员,超融合见证了openEuler从成立到在各行业商业落地,再到跨越生态拐点的过程,感谢openEuler提供了一个全产业链共同创新的平台,共同推动创新技术的商业落地。 同时,本次活动得到了郑州市郑东新区大数据管理局、郑州中原科技城投资服务局的大力支持。 郑东新区大数据管理局曹光远 在活动致辞中表示,openEuler的应用和*应用设施的深度优化,为郑东新区数字化转型提供了安全、可靠、高性能的技术基础;郑州中原科技城招商服务局王林表示,郑东新区欢迎所有openEuler生态相关企业扎根当地,围绕openEuler社区共同发展,形成合力。 openEuler社区及运维功能介绍 openEuler技术委员会委员胡峰 openEuler技术委员会委员胡峰先生在本次活动中介绍了openEuler社区目前发展的整体情况,并重点从技术层面介绍了openEuler的运维功能。 openEuler 晚会 胡峰先生介绍智能运维工具 A-Ops 和 openEuler gala、 阿波罗 Apollo、智能漏洞管理解决方案等新功能,以及涵盖各种运维场景的精品运维组件。在*交流环节,许多用户就目前使用的 openEuler 在*交流环节,许多用户就自己在使用openEuler过程中遇到的一些问题与胡峰先生进行了进一步的交流。 软硬结合,构建多样化算力操作系统 Hyperfusion 基于 openEuler 的基础上,结合自身软硬件技术积累,推出了富讯服务器操作系统 FusionOS FusionOS. FusionOS 首席架构师张海亮 分享了 FusionOS FusionOS首席架构师张海亮分享了FusionOS的软硬件协同优势、卓越的性能和可靠性,以及FusionOS在金融、运营商、*、互联网等行业的实践案例,引起了众多用户的兴趣,分享结束后,不少参会者就FusionOS的特点向讲师提问并进行了交流。
-
纯干货分享 | 研发效能提升——敏捷需求篇-而敏捷需求是提升效能的方式中不可或缺的模块之一。 云智慧的敏捷教练——Iris Xu近期在公司做了一场分享,主题为「敏捷需求挖掘和组织方法,交付更高业务价值的产品」。Iris具有丰富的团队敏捷转型实施经验,完成了企业多个团队从传统模式到敏捷转型的落地和实施,积淀了很多的经验。 这次分享主要包含以下2个部分: 第一部分是用户影响地图 第二部分是事件驱动的业务分析Event driven business analysis(以下简称EDBA) 用户影响地图,是一种从业务目标到产品需求映射的需求挖掘和组织的方法。 在软件开发过程中可能会遇到一些问题,比如大家使用不同的业务语言、技术语言,造成角色间的沟通阻碍,还会导致一些问题,比如需求误解、需求传递错误等;这会直接导致产品的功能需求和要实现的业务目标不是映射关系。 但在交付期间,研发人员必须要将这些需求实现交付,他们实则并不清楚这些功能需求产生的原因是什么、要解决客户的哪些痛点。研发人员往往只是拿到了解决方案,需要把它实现,但没有和业务侧一起去思考解决方案是否正确,能否真正的帮助客户解决问题。而用户影响地图通常是能够连接业务目标和产品功能的一种手段。 我们在每次迭代里加入的假设,也就是功能需求。首先把它先实现,再逐步去验证我们每一个小目标是否已经实现,再看下一个目标要是什么。那影响地图就是在这个过程中帮我们不断地去梳理目标和功能之间的关系。 我们在软件开发中可能存在的一些问题 针对这些问题,我们如何避免?先简单介绍做敏捷转型的常规思路: 先做团队级的敏捷,首先把产品、开发、测试人员,还有一些更后端的人员比如交互运维的同学放在一起,组成一个特训团队做交付。这个团队要包含交付过程中所涉及的所有角色。 接着业务敏捷要打通整个业务环节和研发侧的一个交付。上图中可以看到在敏捷中需求是分层管理的,第一层是业务需求,在这个层级是以用户目标和业务目标作为输入进行规划,同时需要去考虑客户的诉求。业务人员通过获取到的业务需求,进一步的和团队一起将其分解为产品需求。所以业务需求其实是我们真正去发布和运营的单元,它可以被独立发布到我们的生产环境上。我们的产品需求其实就是产品的具体功能,它是我们集成和测试的对象,也就是我们最终去部署到系统上的一个基本单元。产品需求再到了我们的开发团队,映射到迭代计划会上要把它分解为相应的技术任务,包括我们平时所说的比如一些前端的开发、后端的开发、测试都是相应的技术任务。所以业务敏捷要达到的目标是需要去持续顺畅高质量的交付业务价值。 将这几个点串起来,形成金字塔结构。最上层我们会把业务目标放在整个金字塔的塔尖。这个业务目标是通过用户的目标以及北极星指标确立的。确认业务目标后再去梳理相应的业务流程,最后生产。另外产品需求包含了操作流程和业务规则,具需求交付时间、工程时间以及我们的一些质量标准的要求。 谈到用户影响的地图,在敏捷江湖上其实有一个传说,大家都有一个说法叫做敏捷需求的“任督二脉”。用户影响地图其实就是任脉,在黑客马拉松上用过的用户故事地图其实叫督脉。所以说用户影响地图是在用户故事地图之前,先帮我们去梳理出我们要做哪些东西。当我们真正识别出我们要实现的业务活动之后,用户故事地图才去梳理我们整个的业务工作流,以及每个工作流节点下所要包含的具体功能和用户故事。所以说用户影响地图需要解决的问题,我们包括以下这些: 首先是范围蔓延,我们在整张地图上,功能和对应的业务目标是要去有一个映射的。这就避免了一些在我们比如有很多干系人参与的会议上,那大家都有不同想法些立场,会提出很多需求(正确以及错误的需求)。这个时候我们会依据目标去看这些需求是否真的是会影响我们的目标。 这里提到的错误需求,比如是利益相关的人提出的、客户认为产品应该有的、某个产品经理需求分析师认为可以有的....但是这些功能在用户影响地图中匹配不到对应目标的话,就需要降低优先级或弃掉。另外,通常我们去制定解决方案的时候,会考虑较完美的实现,导致解决方案括很多的功能。这个时候关键目标至关重要,会帮助我们梳理筛选、确定优先级。 看一下用户影响到地图概貌 总共分为一个三层的结构: 第一层why,你的业务目标哪个是最重要的,为什么?涉及到的角色有哪些? 第二层how ,怎样产生影响?影响用户角色什么样的行为? (不需要去列出所有的影响,基于业务目标) 第三层what,最关键的是在梳理需求时不需一次把所有细节想全,这通常团队中经常遇到的问题。 我们用这个例子来看一下 这是一个客服中心的影响地图,业务目标是 3个月内不增加客服人数的前提下能支持1.5倍的用户数。此业务目标设定是符合 smart 原则的,specific非常的具体,miserable 是可以衡量的,action reoriented是面向活动的, real list 也是很实际的。 量化的目标会指引我们接下来的行动,梳理一个业务目标,尽量去量化,比如 :我们通过打造一条什么样的流水线,能够提高整个部署的效率,时间是原来的 1/2 。这样才是一个能量化的有意义的目标。 回到这幅图, how 层级识别出来的内容,客服角色:想要对它施加的影响,把客户引导到论坛上,帮助客户更容易的跟踪问题,更快速的去定位问题。初级用户:方论坛上找到问题。高级用户:在论坛上回答问题。通过我们这些用户角色,进行活动,完成在不增加客户客服人数的前提下支持更多的用户数量。 最后一个层级,才是我们日常接触比较多的真正的功能的特性和需求,比如引导到客户到论坛上,其实这个产品就需要有一个常见问题的论坛的链接。这个层次需要我们团队进一步地在交付,在每个迭代之前做进一步的梳理,细化成相应的用户故事。 这个是云智慧团队中,自己做的影响地图的范例,可以看下整个的层级结构。序号表示优先级。 那我们用户影响地图可以总结为:
-
在 windows 上安装和使用 ROS 的解决方案 2019 年 4 月更新(1 win_ros 2 rosserial_windows)
-
使用 ROS CDK 在云上从零开始构建解决方案