欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用 ROS CDK 在云上从零开始构建解决方案

最编程 2024-03-08 17:47:24
...

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」

image.png

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					

推荐阅读