从原子操作走向模板部署,详解云上资源自动化部署新模式

简介: 听阿里云技术专家详解云上资源自动化部署新模式——基于资源编排、Terraform托管、ROS CDK的自动化部署最佳实践。

5 月 29 日,阿里云开发者大会的《应用开发的基础设施云上优化》分论坛上,阿里云技术专家王斌鑫发表了主题为《云上资源自动化部署新模式》的分享,详细阐述了云上资源自动化部署新模式——基于资源编排、Terraform托管、ROS CDK的自动化部署最佳实践。

本文为根据王斌鑫的演讲整理成文。

image.png

当前云上资源部署模式

云上资源传统部署模式的挑战

image.png

大部分用户一般是通过控制台/API/SDK 等传统模式进行云上资源的部署,这种部署模式会面临规模、效率、规范和成本四个方面的挑战:

  1. 规模上,随着业务的发展需要管理的资源规模不断上升,部署和管理种类繁多的资源带来挑战。
  2. 效率上,随着规模上升,手动批量部署变得难以为继。
  3. 规范上,如何确保对基础设施的变更均符合组织管理规范。
  4. 成本上,手动部署的方式无法极致地利用云上弹性能力,其成本仍有优化空间。

阿里云自动化部署模式

资源编排服务(ROS)的核心价值

image.png

面对传统部署模式的挑战,我们在想是否能够帮助客户对云上资源进行自动化部署?因此有了阿里云资源编排服务(ROS),它基于基础设施即代码(IaC)的理念,让开发者和管理员使用模版的方式,编排云上的多种资源,进行自动化部署。

对比手动部署,使用资源编排服务 ROS 进行自动化部署会带来如下好处:

效率提升,针对诸如 SAP 这样复杂的解决方案能有效提升部署效率,也能够帮助 MSP、ISV、onECS 服务提升部署效率;

架构优化,ROS 提供了种类丰富的阿里云最佳实践模板,用户无需丰富的架构经验即可部署解决方案级别的架构;

流程管控,由 IT 管理员统一管理基础设施以避免各类风险,且可基于模板进行审核再进一步结合 CI/CD 以规范化 IT 管理流程;

节省成本,自动化部署方式可以按需部署和释放资源,从而极致地使用云上弹性能力来降低成本。

ROS 的使用流程和核心功能

image.png

使用 ROS 进行自动化部署的过程非常简单:

  1. 按照 ROS 模板语法编写模板,定义想要创建的各类云上资源。
  2. 在 ROS 控制台 使用模板创建资源栈,以执行部署。其中,资源栈是一组资源的集合,这些资源均是模板中定义的资源。
  3. 在 ROS 控制台查看资源栈,可以查看栈中各种资源的创建情况,并可以跳转到对应资源的控制台。

值得一提的是,ROS 服务本身完全免费,集成了身份认证和安全审计的功能,资源创建结果是可视化的,且能够进行多账号跨地域地部署,支持资源栈和实际资源的差异检测并进行修正。

除了直接使用 ROS 模板来做自动化部署,是否还有别的方式呢?

新模式一:Terraform 托管

Terraform 是什么

image.png

Terraform 同 ROS 一样,也是基于基础设施即代码(IaC)的理念的自动化编排工具。它使用一种特定的配置语言(HCL, Hashicorp Configuration Language)来描述基础设施资源,语法样例如上图所示。

Terraform & ROS

image.png

既然 Terraform 和 ROS 都是基于相同的理念的自动化编排工具,那它们的目标也是一致的,都是为用户打造良好的云上部署体验。

两者有很多相同之处,比方说 Terraform 的配置文件相当于 ROS 的模板,Terraform 的状态相当于 ROS 的资源栈,Terraform 的 CLI 程序则相当于 ROS 的编排引擎。

两者也各有优势,Terraform 的语法更简洁,对多云支持地很完善;而 ROS 则提供免费的服务托管,且有云原生的鉴权和审计能力。

那么是否能够将两者的优势结合呢?因此就有了 Terraform 托管能力。

Terraform 托管

image.png

用户直接在本地使用 Terraform 时,需要根据当前的操作系统下载对应的 Terraform CLI,编写模板,管理所使用的各类 Provider 的版本,且要管理状态等文件。

而使用 Terraform 托管功能时,只需在 ROS 的控制台编写 Terraform 模板便可直接部署,后续则通过资源栈来管理模板中定义的资源。底层的各类管理都交给 ROS。

image.png

在使用原理上,ROS 控制台会将 Terraform 模板组合成符合 ROS 语法规范的模板,ROS 服务端会其进行语法校验,生成租户信息,调度到 ROS 的 Terraform 服务进行资源的部署。

定时与多云场景实践

image.png

我们可以在很多场景中使用 Terraform 托管的功能。

场景一:定时部署资源

假设我们需要通过 Terraform 定时部署资源,传统方式下需要本地创建定时任务,执行 Terraform CLI 来做。而在云上,我们可以:

  • 事先编写一个 Terraform 模板,声明想要部署的云资源;
  • 事先编写一个 OOS 运维模板来声明由它调用 ROS 进行资源部署;
  • 在 OOS 中设置为定时执行,OOS 会定时触发 ROS,ROS 则会使用 Terraform 托管功能进行资源部署。

