现代软件开发的发展速度非常快。开发团队每天都要多次部署代码,新的基础设施环境也在不断出现和消失。在这种环境下,手动配置基础设施显然已经无法满足需求了。

多年来,开发者们总是通过登录控制面板、填写各种表格来手动配置服务器。这种方法对于小型项目来说确实可行,但很快就暴露出了其局限性——每一步手动操作都会增加出错的风险,导致基础设施配置出现偏差,进而使得重复创建相同的环境变得非常困难。

基础设施即代码这一技术解决了这些问题。开发者不再通过界面进行操作,而是用代码来定义基础设施的配置。这种做法使得基础设施配置具有可预测性、可重复性,并且便于实现自动化。

近年来,除了传统的基础设施即代码工具外,另一种方法也变得越来越受欢迎:直接使用云API来创建和管理基础设施。这种方法让开发者能够完全控制资源的分配方式以及它们如何被集成到工作流程中。

本文将解释什么是基础设施即代码,为什么API是实现这一目标的强大工具,以及开发者如何通过简单的脚本来实现对云资源的自动化管理。

如果你对云平台、命令行接口以及Python、Bash或JavaScript等脚本语言有一定的了解,那么阅读本文会更加容易。同时,熟悉API、认证机制以及CI/CD开发流程也会帮助你更好地应用本文中介绍的自动化技术。

我们将涵盖以下内容:

什么是基础设施即代码?

基础设施即代码意味着使用代码而不是手动操作来管理基础设施。

你不再需要手动配置服务器、数据库和网络,而是通过脚本或配置文件来定义这些资源的设置。这些文件会描述你希望基础设施所处的状态,然后相应的工具或脚本就会自动创建并维护这种状态。

例如,你可以不用手动创建数据库,而是通过代码来定义它,如下所示:

database:
  name: app_db
  engine: postgres
  version: 16

一旦代码运行完毕,数据库就会自动被创建出来。

这种做法具有几个显著的优势。

首先,它能提高一致性。所有环境都是根据相同的定义来创建的,因此开发环境、测试环境和生产环境之间能够保持一致。

其次,它提高了可重复性。如果基础设施出现故障,只需通过代码就能在几分钟内重新创建它。

第三,它有助于更好地进行版本控制。基础设施的定义与应用程序代码存储在同一个代码库中,团队可以方便地审查、跟踪和回滚各种变更。

最后,它实现了自动化。在部署、测试或CI/CD流程中,都可以自动创建所需的基础设施。

手动管理基础设施的局限性

在“基础设施即代码”这一概念普及之前,基础设施的管理主要依赖于控制面板和手动配置。

开发人员需要打开云控制台,然后依次执行以下操作:

  • 创建服务器

  • 添加存储空间

  • 配置环境变量

  • 连接数据库

  • 添加域名

这些操作虽然能够达到预期效果,但也带来了一些问题。

首先,手动配置很难被完整记录下来。即使团队编写了操作指南,也常常会遗漏一些细节,久而久之,不同环境之间就会出现差异。

此外,手动流程还会拖慢开发速度。创建一个新的环境可能需要花费数小时,而不是短短几秒钟。

更严重的是,手动管理的基础设施很难进行测试。一旦出现问题,要重现原来的环境条件会非常困难。

而“基础设施即代码”通过将基础设施转化为可以通过脚本进行操作、可以接受测试、也可以实现自动化的对象,从而解决了这些问题。

为什么API是强大的基础设施即代码工具

很多人认为“基础设施即代码”主要依赖于Terraform或CloudFormation这样的工具。这些工具确实非常强大,但它们并不是唯一的选项。

每一个现代云平台都提供了API,开发人员可以通过这些API以编程的方式创建各种基础设施资源。

这意味着可以直接通过代码、使用HTTP请求或命令行接口来控制基础设施。

使用API进行基础设施管理具有很多优势:

首先,它提供了极高的灵活性。开发人员可以将基础设施的创建过程直接集成到应用程序、部署脚本或内部工具中。

