在之前的文章中,笔者分别介绍了 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 CDKROS 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 进行安装:
# 安装 lerna npm install lerna -g # 安装 ros-cdk-cli npm install @alicloud/ros-cdk-cli -g
安装完成后,可以使用 -h 来查看 ros-cdk 的功能列表:
ros-cdk -h配置登录凭证
在安装好 ros-cdk-cli 之后就可以配置凭证连接阿里云了,这里需要注意的是要选择好 region,推荐加 -g 进行全局配置,否则每建一个 ROS CDK 项目都会要求重新配置(不加的话只是配置当前目录)。
# 推荐全局配置 -g ros-cdk config -g # 选择 endpoint endpoint(optional, default:https://ros.aliyuncs.com): # 选择 region defaultRegionId(optional, default:cn-hangzhou):cn-shanghai # 选择认证方式 [1] AK [2] StsToken [3] RamRoleArn [4] EcsRamRole [0] CANCEL Authenticate mode [1...4 / 0]: 1 # 配置 AK/AS accessKeyId:************************ accessKeySecret:****************************** ? Your cdk configuration has been saved successfully!初始化项目
初始化项目,与 AWS CDK 和 Pulumi 类似:
mkdir ros-cdk-simple-gitlab cd ros-cdk-simple-gitlab # 在这里选择生成项目的编程语言 ros-cdk init --language=typescript --generate-only=true项目结构
生成的项目结构如下:
tree . ├── bin │ └── ros-cdk-simple-gitlab.ts # 入口文件,定义应用和资源栈,一般无需修改 ├── cdk.json ├── jest.config.js ├── lib │ └── ros-cdk-simple-gitlab-stack.ts # 资源栈定义文件,主要修改该文件 ├── package.json # 依赖文件,需要在该文件添加相应模块的依赖包 ├── README.md ├── test │ └── ros-cdk-simple-gitlab.test.ts # 单元测试文件 └── tsconfig.json规划云资源
本文我们使用 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,添加依赖包:
{ "name": "ros-cdk-simple-gitlab", "version": "0.1.0", "bin": { "ros-cdk-simple-gitlab": "bin/ros-cdk-simple-gitlab.js" "scripts": { "build": "tsc", "test": "jest" "devDependencies": { "@types/jest": "^25.2.1", "@types/node": "10.17.5", "typescript": "^3.9.7", "jest": "^25.5.0", "ts-jest": "^25.3.1", "ts-node": "^8.1.0", "babel-jest": "^26.6.3", "@babel/core": "^7.12.9", "@babel/preset-env": "7.12.7", "@babel/preset-typescript": "^7.12.7", "@alicloud/ros-cdk-assert": "^1.0.1" "dependencies": { "@alicloud/ros-cdk-core": "^1.0.1", + "@alicloud/ros-cdk-ecs": "^1.0.0", + "@alicloud/ros-cdk-ros": "1.0.0" }
执行如下命令,安装依赖:
npm i
待依赖安装完成后,就可以开始编写代码,构建云资源了。修改 lib/ros-gitlab-stack.ts 文件:
import * as ros from '@alicloud/ros-cdk-core'; import * as ecs from '@alicloud/ros-cdk-ecs'; import * as ROS from '@alicloud/ros-cdk-ros'; export class RosGitlabStack extends ros.Stack { constructor(scope: ros.Construct, id: string, props?: ros.StackProps) { super(scope, id, props); new ros.RosInfo(this, ros.RosInfo.description, "This is the simple ros cdk app example."); // The code that defines your stack goes here // 下载 GItLab 地址 let GitLabDownloadUrl = 'https://omnibus.gitlab.cn/el/7/gitlab-jh-13.12.4-jh.0.el7.x86_64.rpm' // 本地 IP,用于安全组 let YourIpAddress = '101.224.119.123' // 安全组开放的端口 let PortList = ['22', '3389', '80'] // ECS 密码,用于 SSH 登录 let YourPass = 'eJXuYnNT6LD4PS' // URL 地址,用于访问安装好的 GitLab let ExternalUrl = 'http://jh.gxd'
本文转自网络,原文链接:https://developer.aliyun.com/article/784839
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
近几年,互联网行业蓬勃发展,在互联网浪潮的冲击下,互联网创业已成为一种比较...
在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多...
本文转载自微信公众号「bugstack虫洞栈」,作者小傅哥 。转载本文请联系bugstack...
TIOBE 公布了 2021 年 3 月的编程语言排行榜。 本月 TIOBE 指数没有什么有趣的变...
基本介绍 给定 n 个权值作为 n 个叶子节点,构造一颗二叉树,若该树的带权路径长...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...
前言 统计科学家使用交互式的统计工具(比如R)来回答数据中的问题,获得全景的认...
溢价 域名 的续费价格如何?通常来说,因为溢价域名的价值高于普通域名,所以溢...
本文转载自公众号读芯术(ID:AI_Discovery)。 这一刻你正在应对什么挑战?这位前...