ROS CDK | 云上资源自动化部署新模式
前言
在之前的文章中,笔者分别介绍了 AWS CDK 和 Pulumi 两种目前比较流行的编程式 IaC 框架,通过使用熟悉的编程语言,用编程的方式快速定义云资源。即获得了基础设施即代码的便利,又增加了配置的可读性和可维护性,降低了心智负担,将云资源管理者从复杂的模板和各种 YAML/JSON 配置中解放出来。
与 AWS CloudFormation 和 Terraform 类似,阿里云也有自己的 IaC 产品:资源编排(ROS),使用 ROS 笔者将大量云资源的变更和部署抽象为 ROS Template,不但提高了工作效率还降低了出错的概率。与 AWS CDK 基于 CloudFormation 类似,阿里云也提供了是基于 ROS 的 ROS CDK,不过在先前的尝试中,ROS CDK 的体验不佳,且与 AWS CDK 还有一些差距,所以就暂时搁置了。
在 2021 阿里云开发者大会上,ROS CDK 的身影再次出现,在看完整个分享之后,再次激起了笔者对 ROS CDK 的兴趣,此次笔者还联系到了 ROS CDK 的几位核心开发,在他们的指导下利用一个周末的时间重新体验了 ROS CDK。
ROS CDK
ROS CDK 是资源编排(ROS)提供的一种命令行工具和多语言 SDK,利用面向对象的高级抽象模式对云资源进行标准定义,从而快速构建云资源。
ROS CDK 以应用作为资源管理的入口,一个应用可管理多个资源栈,而每个资源栈中则可以有多个构件。构件可以理解为云上资源的组件,能包含一个或多个资源。
我们可以选择自己熟悉的编程语言(TypeScript/JavaScript/Java/Python/C#)编写应用代码声明想要部署的资源,ROS CDK 会将项目代码转换成 ROS 模板,然后使用该模板进行自动化部署。
如果使用过 AWS CDK 或者 Pulumi,上手 ROS CDK 会更加容易。
上手实践
ROS CDK 上手非常简单,只需安装好 CLI 工具,立刻就能利用面向对象的高级抽象模式对云资源进行标准定义,快速构建云资源。
安装
AWS CDK 类似,ROS CDK 也是使用 TypeScript 开发,安装前需要满足:
Node.js
:10.23.0 及以上版本TypeScript
:2.7 及以上版本
使用 npm
进行安装:
安装完成后,可以使用 -h
来查看 ros-cdk 的功能列表:
配置登录凭证
在安装好 ros-cdk-cli 之后就可以配置凭证连接阿里云了,这里需要注意的是要选择好 region,推荐加 -g
进行全局配置,否则每建一个 ROS CDK 项目都会要求重新配置(不加的话只是配置当前目录)。
初始化项目
初始化项目,与 AWS CDK 和 Pulumi 类似:
项目结构
生成的项目结构如下:
规划云资源
本文我们使用 ROS CDK 创建一套简单的云上环境,并在 ECS 上安装极狐 GitLab,新建资源包括:
VPC 1 个
VSwitch 1 个
安全组 1 个
ECS 1 台
资源之间关系为:
Show me the code
首先需要导入依赖包,本文我们用到了 @alicloud/ros-cdk-ecs
和 @alicloud/ros-cdk-ros
两个,修改 package.json
,添加依赖包:
执行如下命令,安装依赖:
待依赖安装完成后,就可以开始编写代码,构建云资源了。修改 lib/ros-gitlab-stack.ts
文件:
执行如下命令,查看生成的模板文件:
确认无误,开始部署云资源:
资源栈部署成功,到控制台查看资源栈部署情况了
等待部署成功,在输出中 copy 公网 IP,将其写入本地 hosts
文件:
完成后访问 http://jh.gxd 就可以使用 ROS CDK 部署的极狐 GitLab 了!
测试完成后,删除资源栈,清理云资源:
一些不足
总体来说,ROS CDK 有着不错的使用体验,但还有些许不足:
ROS CDK 缺乏默认的最佳实践配置,如 AWS CDK 在创建 VPC 时,只需一行代码
new Vpc(scope, 'Vpc', { maxAzs: 3, natGateways: 1 })
就会自动创建 3 AZ 的 VSwitch 和 NAT Gateway,ROS 中并不支持这样的写法缺乏资源动作方法,如我要给 ECS 打 Tag,只能在
tags
字段进行配置,而无法使用类似addTag()
的方法来完成这个动作,增加端口或绑定资源也是如此不支持在 CLI 终端实时查看 Stack 事件,需要登录阿里云控制台才能看到 Stack 事件,体验十分割裂
不支持在 CLI 终端查看输出内容,希望能增加
cdk.CfnOutput()
这样的在终端打印输出内容的方法
结语
总体来说,笔者对 ROS CDK 的使用体验还是十分满意的,推荐大家使用 ROS CDK 去尝试创建和管理云资源,后续笔者也会分享一些较为复杂的 ROS CDK 实践。感谢来自阿里云的 闲炎、王怀宇、白晨旭 同学的帮助,在周末休息时间还能为我答疑解惑。
本文涉及代码已经全部上传 GitHub,地址:https://github.com/sunny0826/ros-cdk-simple-gitlab
参考
版权声明: 本文为 InfoQ 作者【郭旭东】的原创文章。
原文链接:【http://xie.infoq.cn/article/96051f14283aefe2d75273442】。文章转载请联系作者。
评论