其次,它降低了工具使用的复杂性。团队无需学习专门的基础设施即代码编程语言,而是可以使用他们已经熟悉的语言,比如Python、JavaScript或Bash来完成任务。

第三,它使得基础设施能够实现动态管理。脚本可以根据实际需要创建资源,自动调整其规模,并在任务完成后将其删除。

例如,一个测试套件可以自动创建数据库、运行测试,然后在测试结束后删除该数据库。这样做能够保持环境整洁,同时降低相关成本。

API本质上将云转变成了一个可编程的平台。

使用脚本自动化基础设施管理

利用API进行基础设施自动化通常会遵循一个简单的工作流程。

  1. 首先,脚本会使用API令牌或认证信息与云平台进行身份验证。

  2. 其次,脚本会发送请求来创建或修改各种资源,比如应用程序、数据库或存储空间。

  3. 第三,脚本会从响应中获取相应的标识符或配置参数。

  4. 最后,这些参数会被用于后续的步骤,例如部署或集成操作。

由于这些步骤都是通过代码来执行的,因此它们可以很容易地被纳入CI/CD流程中。

一个典型的CI/CD流程可能包括以下步骤:

  • 创建基础设施资源

  • 部署应用程序

  • 运行测试

  • 收集相关指标数据

  • 销毁临时环境

这种做法能确保每次部署都能遵循相同的流程。

以Sevalla为例的实际应用

通过API实现“基础设施即代码”这一理念的一个实际方法是使用能够直接与云平台API交互的命令行工具。这样,就可以利用脚本而非仪表板来自动化基础设施的创建过程。

一个例子就是Sevalla CLI,它将各种基础设施操作封装成了可以在终端中执行的命令,这些命令既可以手动运行,也可以用于自动化流程中。

Sevalla是一款以开发者为中心的PaaS平台,旨在简化开发工作流程。它提供了高性能的应用程序托管服务、托管型数据库、对象存储以及静态网站功能,所有这些服务都集成在同一个平台上。

其他类似的选项还包括AWS和Azure,不过使用它们需要安装复杂的命令行工具,并且会带来较多的DevOps开销。而Sevalla则提供了更加简单易用的体验,其使用体验与Heroku类似。

安装CLI

你可以使用以下shell命令来安装Sevalla CLI:

