本文是 Datree.io 首席技术官兼联合创始人、AWS 社区精英 Shimon Tolts 所写的一篇客座文章。他专门从事开发人员工具和基础设施研究,所经营的公司完全没有服务器。
近年来,软件构建和发布方式发生了重大转变。这些工作主要围绕微服务、将代码拆分成小组件、使用基础设施即代码,以及将 Git 用作粘合一切的单一事实来源展开。
在本文中,我们将讨论现代软件开发的转变过程和不同环节,以展示无服务器领域可行的解决方案。此外,我还列出了适用于当今时代的实用工具。
什么是无服务器?
在深入探讨无服务器开发和工具构建这一奇妙领域之前,我先介绍一下什么是无服务器。AWS 网站谈到了四大主要优势:
无需管理服务器。
可灵活扩展。
付出与价值成正比。
自动实现高可用性。
对我而言,无服务器是指无需自己管理和扩展的所有基础设施。
在我的公司 Datree.io,95% 的工作负载是在 AWS Fargate 上运行的,而其余 5% 则在 AWS Lambda 上运行。我们是一家无服务器公司;我们的 AWS 账户中没有 Amazon EC2 实例。有关更多信息,请参阅以下内容:
io 案例研究
在生产环境中迁移到 AWS ECS Fargate
CON320: Operational Excellence w/ Containerized Workloads Using AWS Fargate (re:Invent 2018)
什么是 GitOps?
Git 是免费的开源分布式版本控制系统,旨在快速高效地处理包括小型项目和超大型项目在内的所有内容。
CI/CD 顾问 Luis Faceira 认为,GitOps 是一种工作方式。您可以将其视为一种一切均以 Git 开始和结束的方法。以下是一些重要概念:
Git 是系统的单一事实来源
Git 是我们操作(创建、更改和销毁)所有环境的单一场所
所有更改都是可观察/可验证的。
在云出现之前,您是如何构建软件的
回首瀑布式云前时代,大家曾经有单独的团队负责开发、测试、安全性、运营和监控等工作。
现在,大多数组织正在向开发人员完全自主和开发人员拥有整个生产路径转变。开发人员是关键环节 :)
这些团队(运营/安全/IT/其他)曾是验证和控制所有开发人员更改的“守门员”。现在,它们更像是辅助部门,负责推进策略和制定最佳实践和标准。它们不再是生产瓶颈,而且可以提供组织范围的平台和支持解决方案。
汇编所有内容
随着向完全由开发人员拥有整个管道不断转变,开发人员可以实现所有内容自动化。我们拥有的代码比以往任何时候都多,过去手动执行的流程现在可用代码来描述。
我认为这是一个很好的转变。下面是这一转变的部分优势:
自动化:通过将所有内容存储为代码,瞬间即可自动化、重复使用和重新创建所有内容。
不可变的:如果出现差错,可以通过存储的配置重新创建。
版本控制:可以应用和恢复更改,并可跟踪做出更改的单个用户。
GitOps:Git 已成为单一事实来源
第二项重大转变是所有内容现在可集中于一处! Git 是存储所有代码和所有运营开始的场所。无论是测试、构建、打包还是发布,现在所有内容都可通过 pull 请求触发。
汇编让这种情况愈演愈烈。
适合无服务器时代的实用工具
市面上有很多有用的工具,下面列出了一些适合无服务器的工具。
代码
始终将代码存储在源代码控制系统中。近年来,越来越多的功能实现了汇编,如商业智能、运营、安全性和人工智能。对于新手开发人员来说,有时不好确定是否应将源代码控制用于某些功能。
GitHub
AWS CodeCommit
GitLab
BitBucket
构建和测试
我发现,最常见的错误就是在 GUI 中手动配置构建作业。这种方法对小型 POC 来说可能是不错的选择,但它无法扩展。您应该汇编作业并将其置于 Git 存储库中。下面提供了部分有助于进行构建和测试的工具:
AWS CodeBuild
CodeFresh
GitHub Actions
Jenkins-x
CircleCI
TravisCI
安全性和监管
当以无服务器方式工作时,您最终会拥有许多 Git 存储库。代码包的数量可能十分惊人。对统一代码标准的需求一如既往,但现在强制研发部门实施这些标准会更加困难。下面是一些可能有助于您应付这一难题的工具:
Snyk
Datree
PureSec
Aqua
Protego
捆绑和解绑
构建无服务器应用程序是指将微服务连接成一个整体。例如,您可能会使用 Amazon API Gateway、AWS Lambda 和 Amazon DynamoDB。您应使用捆绑程序将配置保存在一处,而不是单独执行每项配置。这样可以针对多个环境轻松对应用程序进行版本控制和复制。下面是一些捆绑程序:
Serverless Framework
AWS Serverless Application Model (AWS SAM)
打包
当使用许多不同的无服务器组件时,您应该创建小型工具包,以便能够跨不同 Lambda 函数导入。您可以使用某语言专用的存储库(如 npm 或 RubyGems),也可以使用更全面的解决方案。下面是一些允许托管多种编程语言的程序包构件库:
GitHub Package Registry
Jfrog Artifactory
Sonatype Nexus
监控
在使用无服务器应用程序时,这部分特别棘手,因为所有内容都分成了小块。请务必使用支持该工作模式的监控工具。下面是一些可以处理无服务器的工具:
Rookout
Amazon CloudWatch
Epsagon
Lumigo
NewRelic
DataDog
小结
无服务器时代带来了许多转变,例如汇编整个管道,Git 成为了单一事实来源。这并不意味着我们过去遇到的安全性、日志记录等问题已经消失,您应该继续解决这些问题,并充分利用各种工具,以便您能够集中精力处理业务。
本文转载自 AWS 技术博客。
原文链接:
评论