ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Terralith 到 Terragrunt 迁移实战:Overview 导读与零基础环境准备

Terralith 到 Terragrunt 迁移实战:Overview 导读与零基础环境准备 Terralith 到 Terragrunt 迁移实战Overview 导读与零基础环境准备【免费下载链接】terragruntTerragrunt is a flexible orchestration tool that allows Infrastructure as Code written in OpenTofu/Terraform to scale.项目地址: https://gitcode.com/GitHub_Trending/te/terragrunt本指南是 Terragrunt 官方文档《Terralith to Terragrunt》系列导读Overview的深度展开面向平台工程师与 IaC 开发者先快速认识“Terralith巨型单体 IaC 配置”这一典型痛点再完整走一遍示例应用的架构、前置依赖与环境搭建为后续逐步重构出可规模化、可编排的 Terragrunt 配置打下地基。读完本篇你将掌握示例项目AWS 无服务器猫图投票站的架构组成、本地开发环境mise 管理 Terragrunt/OpenTofu/AWS CLI/NodeJS的搭建方法以及整条学习路径的宏观路线图并了解如何在仓库中对照每个阶段的完整代码。本系列要解决什么问题从“Terralith”到可扩展的 IaC“Terralith”是 Terraform 与 Monolith 的合成词也被称为“Megamodule”或“All In One State”描述的是这样一种典型场景一个规模庞大、结构复杂的基础设施资产被塞进单一的一个 state 文件里统一管理。想一想平台工程师的日常曾经tofu apply几乎瞬间完成、每次都确信能只更新自己关心的那部分基础设施而现在一次 apply 要拖上几分钟你必须在海量的 plan 输出中反复甄别——某次只想给资源打个标签却要确认这不会顺带毁掉生产环境。你还会看到无关的时间戳变更、同事在 AWS 控制台绕过 IaC 带外修改产生的漂移……于是你甚至会觉得“绕开 IaC 直接在控制台改更快更安全”而这恰恰让问题雪上加霜。这就是 Terralith 给团队带来的日常。这套指南的核心目的就是一步步演示一个项目如何自然而然地长成 Terralith以及如何用 Terragrunt 把自己从里面解放出来。沿途你会学到如何高效、安全地组织你的 IaC状态state操纵的原则以及 OpenTofu/Terraform 底层如何存储状态编写可扩展、可靠的 Terragrunt 配置的现代最佳实践。整个系列将带你完成以下旅程搭建本地 IaC 开发环境构建一个有趣的玩具项目并在真实 AWS 账户中完成部署不断扩展该项目直到你亲身体会到 Terralith 架构模式带来的影响拆解这个 Terralith换来可扩展性与可靠性引入 Terragrunt 来提升 IaC 的编排能力进一步利用 Terragrunt 改进 IaC 的开发者体验DevEx。示例项目一个 AWS 无服务器“猫图投票”应用为了直观演示“从 Terralith 到可扩展 Terragrunt”的旅程本系列会在早期就构建并部署一个完整、真实的应用然后用剩余篇幅持续重构管理该应用基础设施的 IaC。示例应用的架构是一个部署在 AWS 上的简单无服务器 Web 应用由三个核心组件构成Lambda 支撑的网站Lambda-backed websiteS3 存储桶用于存放静态资源猫图片DynamoDB 表用于存储这些资源的元数据每只猫的得票数。这个应用允许用户浏览并为自己最喜欢的 AI 生成猫图片投票。之所以刻意选择这些 AWS 无服务器服务是因为它们成本低廉对于使用新 AWS 账户跟着教程操作的人来说几乎免费、甚至完全免费。从仓库中可以看到该应用的真实产物应用本体位于 docs/src/fixtures/terralith-to-terragrunt/app/best-cat包含index.js、package.json、template.html、styles.css、script.js等文件部署到 AWS 后期望的最终效果如下图后续系列Step 1会用 OpenTofu 一次性把所有基础设施写进同一个 root module 里得到下图这种“还没有上传猫图、提示需要上传”的初始状态说明这套指南对 Terragrunt、OpenTofu、AWS、NodeJS 都不假设太多前置技能会边做边教但要求你熟悉终端并拥有类 Unix 环境Linux/macOS 或 Windows 上的 WSL。应用本身的 NodeJS 实现细节会被有意略过以聚焦 IaC 相关技术点。若中途卡住可对照仓库中每个阶段对应的完整代码docs/src/fixtures/terralith-to-terragrunt/walkthrough。你需要的准备AWS 账户与本地工具链要部署本系列构建的应用你需要一个AWS 账户以及在该账户内预置资源的权限。如果没有可以按照 AWS 官方免费注册指引自行注册。在管理开发依赖方面本系列使用mise一个帮助管理项目级运行时与工具版本的工具。你可以手动安装所需工具但使用mise或其他工具管理器在处理 IaC 时是强烈推荐的——可复现性是关键它决定了你能否与同事包括未来的你自己在共享基础设施上高效协作。如果你愿意用mise管理开发依赖可按官方 Mise 安装指南完成安装。如果想手动安装本系列所需的全部依赖对应清单如下安装入口以各工具官方文档为准此处仅列工具TerragruntOpenTofuNodeJSAWS CLI用 mise 一键搭建可复现的开发环境使用mise时只需几条命令即可下载、安装并锁定项目所需工具的版本mise use terragrunt0.95.0 mise use opentofu1.11.1 mise use aws2.27.63 mise use node22.17.1执行后本地会生成一个mise.toml把所有工具版本固定下来。仓库中随教程提供的示例 docs/src/fixtures/terralith-to-terragrunt/mise.toml 内容如下[tools] aws 2.27.63 node 22.17.1 opentofu 1.10.3 terragrunt 0.83.2可以看到通过版本钉死任何协作者以及 CI都能在完全一致的工具链下操作基础设施这正是 IaC 可复现性的根基。初始化仓库与应用从空目录到可打包的 Lambda 应用环境就绪后先创建 Git 仓库存放“live 基础设施”的 IaCmkdir terralith-to-terragrunt cd terralith-to-terragrunt git init接着创建应用目录结构并放入应用文件mkdir -p app/best-cat cd app/best-cat把应用文件复制进app/best-cat文件清单与内容可对照 docs/src/fixtures/terralith-to-terragrunt/app/best-cat 下的package.json、index.js、template.html、styles.css、script.js、package-lock.json。最终app/best-cat目录结构应为app best-cat index.js package-lock.json package.json script.js styles.css template.html然后打包应用以便交付给 Lambda 函数mkdir dist cd app/best-cat npm i npm run package建议在dist目录中加一个.gitignore避免误提交该目录下的其他内容# dist/.gitignore * !.gitignore生成静态资源猫图为了让项目更有趣还需要一些静态资源。系列作者用 Gemini 生成了一批猫图你也可以用图库照片或其他方式生成。建议把图片放到与作者相同的位置dist/static这样后续配套脚本无需修改即可直接工作。完成以上步骤后dist目录大致长这样dist best-cat.zip static 01-cat.png 02-cat.png 03-cat.png 04-cat.png 05-cat.png 06-cat.png 07-cat.png 08-cat.png 09-cat.png 10-cat.png系列路线图速览你将经历的 8 个步骤拿到“Overview Setup”的基础之后整个系列将按以下节奏推进每一步的完整代码都存放在 docs/src/fixtures/terralith-to-terragrunt/walkthrough 对应的step-N目录中Step 1Starting the Terralith—— 用 OpenTofu 把 S3、DynamoDB、IAM、Lambda 全部写进单一 root module构建出“单体”配置的起点对应 walkthrough/step-1-starting-the-terralith。Step 2Refactoring—— 把扁平配置重构为catalog/modules下的可复用模块s3、lambda、iam、ddb并用moved块在不重建基础设施的前提下完成状态迁移对应 walkthrough/step-2-refactoring。Step 3Adding dev—— 将整体基础设施再封装为一个高阶best_cat模块并实例化出第二个dev环境此时所有环境共享同一个 state 文件风险开始显现对应 walkthrough/step-3-adding-dev。Step 4Breaking the Terralith—— 按环境拆分为独立的 root module限制变更爆炸半径对应 walkthrough/step-4-breaking-the-terralith。Step 5Adding Terragrunt—— 引入terragrunt.hcl编排 IaC对应 walkthrough/step-5-adding-terragrunt。Step 6Breaking the Terralith further—— 继续把每个环境内的组件按单位unit拆分对应 walkthrough/step-6-breaking-the-terralith-further。Step 7Taking advantage of Terragrunt Stacks—— 使用terragrunt.stack.hcl声明式描述环境与单元对应 walkthrough/step-7-taking-advantage-of-terragrunt-stacks。Step 8Refactoring state with Terragrunt Stacks—— 用 Stacks 继续重构状态管理对应 walkthrough/step-8-refactoring-state-with-terragrunt-stacks。提示本系列中代码块的内容永远展示完整文件或完整命令——文件可以直接复制到代码块顶部标注的文件名中命令则直接在终端执行。若命令以$开头表示该代码块旨在演示预期输出不需要你复制粘贴执行。小结与下一步通过本篇导读你已经明确了 Terralith 问题的本质单一 state 文件承载过重的基础设施变更风险掌握了示例应用的三件套架构Lambda S3 DynamoDB并完成了本地开发环境的可复现搭建mise 钉死 Terragrunt/OpenTofu/AWS CLI/NodeJS 版本与应用打包、资源生成。接下来请进入系列的 Setup 收尾与 Step 1用 OpenTofu 亲手把这套应用部署到你的 AWS 账户亲眼见证一个“Terralith”是如何诞生的——再跟随后续步骤一路拆解、编排最终掌握 Terragrunt 驱动的可扩展 IaC 实践。【免费下载链接】terragruntTerragrunt is a flexible orchestration tool that allows Infrastructure as Code written in OpenTofu/Terraform to scale.项目地址: https://gitcode.com/GitHub_Trending/te/terragrunt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表