S'S ALGORITHM

关于云计算服务中IaC和CI/CD服务的总结和比较

概念和关系

IaC(Infrastructure as Code)是指将基础设施资源(例如服务器、虚拟机、网络、存储等)的配置和管理编码为文本文件的做法。这些文件通常使用声明性语言编写,例如YAML、JSON或HashiCorp Configuration Language(HCL)。然后,可以使用版本控制系统来跟踪和管理这些文件。

IaC的主要优点包括:

CI/CD(Continuous Integration/Continuous Delivery)是一种软件开发实践,它强调自动化软件开发和测试过程的各个方面。CI/CD管道通常包括以下步骤:

  1. 代码提交: 开发人员将代码提交到版本控制系统。
  2. 构建: 代码被自动构建成可执行文件。
  3. 测试: 可执行文件经过自动测试。
  4. 部署: 如果测试成功,可执行文件将被部署到生产环境。

CI/CD的主要优点包括:

IaC和CI/CD的关系

IaC和CI/CD密切相关。IaC可用于描述和管理基础设施,而CI/CD可用于自动化基础设施的配置和部署。以下是一些将IaC和CI/CD结合使用的示例:

将IaC和CI/CD结合使用可以创建更可重复、一致、可扩展和可靠的基础设施。还可以更快地发布新功能和修复程序,并降低成本。

云计算服务中的IaC服务总结和比较

AWS

GCP

Azure

Terraform:由于它在三个云中都广泛采用,所以单独列出比较好。

一个开源的基础设施即代码工具,可用于以声明性方式描述和管理各种基础设施资源,包括 GCP 资源、AWS 资源、Azure 资源等。它使用 HashiCorp Configuration Language(HCL)来定义基础设施。我所在做的项目,就是对方用 Terraform 进行管理,以前我有过小的学习,但那时候我基础知识有限还无法完全理解很多过程,我会在接下来系统学习一次,相信会有更深的理解。

云计算中CI/CD服务的总结和比较

AWS:CodePipeline 用于构建、测试和部署应用程序的完全托管服务。易于使用,可扩展,与其他 AWS 服务很好地集成。它内部集成了 CodeCommit,CodeBuild,CodeDeploy服务,以前似乎是有CodeStar但是官网发表,2024年7月开始,他就停止服务了。Pipeline和 Github 很像,但是功能有限,限于在AWS使用。可以拉取 Github 仓库资源进行部署,这一点还是不错的。

GCP:Cloud Build 用于构建和测试应用程序的完全托管服务,和其他服务的集成很好。Cloud Deploy 用于部署应用程序的完全托管服务。它支持多种部署策略,并可以与其他 GCP 服务(例如 Cloud Build 和 Cloud Monitoring)集成。Cloud Source Repositories:一种用于托管 Git 存储库的完全托管服务。它可以与其他 GCP 服务(例如 Cloud Build 和 Cloud Deploy)集成。以上这三种服务,就对标AWS的Pipeline了。

Azure:Azure DevOps Pipelines。我不太熟,所以暂且列出名字即可。

写这篇的契机

我之所以查到这些是因为我想回顾起来以前用过的 Cloud Run 服务,Cloud Run容器服务在 AWS 中有 ECS 和 Fargate 等服务相似。

关于如何部署 Cloud Run 我以前经验不足的时候进行的一些实践,但是理解很浅,因此想总结一下现在的理解。

它是通过对 Docker file 的部署,在容器中运行应用的一种服务。使用 docker builddocker push 方法就可以将部署好的 image 文件推送到 Register 仓库,然后就可以用 gcloud run deploy 命令一键部署了。大部分时候是为了部署应用程序,所以我在网上看到的方法都是关于 Flask 框架的,这对我的理解有很大的偏差影响,但是事实上,跑一些类似 AWS Lambda 程序也可以。

同时如果将 Cloud Build 和 Cloud deploy 和 Cloud Run 集成,就可以在代码更改的时候,出发自动部署,这就很像之前搞的 Github Actions 的workflow了。很方便。但是根据业务需求,也许简单的脚本,并不需要自动部署和版本管理,之需要通过其他的服务,执行对应的 CLI 命令就够了。根据需求的开发最重要。

Recap

外面最大的开源工具就是 Github,庆幸我每天都在用它。让我对这些服务有了比较初步的理解,而容器服务更加重要,毕竟整个云,都是基于虚拟容易,运作的。我最近开始学习的区块链,更是数字世界以及版本管理的结合体。

无论他们的名字是什么,底层原理都是来自Git工具,和Docker工具,而这两者是DevOps中非常重要的部分,我还在学习基础的Git和Docker,理解还是不太够,但是只要理解了底层知识,相信不管什么云工具都是一样原理。