本文描述了一种系统的大规模应用地貌的方法。At Scale指的是:
该需求需要模块化和分层的体系结构以及基础设施连续交付工作流。
本文分为三个部分1)基本组件-模块2)存储.tf和.tfvars的静态布局3)部署.tf的动态机制。
从技术上讲,模块只是一个包含.tf文件的文件夹,这些文件可以存储在模块存储库中。
在下面的示例中,实现了“apigateway+lambda”模式,并将其打包到一个模块中。
模块提高了可重用性,避免了冗余。使用措辞得体的模板,可以轻松地将具有不同参数的相同基础设施架构部署到多个帐户。
隔离危险:即对暂态组件的操作(地形应用、销毁)不会影响永久数据存储。
3.性能:并非每次应用terraform时都要检查整个基础设施。
模块便于组件式基础设施测试。总体思路是在隔离环境中临时提供基础设施,之后立即进行评估、测试和销毁。
本节介绍用于存储.tf和.tfvars文件的模块化和分层布局,以解决可伸缩平台的开发和部署问题。
除此之外,构建块是模块中的元素(即资源、脚本、工件、不可变的图像等)。
一个S3存储桶,一个λ函数。Lambda由S3事件PutObject事件触发,用于将CSV转换为拼花。
本演示同时使用公共模块和私有模块。公共模块托管在GitHub上并可公开访问,我们使用GitLab存储库托管私有模块(aws-module-lambda)。
将具有不同配置的同一模板的不同版本部署到不同的帐户或环境中。
您希望在试运行环境中测试新版本的体系结构,但还不希望将其部署到生产环境中。
您希望在dev环境中调配较小的实例以节省成本,但在PRD环境中分配更多计算能力
本节介绍一种持续交付基础设施的机制,包括典型的平台工作流和按拉入请求操作(Operation By Pull Request)。
在此机制下,所有操作更改都使用GIT提交进行建模,并由GitLab Runner(Executor)通过GitLab CICD管道部署到云帐户中。
上图说明了工作流程的总体思路,可以简化为以下要点:
可以通过GitLab Runner、GitLab用户、受保护分支功能等实现精细的访问控制。
在可投入生产的系统中,应该添加关于项目要求的更多细节,如.tfplan加密、terraform lint、terraform销毁按钮、作为代码的策略、tfstate仪表板、遵从性检查等。
综上所述,本文介绍了一种模块化的层次化体系结构,使Terraform的系统开发和部署成为可能。
分层布局的精神是将开发区(模块层和模板层)与部署区(栈层)分开。层的所有元素都是模块,因此可以轻松地进行版本控制、重用、测试和组合。在堆栈层,安装工作流以通过拉入请求持续交付基础设施更改。
最后但并非最不重要的一点是,建议的体系结构可以扩展到多帐户多云,并集成到复杂的企业流程中,如合规性检查、批准链、基础设施混乱测试或监控等。
👋今天就加入范恩,每周都会在你的收件箱里收到类似的故事!️获取你每周必读的科技故事、新闻和教程。
在推特🐦和facebook👥和instagram📷上关注我们,加入我们的facebook和linkedin群组💬。
如果此帖子对您有帮助,请单击下面的CLAP👏按钮几次,以表示您对作者的支持!⬇