如何通过Terraform一次性执行多子目录的plan/apply操作?
批量执行Terraform子目录的plan/apply操作
Terraform本身没有原生的批量处理子目录的命令选项,不过可以通过shell循环快速实现需求,以下是两种常用方法:
方法一:指定目录循环(适合明确知道子目录名的场景)
直接在父目录下执行以下命令,就能依次对cand1、cand2、cand3三个子目录执行plan或apply:
批量执行plan
for dir in cand1 cand2 cand3; do echo "=== 开始处理目录: $dir ===" cd "$dir" && terraform plan && cd .. done
批量执行apply
如果不需要手动确认,可添加-auto-approve参数(注意:生产环境请谨慎使用,避免误操作):
for dir in cand1 cand2 cand3; do echo "=== 开始处理目录: $dir ===" cd "$dir" && terraform apply -auto-approve && cd .. done
方法二:匹配所有含main.tf的子目录(适合目录较多或命名有规律的场景)
如果子目录命名有规律(比如都以cand开头),可以用find命令自动匹配:
# 批量plan find . -maxdepth 1 -type d -name "cand*" -exec sh -c 'cd "$0" && echo "=== 处理目录: $0 ===" && terraform plan' {} \; # 批量apply find . -maxdepth 1 -type d -name "cand*" -exec sh -c 'cd "$0" && echo "=== 处理目录: $0 ===" && terraform apply -auto-approve' {} \;
额外提示
- 首次执行前,每个子目录需要先完成初始化,可以在循环里加入
terraform init步骤,比如把terraform plan换成terraform init && terraform plan - 如果需要传递变量,直接在
terraform plan/apply后面追加-var "key=value"或-var-file="vars.tfvars"参数即可
内容的提问来源于stack exchange,提问作者건양대배경석 7655
相关产品推荐
相关产品推荐

