有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 云资源自动化 for Terraform > 客户案例 > Convertlab 基于腾讯云 Terraform 的 IaC 实践
本文章由 Convertlab DevOps 团队总结,阐述 Convertlab 是如何借助云资源自动化 for Terraform 来管理云上的基础设施,加速业务创新,实现降本增效。

Convertlab 简介

Convertlab(上海欣兆阳信息科技有限公司)成立于 2015 年,致力于搭建数字营销枢纽,一站式营销中台,让企业可以从容应对数字营销,让营销变得简单。
Convertlab 以融合“营销科技”和“运营艺术”为特长,基于自主创新开发的 Convertlab Marketing Cloud 产品,提供专业、便捷、智能的一体化营销云解决方案。借助互联网大数据、人工智能等技术,帮助企业构建贴近用户真实行为的画像洞察。通过营销自动化精准触达和交互,提升客户体验,落地数据驱动的新型营销,实现业绩的超级增长。
Convertlab 专注于为企业提供创新的数字营销枢纽 SaaS 服务,帮助企业的市场人员在一个开放集成的平台上完成客户的发掘和转化,并全面衡量营销效果。至今已为 400 家企业提供企业级数字营销服务并获得最佳实践。

引入 IaC

Terraform 是一种基础架构即代码工具。基础设施即代码(IaC)是一种基于软件开发实践的基础设施自动化方法。通过编写和执行代码来定义、部署、更新和销毁基础设施。这允许我们在管理基础设施时应用软件开发工具,如版本控制系统、自动化测试和部署编排工具。
Convertlab 每一个创新都来源于客户真实需求。引入 IaC 的动力一方面来自于客户,有许多外企客户生产环境不允许手工操作,仅允许编写 Terraform 代码进行云资源的采买和变更。另一方面,来自于产品线的完善,需要管理的研发环境数量及基础设施规模日益增加,需要更高效的方式。

显著提升交付效率

Convertlab 的产品属于大数据分析类应用,依赖的云产品也比较丰富。涉及 K8S 集群,EMR 大数据集群,ES 集群,多个不同类型的数据库,消息中间件,对象存储等。除了产品运行所需的云产品外,还有日志、监控相关的产品。

虽然 Convertlab 提供的是 SaaS 服务,一些中大型客户会选择私有化部署的需求,即将产品部署到客户的云账号中。如果通过手工采购资源的方式,不仅耗时,而且容易出错。在腾讯云控制台上采购一个云产品,通常需要经历大量配置,才能提交订单,实例采购成功后,还有一些需要配置的工作。操作过程中出现错误后,会影响到产品的正常运行,排查起来费时费力。即便是经验丰富的同事,也很难一次做对。如果是由客户 IT 负责采购和配置的,那么花在云资源置备上的反复沟通的时间非常可观。

Convertlab DevOps 团队,首先针对 DMHub 开发了 Terraform 代码和产品自动化部署工具,实现了从云资源采购,到产品部署,安装测试的全程自动化。部署一套环境时间,从数天降低到几个小时,显著缩短了客户从采购到上线运营的时间。以软件开发实践去管理云基础设施,是 Terraform 最大的魅力所在。将所有基础设施变更纳入到版本控制系统中,例如自动化、可重复且一致、持续迭代、易于测试、自文档化等。

每日部署,巩固产品质量

环境差异,是引起一些软件缺陷无法及时发现和难以复现及定位的常见原因。手工置备的环境,运行时间久了之后难免会出现配置漂移,数据不一致导致的一些问题。有了为产品量身定制的 Terraform 代码后,DevOps 团队基本告别了手工环境置备与清理。从研发测试环境到交付给客户的环境,环境的创建是可重复且一致的。

通过将 Terraform 与其他自动化工具相整合(例如 Ansible、Helm 等),Convertlab 实现了产品的自动化部署,即从云资源的置备、云资源检查、环境初始化到产品部署,全程无需人工干预,内部测试环境还会自动配置 HTTPS 证书、域名解析等,通过浏览器可访问部署完成的产品。

有了自动化部署能力之后,开始运行每日部署,即端到端的安装测试。每天定时运行流水线,置备一套全新环境,然后部署产品,几个小时后自动销毁环境。如果有任何失败,都会发通知到企微群,然后进行排查分析。之后,在流水线中加入了自动化安装测试的环节,在产品部署完成后验证主要产品功能是否正常。每日部署发现了不少除非经常运行否则不易被发现的问题。这些问题藏在各个环节,例如 Terraform 代码、产品部署脚本、产品的数据、初始化/升级迁移工具等。巩固和提升了产品的发版质量。

