影刀RPA Terraform IaC自动化:基础设施配置管理
作者:林焱
什么情况用什么
运维团队管理着几十台云服务器、几个VPC、一堆安全组规则,每次扩容或改配置都要登录云控制台一个个点——手酸不说还容易点错。用Terraform声明式管理基础设施是正道,但Terraform的状态文件、计划输出、变更审批这些环节还需要人工介入。
影刀RPA在这里的定位是Terraform的"操作员":自动执行Terraform命令、解析plan输出、汇总变更内容、提交审批、确认apply。
适合场景:
- 定期基础设施变更(每两周的常规扩容/缩容)
- 多云环境统一管理(阿里云+AWS资源变更同步)
- 合规审计:定期检查实际资源和Terraform状态是否一致
- 新人Onboarding:自动为新人创建开发环境资源
怎么做
第一步:执行Terraform plan
拼多多店群自动化上架方案
影刀通过调用命令行来触发Terraform。
影刀操作步骤:
1. 【执行命令行】进入Terraform项目目录 cd /data/terraform/production 2. 【执行命令行】运行terraform init(首次或provider变更时需要) terraform init 3. 【执行命令行】生成变更计划 terraform plan -out=tfplan 4. 【读取文件】读取plan的文本输出,存入变量踩过的坑:影刀的【执行命令行】默认工作目录是影刀安装目录,不是你的Terraform项目目录。在执行terraform命令前,必须先cd到正确的目录,或者用完整路径:
cmd /c "cd /d D:\terraform\production && terraform plan"第二步:解析变更摘要
Terraform plan的输出很长,但只需要提取关键变更。
plan_output="""从影刀变量中获取的terraform plan输出"""# 提取变更统计importre add_match=re.search(r'Plan: (\d+) to add',plan_output)change_match=re.search(r'(\d+) to change',plan_output)destroy_match=re.search(r'(\d+) to destroy',plan_output)summary={'新增资源':int(add_match.group(1))ifadd_matchelse0,'修改资源':int(change_match.group(1))ifchange_matchelse0,'删除资源':int(destroy_match.group(1))ifdestroy_matchelse0}# 提取具体变更的资源名resources=re.findall(r'# (.+?) will be',plan_output)警告:如果plan输出中有"destroy"操作,特别是销毁数据库、负载均衡等关键资源,一定要在审批环节高亮标记,人工二次确认。
第三步:生成变更工单
把plan摘要发到审批系统(比如飞书审批或Jira)。
影刀操作步骤:
1. 【打开网页】打开飞书审批后台 2. 【点击】"新建审批" → "基础设施变更" 3. 【填写】标题:"{日期} 基础设施变更计划" 4. 【填写】变更摘要: 新增 {summary['新增资源']} 个资源 修改 {summary['修改资源']} 个资源 删除 {summary['删除资源']} 个资源 5. 【填写】详细变更列表(逐条列出资源名和变更类型) 6. 【上传文件】附加完整terraform plan文本 7. 【点击】"提交审批"第四步:审批通过后自动Apply
设置定时检查,审批通过即执行。
影刀操作步骤:
1. 【打开网页】打开审批系统,查询工单状态 2. 如果状态="已通过": - 【执行命令行】terraform apply tfplan - 【获取输出】记录apply结果 - 【更新工单】状态改为"已执行",附上执行日志 -  3. 如果状态="已驳回": - 【发送消息】通知提交人修改计划关键操作:执行apply后必须验证。跑完terraform apply,接着用terraform show检查资源状态,再用云厂商CLI验证资源是否真的创建成功:
aws ec2 describe-instances --instance-ids {新建的实例ID}有什么坑
TEMU店群如何管理运营?
坑1:State文件锁定冲突
多人同时操作同一个Terraform项目时,state文件可能被锁。影刀执行plan失败不要紧,但一定要检查错误信息。如果错误是"state locked",等5分钟再重试,最多重试3次。
坑2:敏感信息泄露
terraform plan输出中可能包含数据库密码、API密钥等敏感信息。在提交审批工单前,用正则把密码字段替换为***:
plan_output=re.sub(r'(password|secret|token)\s*=\s*"[^"]*"',r'\1 = "***"',plan_output)坑3:Apply失败回滚不完整
Terraform apply中途失败,可能已经创建了部分资源但state没更新。必须加一个失败处理:
ifapply_failed:# 尝试回滚subprocess.run(['terraform','destroy','-auto-approve'])# 但注意:这会把所有资源都删了,不是精确回滚更好的做法是小步快跑:每次变更控制在3-5个资源以内,失败了影响范围小。
坑4:多云provider密钥轮换
阿里云的AccessKey可能90天轮换一次。Terraform配置文件里的密钥过期后,所有操作都失败。建议影刀每周自动检查密钥有效期,提前7天发提醒。
总结:用影刀操控Terraform的核心原则是"小步提交+审批卡点"——每次变更不要太大,变更前必须有人审批,执行后必须做验证。