时间 2019-08-11 08:10:37 InfoQ
原文
主题 AWS Git
近年来, 构建和发布软件的方式发生了重大转变. 这主要围绕着微服务, 将代码分解成小组件, 使用基础设施即代码, 并使用 Git 作为将所有代码粘合在一起的唯一真相来源.
在本文中, 我将讨论现代软件开发的转变和不同步骤, 以展示无服务器领域的可能解决方案. 此外, 我列出了为这个时代而设计的有用的工具.
什么是无服务器?
在深入无服务器开发和工具的奇妙世界之前, 我先介绍一下我所说的无服务器. AWS 网站谈到了四个主要好处:
无服务器管理
灵活扩展
按价值付费
自动高可用
对我来说, 无服务器是指你不需要自己管理和扩展任何基础设施.
在我的公司 Datree.io https://datree.io/ , 我们在 AWS Fargate https://amazonaws-china.com/fargate/ 上运行 95% 的工作负载, 在 AWS Lambda https://amazonaws-china.com/lambda/ 上运行 5% 的工作负载. 我们是一家无服务器公司; 我们的 AWS 帐户中没有任何 Amazon EC2 实例. 有关更多信息, 请参见以下内容:
Datree.io 案例研究
将生产环境迁移到 AWS ECS Fargate https://datree.io/aws-fargate-migration/
CON320: 使用 AWS Fargate 实现容器化工作负载的卓越运营 (re:Invent 2018 大会)
什么是 GitOps?
Git 是一个 免费的开源分布式版本控制系统 https://git-scm.com/about/free-and-open-source , 它可以快速高效地处理从小型项目到大型项目的所有项目.
CI/CD 顾问 Luis Faceira 认为, GitOps 是一种工作方式. 你可以将其视为一种方法, 其中所有内容都始于 Git 也终于 Git. 以下是一些关键概念:
Git 作为系统真相的单一来源;
Git 作为我们操作 (创建, 修改和销毁) 所有环境的单一位置;
所有变更都是可观察, 可验证的.
在云出现之前你是如何构建软件的
在前云时代的瀑布式开发中, 你曾经有单独的团队分别负责开发, 测试, 安全, 运营, 监控等等.
现在, 在大多数组织中, 都有一个向开发人员完全自治和开发人员拥有整个生产路径的过渡. 开发人员是 国王或王后 .
这些团队 (Ops, 安全, IT 等) 过去是验证和控制每个开发人员变更的看门人. 现在, 它们更像是一个卫星单位, 推动政策落实, 制定最佳实践和标准. 它们不再是生产瓶颈, 它们提供了组织范围的平台和赋能解决方案.
一切都是代码
随着向开发人员完全拥有整个管道的过渡, 开发人员可以自动化所有内容. 我们比以往任何时候都有更多的代码, 过去是手工操作的过程现在用代码来描述.
这是一个很好的转变, 以下是其中的一些好处:
自动化: 通过将所有东西存储为代码, 所有东西都可以在瞬间自动化, 重用和重建.
不可变: 如果出现任何错误, 再次从存储的配置创建它.
版本控制: 可以应用和恢复变更, 并跟踪到做出变更的单个用户.
GitOps:Git 已成为系统真相的单一来源
第二个主要的转变是, 现在所有的东西都在一个地方! Git 是存储所有代码和启动所有操作的地方. 无论是测试, 构建, 打包还是发布, 现在一切都是通过拉请求触发的.
一切事物的代码化使这一点被放大.
无服务器时代的工具助手
市场上有很多有用的工具, 下面是一些为无服务器而设计的工具.
代码
始终将代码存储在源码控制系统中. 近年来, 越来越多的功能被编码, 如 BI,Ops, 安全和 AI. 对于新晋开发人员来说, 某些功能是否应该使用源代码控制有时候并不是很明显.
- GitHub https://github.com/
- AWS CodeCommit https://amazonaws-china.com/codecommit/
- GitLab https://gitlab.com/
- BitBucket https://bitbucket.org/
构建和测试
我见过的最常见的错误是在 GUI 中手动配置构建作业. 这对于小型 POC 来说可能还不错, 但它是不可扩展的. 你应该将你的作业编入 Git 存储库中. 这里有一些工具可以帮助你构建和测试:
- AWS CodeBuild https://amazonaws-china.com/codebuild/
- CodeFresh https://codefresh.io/
- GitHub Actions https://developer.github.com/actions/
- Jenkins-x https://jenkins-x.io/
- CircleCI
- TravisCI https://travis-ci.com/
安全和治理
当以无服务器方式工作时, 最终会出现许多 Git 库. 代码包的数量可能会很惊人. 对统一代码标准的需求依然如故, 但是, 现在要在你的研发组织中强制执行它要困难得多. 以下是一些可能可以帮助你应对挑战的工具:
- Snyk
- Datree http://datree.io/?utm_source=awsblog
- PureSec
- Aqua
- Protego
打包和发布
构建无服务器应用程序是将微服务连接到一个单元中. 例如, 你可能正在使用 Amazon API 网关 https://amazonaws-china.com/api-gateway/ , AWS Lambda https://amazonaws-china.com/lambda/ 和 Amazon DynamoDB https://amazonaws-china.com/dynamodb/ . 你应该使用一个打包器将配置保存在一个位置, 而不是每一个单独配置. 这使你可以在多个环境中轻松地对应用程序进行版本控制和复制. 这里有几个打包器:
- Serverless Framework https://serverless.com/
- AWS Serverless Application Model (AWS SAM) https://amazonaws-china.com/serverless/sam/
程序包
当使用许多不同的无服务器组件时, 你应该创建小的工具包, 以便能够跨不同的 Lambda 函数导入. 你可以使用特定于语言的存储库, 如 NPM 或 RubyGems, 或者使用更全面的解决方案. 这里有几个程序包工件库, 允许托管多种编程语言:
- GitHub Package Registry https://github.com/features/package-registry
- Jfrog Artifactory https://jfrog.com/artifactory/
- Sonatype Nexus https://www.sonatype.com/nexus-repository-sonatype
监控
在处理无服务器应用程序时, 这部分尤其棘手, 因为所有内容都被分割成小块. 使用支持这种工作模式的监控工具非常重要. 下面是一些可以处理无服务器的工具:
- Rookout
- Amazon CloudWatch https://amazonaws-china.com/cloudwatch/
- Epsagon
- Lumigo https://lumigo.io/
- NewRelic https://newrelic.com/devops/serverless-monitoring
- DataDog
总结
无服务器时代带来了许多转变, 比如对整个管道进行编码, Git 是唯一的真相来源. 这并不意味着我们过去遇到的安全, 日志记录等问题都已经消失, 你应该继续解决这些问题, 并利用工具使你能够专注于你的业务.
来源: http://www.tuicool.com/articles/M7VNb2Z