自动化基础设施更新
实现工作流,在审查和批准步骤的配合下安全地规划、应用和销毁基础设施变更
自动化基础设施更新 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
为什么要自动化基础设施即代码更新
手动管理基础设施可能速度缓慢且容易出错。基础设施即代码(IaC)通过使用代码定义基础设施来解决这一问题。
借助 GitHub Actions 等工具自动化基础设施即代码更新,可以提高一致性和速度,并减少人为错误。这样可以确保基础设施始终与其定义保持一致。
基础设施即代码工作流生命周期
基础设施即代码自动化遵循清晰的生命周期:计划、应用,有时还包括销毁。每个步骤都可以集成到您的持续集成/持续交付流水线中。
- 计划:查看拟议的更改,但不实际执行。
- 应用:将计划的更改实施到您的基础设施中。
- 销毁:移除基础设施资源(请务必极其谨慎地使用!)。
GitHub Actions 可以帮助您安全地管理这些步骤。
使用 Terraform 规划更改
在进行任何更改之前,了解将会发生什么至关重要。Terraform 的 plan 命令可以帮助您预览基础设施修改。
它会将您期望的状态(来自代码)与基础设施的当前状态进行比较,并显示将添加、更改或销毁哪些资源。
请尝试在一个简单的 Terraform 项目中运行以下命令:
echo "Initializing Terraform..."
terraform init
echo "Running terraform plan..."
terraform plan`terraform plan` 工作流
让我们创建一个 GitHub Actions 工作流,使其在代码推送到主分支时自动运行 terraform plan。这样您可以立即了解拟议更改的结果。
随后可以直接在拉取请求或工作流日志中查看计划命令的输出。
name: 'Terraform Plan'
on:
pull_request:
branches:
- main
jobs:
terraform:
name: 'Terraform Plan'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Plan
id: plan
run: terraform plan -no-color使用环境进行手动批准
自动应用基础设施更改可能存在风险。GitHub 环境提供了一种在工作流中添加手动批准步骤的方式。
您可以定义环境(例如“预发布”和“生产”),并设置相关规则,例如要求特定审核者批准,或在部署作业继续之前等待一段时间。
这会在敏感操作之前增加一道关键的人工审核关卡。
应用更改的工作流
为了安全地应用更改,我们将配置一个面向受保护 GitHub 环境的工作流。作业会暂停,并等待指定团队成员的批准。
只有获得批准后,terraform apply 命令才会执行并更新您的基础设施。
name: 'Terraform Apply'
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy to'
required: true
default: 'staging'
jobs:
terraform:
name: 'Terraform Apply'
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.environment }} # Target environment for approval
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Apply
id: apply
run: terraform apply -auto-approve安全地销毁基础设施
terraform destroy 命令会永久移除 Terraform 配置中定义的所有资源。这是一项功能强大且可能十分危险的操作。
它只能用于特定且受控的场景,例如拆除临时测试环境。继续操作前请务必反复确认!
如果没有严格的人工关卡和多重确认,绝不要自动执行 `destroy`。
echo "Preparing to destroy infrastructure..."
terraform init
terraform plan -destroy
read -p "Are you absolutely sure you want to destroy ALL resources? (yes/no): " CONFIRM
if [ "$CONFIRM" = "yes" ]; then
echo "Destroying infrastructure..."
terraform destroy -auto-approve
else
echo "Destroy operation cancelled."
fi受控的基础设施销毁
即使对于 `destroy`,我们也可以利用 GitHub 环境来增加一层保护。这样可以确保任何人都无法在没有适当授权的情况下,意外或恶意地销毁生产资源。
工作流应要求获得批准,并且只能手动触发,最好限制由特定角色执行。
name: 'Terraform Destroy'
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to destroy'
required: true
default: 'staging'
jobs:
terraform:
name: 'Terraform Destroy'
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.environment }} # Target environment for approval
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Destroy
id: destroy
run: terraform destroy -auto-approve基础设施即代码自动化最佳实践
为了维护可靠且安全的基础设施即代码流水线:
- 代码审核:始终要求对基础设施即代码更改进行代码审核。
- 最小权限:仅向工作流令牌和服务账户授予完成任务所必需的最低权限。
- 状态锁定:确保您的基础设施即代码工具(如 Terraform)使用状态锁定,以防止并发修改。
- 小步、渐进式更改:避免大规模、单体式的基础设施更新。
- 分离环境:使用彼此独立的环境(开发、预发布、生产),并为其设置不同的审批规则。
基础设施即代码工作流检查
您已经了解了如何通过规划、应用和销毁资源来自动化基础设施即代码更新。现在,让我们测试一下您对如何保护这些流程的理解。
回顾:自动化基础设施即代码更新
在本课中,您学习了如何使用 GitHub Actions 自动化基础设施即代码工作流。我们涵盖了以下内容:
- 运行
terraform plan,安全地预览更改。 - 在应用或销毁基础设施之前,使用 GitHub 环境设置手动审批关卡。
- 实施用于受控执行
terraform apply和terraform destroy操作的工作流。 - 安全、可靠的基础设施即代码自动化最佳实践。
自动化基础设施即代码可以帮助您高效且放心地管理云资源!
常见问题解答
「自动化基础设施更新」课时是免费的吗?
是的 — 「自动化基础设施更新」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「自动化基础设施更新」这节课中我会学到什么?
实现工作流,在审查和批准步骤的配合下安全地规划、应用和销毁基础设施变更 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「自动化基础设施更新」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。