加速架构演进,更加安全合规

基础设施安全是应用安全的基石。在云上启用一项安全特性,涉及许多的配置和验证工作。手工配置的环境有时由于项目进度,运维同事的经验等原因,安全相关的配置容易打折扣,执行不到位。由于 Terraform 可以自动化执行,因此不怕定义的过程繁琐一些。

整个云上架构,参照云厂商提供的最佳实践来做,不断将更多安全基线,架构最佳实践纳入到代码中。
例如:
多可用区分配云资源
每个环境独立的密钥对
所有云产品采用高强度随机密码
细粒度的 IAM 授权
安全组采用按端口最小授权原则

组件的升级和兼容性测试变得更容易。例如需要进行 k8s 版本升级,es 版本升级,测试产品对不同云产品(如 redis,mongodb)版本的兼容性等。拉起一套新环境,进行测试,通过后再发布新的 Terraform 代码。通过 Terraform 用软件开发的方式,不断去 Review 改进基础设施架构。并将经验沉淀到代码中。

临时环境自助创建

研发团队可能会出现一些环境的竞争,或者临时的环境需求。例如需要一套临时环境,部署指定产品版本进行某些测试任务。
基于每日部署沉淀的经验,Convertlab 定义了一条流水线执行这个任务。只需要简单确认云资源规格数量、需要部署的产品版本,开始运行流水线,当流水线运行结束,就可以获取到这个环境的产品 URL 和相关登录凭证,当工作结束需要销毁环境时,只需要在流水线上简单操作就能自动销毁,不再产生费用。由于环境的获取变得非常容易,经常在周五,或者节假日前将环境销毁,工作日再创建。也能节省一些云资源的费用。

从单个产品向多个产品复制

有了 DM Hub 产品的成功经验之后,我们陆续将自动化能力复制到其他产品线,先后为 Data Hub,AI Hub 产品开发了 Terraform 代码和自动化部署工具。Convertlab 多个产品所使用的腾讯云云产品以及参数配置,有很多是可以复用的。我建立并维护了一些 Terraform Module 库,因此可以像搭积木一样快速为其他产品,甚至是临时环境准备 Terraform 代码。自动化部署的应用场景,也从单一产品部署,逐步扩展到多产品联合部署,即多个产品存在共用云资源的情况。

引入任何新技术都会有学习成本,Terraform 也不例外。当我们有了一些开发经验和 Terraform Module 库之后,现在如果有一个临时的环境需求,编写 Terraform 代码所需花费的时间甚至比手工登录控制台买资源还要快。

总结与展望

IaC 是 DevOps 的基石。如果不能实现基础设施自动化,就不存在真正意义上的端到端完整闭环。当有了这个基石以后,无论是性能压测、各类自动化测试还是灾难演练,都能以具备成本效益的方式开展。

如果说要总结过去一年多,Convertlab 在实现基础设施自动化过程当中的经验,那么 Convertlab 认为关键在于:不要等一切都就绪了再开始尝试 Terraform,而是尽早参与到这个过程中来,一起完善并最先享受成果。要相信腾讯云,相信腾讯云 IaC 团队。

在腾讯云上开发 Terraform 代码也并不是一帆风顺的,也遇到了困难。当时腾讯云 Terraform Provider 版本,个别云产品 Resources 的能力,参数值,输出值不满足业务需求,仍然有些步骤需要登录网页控制台手动完成,某些云产品或配置操作暂时没有提供 Resources 或者 DataSources。因此无法跑通自动化流水线。

此时,在腾讯云 IaC 团队的支持下,及时完善了对 resources 的支持,并在较短时间内发布了新的 Provider 版本。发展过程中又不断发现新需求,提需求给 IaC 团队,请他们完善 Terraform 相关能力,也会和相关云产品的同事一起解决问题。整个合作过程响应及时、沟通顺畅。现在所看到的腾讯云 EMR,TKE,ElasticSearch 等产品的 Terraform Resources,是在 Convertlab 提的需求下,一起共创出来的。

对于基础设施的自动化,还有很多事情可以做。例如 Terraform 的跨地域灾备能力、日志监控与云产品深度集成等,Convertlab 将与腾讯云一起不断探索。Convertlab 将基于腾讯云,不断的更新和迭代产品,希望在未来能够和腾讯云同成长,共创辉煌。