---
url: /courses/cloud-platform-build-management/lab-13/index.md
---
# 实训 13：Terraform 计划评审与 OSS 设计

在 WSL 或教师批准的隔离 Linux 目录运行；只执行 `init`、`fmt`、`validate`、`plan` 和只读检查，不执行 `apply`。

## 一、实训目标

* 读懂最小 HCL 配置；
* 真实生成并评审 Terraform plan；
* 检查 state、plan 和密钥文件的排除规则；
* 完成一个私有 OSS Bucket 设计。

## 二、环境与安全边界

* Terraform CLI 1.4 或以上；课堂验证版本为 1.15.8。
* 不需要阿里云 Provider、AccessKey 或控制台权限。
* 不把真实密钥写入 `.tf`、`.tfvars`、`.env` 或命令历史。
* 不执行 `terraform apply`、`destroy`、`state push` 或 `import`。
* 不创建 Bucket、ECS、云盘或其他付费资源。

## 三、准备与初始化

```bash
[WSL] cd ~/cloud-course/lab-13
```

用途：进入本课目录。预期 `pwd` 末尾为 `/cloud-course/lab-13`。

```bash
[WSL] terraform version
```

用途：确认 CLI 版本。若命令不存在，按教师或 HashiCorp 官方安装说明处理。

```bash
[WSL] terraform init -backend=false -input=false
```

用途：初始化本课工作目录，不配置远程 backend，也不等待交互输入。预期提示初始化成功。

截图 1：版本、内置 Provider 和初始化结果。

## 四、格式与配置校验

```bash
[WSL] terraform fmt
```

用途：按标准样式格式化配置。有修改时输出文件名。

```bash
[WSL] terraform fmt -check -diff
```

用途：只检查不写入。预期退出码为 0。

```bash
[WSL] terraform validate
```

用途：检查 HCL 语法和内部一致性。预期显示配置有效；该结果不代表云端资源可创建。

截图 2：fmt 与 validate 结果。

## 五、生成与评审 plan

```bash
[WSL] terraform plan -input=false -lock=false -out=course.tfplan -var-file=terraform.tfvars.example
```

用途：生成本课内置教学对象的保存计划。预期摘要为 `1 to add, 0 to change, 0 to destroy`。

```bash
[WSL] terraform show -no-color course.tfplan
```

用途：再次查看计划，确认地址为 `terraform_data.course_storage_plan`、执行模式为 `plan-only`。

填写 `answers/plan-review.tsv`：

* 资源地址与动作；
* 计划摘要；
* unknown 值；
* 风险和费用；
* state 与凭据处理；
* 批准结论必须为 `plan-only-approved` 或 `rejected`。

截图 3：资源地址、输入和计划摘要。

## 六、检查 state 与敏感文件

```bash
[WSL] git init
```

用途：在本课目录建立本地 Git 元数据，让后续排除规则检查具有仓库上下文。它不会自动提交文件，也不会连接远程仓库。

```bash
[WSL] git check-ignore -v --no-index terraform.tfstate terraform.tfstate.backup course.tfplan secrets.auto.tfvars .env .terraform/
```

用途：确认常见敏感或本地文件命中 `.gitignore`。

```bash
[WSL] find . -maxdepth 1 -name '*.tfstate*' -print
```

用途：确认本课没有生成 state。预期没有输出。

```bash
[WSL] grep -RIE 'access[_-]?key|secret[_-]?key|BEGIN .*PRIVATE KEY' --exclude-dir=.git --exclude='*.tfplan' .
```

用途：在课程源文件中查找常见凭据标记。预期没有输出；这只是辅助检查，不替代人工复核。

截图 4：排除规则、无 state 和凭据辅助检查。

## 七、完成 OSS 设计

填写 `answers/storage-design.tsv`：

* 用途与数据类型；
* 地域选择依据；
* 私有 ACL；
* 存储类型和访问频率；
* 版本、保留和生命周期；
* 加密与最小权限；
* 容量、请求、取回和流量费用；
* 恢复步骤与清理条件。

本课只设计，不打开控制台创建 Bucket。

截图 5：完整 OSS 设计表。

## 八、自动与人工验收

```bash
[WSL] bash verify.sh
```

用途：重新运行格式、初始化、验证和计划，并检查安全边界与答题表。预期最后显示“结构与计划检查通过”。

人工复核：

* `terraform_data` 没有被写成真实 OSS；
* 没有 `destroy`、`replace` 或真实 Provider；
* 未生成 state，保存的 plan 不提交；
* OSS 设计包含私有访问、恢复和费用；
* 没有 AccessKey、账号、地址、订单或余额。

## 九、恢复、清理与提交

本课没有执行 apply，因此没有云端资源需要恢复。清理前先确认路径：

```bash
[WSL] pwd
```

用途：确认只清理 `lab-13`。

```bash
[WSL] find . -maxdepth 2 -type f -print
```

用途：列出待保留与待清理文件。由教师演示删除 `.terraform/` 和 `course.tfplan`，学生不要在未知路径使用递归强制删除。

提交：

```txt
班级_学号_姓名_第13次课_Terraform计划与云存储报告.docx
```

只提交一个 Word 到智慧职教“第13次课”。