场景二:多云管理

如果我们既想要对多种云平台(如阿里云、AWS 等)的资源进行部署,又想有可视化的结果反馈,可以直接编写 Terraform 的模板来声明各个云上资源,并使用 ROS 的 Terraform 托管功能来进行部署。

Terraofrm 托管总结

image.png

Terraform 托管功能能让用户在云上直接使用 Terraform,和直接使用 ROS 模板部署有一致的控制台体验,且兼容了 ROS 原生的 API,同时兼备了统一的身份认证和权限控制。相比于本地使用 Terraform,不再需要管理多种 Provider 和多个 Terraform CLI 版本。

新模式二:ROS CDK

现有资源定义方式的不足

image.png

事实上,通过直接编写 ROS 模板,或者通过可视化编辑器生成模板,然后进行资源部署的方式是能够大大提升资源的部署效率的,但是也有一些不足之处:

  • 缺少对过程式的支持
  • 复杂场景的编写效率较低
  • 对程序的友好性较低
  • 动态性支持较差

针对这些问题,是否可以更进一步,在模板之上解决这些不足呢?

ROS CDK 是什么

image.png

ROS CDK 是资源编排(ROS)提供的一种命令行工具和多语言 SDK,利用面向对象的高级抽象模式对云资源进行标准定义,从而快速构建云资源。

ROS CDK 以应用作为资源管理的入口,一个应用管理多个资源栈,而每个资源栈中则可以有多个构件。构件可以理解为云上资源的组件,能包含一个或多个资源。

我们可以选择自己熟悉的编程语言(TypeScript/JavaScript/Java/Python/C#)编写应用代码声明想要部署的资源,ROS CDK 会将项目代码转换成 ROS 模板,然后使用该模板进行自动化部署。

使用步骤和项目生命周期

image.png

ROS CDK 的使用步骤也很简单:

  1. 首先,就是初始化项目,配置阿里云的访问凭证(AccessKey)
  2. 其次,就是编写资源代码和测试用例进行本地测试
  3. 最后,通过 CDK CLI 或者直接程序进行资源部署,并管理资源栈

在进行部署的阶段,CDK 会根据用户编写的资源代码进行构造,实例化出各种资源对象;然后在准备阶段做终态前的调整(通常由框架自动完成);进而验证各种资源属性,确保能够正确部署;最终合成出一个 ROS 模板,并使用该模板部署为资源栈。

代码、模板示例

image.png

上图中,左边是 ROS CDK 的资源代码,其中声明了一个 VPC,并使用循环动态生成 3 个 VSwitch。而右边则是由 ROS CDK 生成的 ROS 模板。由此可以看出针对动态生成的场景,ROS CDK 可以大大简化模板编写的复杂度。

应用程序集成 CDK 实现持续部署场景

image.png

假设我们需要实现一个 CI/CD 系统,能够部署这样的资源架构:使用 API 网关中提供 API,使用函数计算的函数提供业务逻辑,要分别部署测试、预发、线上环境的资源,并且支持从测试发布到预发,从预发部署到线上。

针对这样的资源架构,在直接使用 ROS 模板的方式中,需要分别为三个环境准备三个模板,而环境间的部署则还需要动态拼接模板,对应用程序来说并不友好。这里就建议使用 ROS CDK,这样应用程序可以根据环境的不同指定对应的变量,生产对应的资源,从而满足环境的动态性部署。

ROS CDK 总结

image.png

相较于直接使用 ROS 模板部署,使用 ROS CDK 允许开发者选择自己熟悉的编程语言,并能借助其动态特性来实现复杂的编排效果。ROS CDK 能够非常容易地集成到应用程序中,从而能够方便地在程序中进行资源部署。

总结

image.png

企业上云规模逐渐增大,企业云上资源的部署方式从人工开始走向自动,从单云走向多云,从原子操作走向模板部署。随着基础设施即代码的理念而兴起,资源的部署模式也因场景的不同而不同,总体来说有以下四个部署模式的建议:

  1. 作为入门级用户,只需管理有限几个资源,直接使用控制台的方式是最为简单直观的;
  2. 作为企业 IT 管理员,需管理规模较大的云上资源,使用 ROS 模板管理基础设施会是最有效率的选择;
  3. 作为运维研发人员,需要在业务系统中实现资源部署逻辑,那么 ROS CDK 会是最佳选择;
  4. 作为多云管理员,需可视化管理阿里云、AWS、Azure 等多种云的资源,使用 ROS Terraform 托管功能是不二之选。
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
2月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
70 3
|
4天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
19天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
37 5
|
2月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
73 9
|
2月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
62 7
|
3月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
4月前
|
Web App开发 编解码 Linux
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
这篇文章介绍了使用Selenium自动化测试解决报告生成失败问题的方法,包括Linux环境下的部署指南和代码实现。
55 1
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
|
4月前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
3月前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
217 1
|
4月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
下一篇
DataWorks