🌟 在 2023 AWS Community Day 深圳站上,极狐(GitLab) 高级解决方案架构师黄炜锵分享了极狐GitLab 在 AWS 的最佳实践,致力于帮助开发团队提升研发效率。
本文整理自演讲内容,enjoy~
首先问大家一个问题:DevSecOps 和 GitOps 都这么多年了,为什么很多时候还是依靠人工部署 App 和 AWS 资源呢?
市面上虽有很多 Pipeline 相关工具,但在实际上开发过程中,从 Repo 到 CI/CD 再到云,全都需要人工去补足,而非全自动。所谓全自动 Pipeline,就像上图,跑了不久又失败了,那倒不如自己动手更快。
上图是一个 DevOps 全家桶示例,用到了 GitLab、Jenkins、SonarQube、Jira 等工具。
当开发者使用这些工具来搭建 DevOps 平台,需要对它们进行整合,这个过程非常复杂,而且往往会遇到很多问题,例如:
-
想用 IaC,要么 Dev 不懂,要么 Ops 不懂;
-
有 N 个工具要整合(SSO?Custom Plugin?还有不同工具自己的资料库 );
-
没有统一的 Dashboard;
-
工具更新了有可能会出问题。
所以,很多人认为浪费在整合和 Debug DevOps 工具的时间,比实际写代码的时间还多。
上述问题,极狐GitLab 可以帮助解决,尤其是加上 AWS 相关服务,如虎添翼。
轻松配置 IaC:极狐GitLab CI + AWS CDK
配置 IaC 门槛高?
“想要配置 IaC,要么 Dev 不懂,要么Ops 不懂?”
使用 AWS CDK(Cloud Development Kit)可以免除学习 IaC 工具 或 CloudFormation 的烦恼,开发人员可以用自己熟悉的语言定义 AWS 资源,运维也可以看生成的 CloudFormation Template。
AWS CDK 与极狐GitLab 相结合,具有以下四大优势:
-
可通过极狐GitLab CI 进行分支部署(Branch deployment);
-
极狐GitLab 有对应 AWS 镜像 awscli ci image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest;
-
自带多个 AWS CI 模板;
-
海量第三方 AWS CI 模板。
最基本的变更合并:
-
首先,为节省时间,直接合并到主分支;
-
接着,通过极狐GitLab CI 自动跑 Pipeline,从 CDK 变成 CloudFormation 的 Template;
-
最后,CloudFormation 的 state 就改变了整个基础设施。
CloudFormation 对比 Terraform 方便点在于:在 AWS 上部署,不需要整合对象存储存放状态文件。当然,极狐GitLab 也支持 Terraform。
在如今的 IaC(基础设施即代码)时代,包括 Policy(如 IAM,AWS WAF)等,也可以做成 CI/CD Workflow,如果发现问题需要修改,也可以开启 Issue → MR → CI。
另外,版本控制在 Git 和 DevOps 世界非常重要。如果在某个环节出问题了,可以直接回滚特定版本,新建一条 Pipeline 来重新部署一个版本,通过极狐GitLab 加上 AWS 的一些服务就可以做到了。
多工具整合和管理很困扰?
搞定了部署,此外还有很多工具要整理,如安全扫描,因为通常一个安全工具不能解决整个开发流程中的所有安全问题,至少需要 SAST、 DAST、持续扫描工具等。
极狐GitLab 内置七大安全扫描工具,可以进行包括敏感信息检测、容器镜像扫描、开源许可合规检测、 DAST、SAST、依赖项扫描、模糊测试等安全扫描。
如 Demo 所示:
-
只需要简单一行代码, 就可以实现 SAST ;
-
执行 Pipeline 后,可以清晰看到 Repo 里涉及到的编程语言,并分别进行扫描;
-
扫描完成后,即可生成对应的安全报告,直接把问题定位到代码所在行,并且直接创建 Issue,指派给对应的研发去跟进。
Task 太多,CI Server 不够用?
实际开发中,有很多安全扫描任务,需要扫描整个 Pipeline Runner ,往往需要很长时间。如果使用其他 CI/CD 工具,还需要部署 VM,工作量很大。
而极狐GitLab 支持 AWS 无服务器应用 Fargate,只需开启一个 ECS,连接 Fargate,在 CI 做一个 tag,用一个 Customized Runner 连接 Fargate,就可以搭一个无服务器的 CI Runner了。如要进行前文提到的 7 大安全扫描,CI Runner 就会自动连接 Fargate 来分别进行扫描。
如上图所示,所有任务会先上传到 EC2 Instance,再编排工作给 Fargate,可设置最多开多少 Fargate,当然用 Infinite 也可以。
可以看出过程非常简单,启动以后自动跑即可。里面的 config 只需修改两个地方:CI Configuration,设置 Fargate Runner 的 Container Image。
极狐GitLab 原生支持 Serveless 应用:
-
省时间,支持公司或团队同时开多条 CI 流水线进行秒级扫描;
-
省成本,不用开了之后要关,这样其实也是需要时间,VM 的计费跟 Fargate 计费不一样。
以上就是极狐GitLab 结合 AWS 服务区搭建基础设施,进行 DevOps 实践,让 CI Runner 更高效率、更低成本,希望对你有帮助。