bash <(curl -fsSL https://raw.githubusercontent.com/sevalla-hosting/cli/main/install.sh)

安装完成后,你可以使用help命令查看所有可用的命令列表:

Sevalla CLI帮助文档

第一步是进行身份验证。在使用Sevalla CLI之前,请确保你已经在该平台上注册了账户。

sevalla login

对于CI/CD流程这样的自动化环境来说,可以使用API令牌来进行身份验证。这种令牌会被存储在环境变量中,因此脚本可以在无需用户干预的情况下自动运行。

export SEVALLA_API_TOKEN="your-api-token"

完成身份验证后,你可以使用 sevalla apps list 快速查看自己的应用程序列表。

Sevalla 应用程序列表

使用 CLI 管理基础设施

现在,你可以直接通过命令行来创建基础设施。例如,你可以首先创建一个用于运行后端代码的应用程序服务:

sevalla apps create --name myapp --source privateGit --cluster 

这条命令会在平台上创建一个新的应用程序资源。无需通过网页界面填写表格,整个设置过程只需通过一条命令即可完成。

由于这条命令可以保存在脚本或配置文件中,因此它就成为了项目基础设施定义的一部分。

创建完应用程序后,你可能还需要一个数据库。同样,这个步骤也可以通过编程方式来完成:

sevalla databases create \
  --name mydb \
  --type postgresql \
  --db-version 16 \
  --cluster  \
  --resource-type  \
  --db-name mydb \
  --db-password secret

这条命令会创建一个版本明确、配置信息固定的 PostgreSQL 数据库。在自动化的工作流程中,数据库创建步骤可以在准备测试环境时自动执行。

当应用程序和数据库都准备好之后,下一步可能是配置环境变量,以便应用程序能够连接到数据库:

sevalla apps env-vars create  --key DATABASE_URL --value "postgres://..."

这些配置信息可以在部署过程中被注入到系统中,从而确保应用程序始终使用正确的设置进行运行。

部署自动化也是“代码即基础设施”这一理念的关键组成部分。无需人工触发部署过程,只要仓库中有新的代码更新,脚本就会自动执行部署操作。

sevalla apps deployments trigger  --branch main

这样,CI/CD 系统就能在测试通过后自动部署应用程序的新版本。

基础设施自动化还包括扩展能力和监控功能。例如,如果某个应用程序需要更多的处理资源来应对更高的访问量,你就可以通过编程方式调整运行中的进程数量。

sevalla apps processes update  --app-id  --instances 3

你还可以通过命令行获取各种系统指标数据,这样监控工具或脚本就能分析系统的运行性能了。

sevalla apps processes metrics cpu-usage  

同样,你也可以查询应用程序的各类指标,比如响应时间或请求频率,以此来检测性能问题。

在基础设施自动化中,另一个常见的步骤是配置域名。无需手动将域名与应用程序关联起来,可以通过脚本在环境设置阶段完成这一操作。

sevalla apps domains add  --name example.com

将这些命令结合到脚本或自动化流程中,你就可以完全实现基础设施生命周期的自动化。例如,一个持续集成管道可以创建应用程序、配置数据库、设置环境变量、部署代码、绑定域名,并监控性能——所有这些过程都不需要人工干预。

由于每个命令都支持JSON格式的输出结果,因此脚本还可以捕获平台返回的值,并在后续步骤中重新使用这些数据。例如:

APP_ID=$(sevalla apps list --json | jq -r '.[0].id')

这种将多个命令串联起来的方式,使得构建强大的自动化工作流程变得非常容易。

在实际应用中,开发团队通常会将这些命令放在部署脚本或自动化流程中。每当有代码被推送到仓库时,相应的自动化流程就会自动配置或更新运行应用程序所需的基础设施。

这种方法证明了:通过API和自动化工具,基础设施完全可以像应用程序代码一样,通过脚本、版本控制以及自动化工作流程来进行管理。

“基础设施即代码”能提升开发人员的效率

“基础设施即代码”的最大好处之一就是能够显著提高开发人员的效率。

开发者不再需要等待基础设施配置完成,也不必手动进行环境设置。

现在,基础设施已经成为了开发工作流程中不可或缺的一部分。

当新功能需要某些基础设施资源时,开发者只需将相应的配置信息添加到仓库中,自动化流程就会自动创建所需的基础设施。

这种方式大大减少了延迟,使开发工作能够更加高效地进行。

对于新加入团队的成员来说,这也使得上手工作变得非常容易——他们只需要执行一条命令,就能快速搭建出一个完整的开发环境。

基础设施的未来发展方向

云基础设施正在朝着自动化和可编程的方向不断发展。

越来越多的平台提供了API,使得各种资源都可以通过代码来进行创建、配置和监控。

这种发展趋势与开发人员的日常工作方式非常契合。

应用程序是用代码开发的,部署过程也是通过代码自动完成的,那么基础设施自然也应该用代码来定义。

“基础设施即代码”结合API这一理念,进一步推动了基础设施发展的方向——它使基础设施能够直接融入到开发工作流程、自动化管道以及各种内部工具中。

这样就能加快开发速度,减少配置错误,从而让系统更加可靠。

结论

“将基础设施视为代码”这一理念彻底改变了团队管理云环境的方式。

通过用代码取代手动配置,各组织能够实现配置的一致性、自动化以及可重复性。

利用API来控制基础设施还能进一步提升灵活性——开发人员可以将基础设施直接集成到脚本、流水线或应用程序中。

这种做法使得云计算平台真正成为了一个可编程的平台。

随着系统变得越来越复杂,部署周期也越来越短,自动化管理基础设施的能力将会变得愈发重要。

对于现代的开发团队来说,将基础设施视为代码已不再是一种可选的做法;这其实是实现可靠且可扩展的软件交付的基础。

希望您喜欢这篇文章。如想了解更多关于我的信息,请 访问我的LinkedIn页面

Comments are closed.