

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 对 Terraform 部署问题进行故障排除
<a name="terraform-deployment-issues"></a>

本节介绍与使用 Terraform 部署 Transfer Family 资源相关的问题的可能解决方案。有关 Transfer Family 的 Terraform 模块的一般信息，请参阅。[Transfer Family terraform 模块](terraform.md)

**Topics**
+ [对 Terraform 资源创建失败进行故障排除](#terraform-resource-creation)
+ [对 Terraform 状态管理问题进行故障排除](#terraform-state-issues)

## 对 Terraform 资源创建失败进行故障排除
<a name="terraform-resource-creation"></a>

**描述**

尝试使用 Terraform 创建 Transfer Family 资源时，你会遇到以下错误：

```
Error: error creating Transfer Server: InvalidRequestException: The request is not valid. 
Error: error creating Transfer User: InvalidRequestException: Unable to create the user because the server endpoint type is incompatible with the home directory type.
```

**原因**

这些错误通常是由于配置参数不兼容或 Terraform 配置中缺少依赖项而发生的。常见原因包括：
+ 端点类型和存储配置不兼容
+ 缺少必需的 IAM 角色或策略
+ 不正确的安全策略规范
+ VPC 终端节点配置问题

**解决方案**

要解决 Terraform 部署问题，请执行以下操作：
+ 确保你的 Terraform 配置使用兼容的参数组合：
  + 对于公共终端节点，请确保使用 Amazon S3 进行存储。
  + 对于 VPC 终端节点，请验证正确的 VPC 和安全组配置。
+ 使用带有`depends_on`属性的显式依赖关系，以确保按正确的顺序创建资源。
+ 确认所有 IAM 角色都具有必要的信任关系和权限。
+ 使用最新版本的 Terraform AWS 提供程序，确保与 Transfer Family 的所有功能兼容。
+ 对于复杂的部署和简单的用例，可以考虑使用上 GitHub 提供的官方 Transfer Family Terraform 模块。[https://github.com/aws-ia/terraform-aws-transfer-family](https://github.com/aws-ia/terraform-aws-transfer-family)这些模块提供了涵盖简单和复杂客户用例的大量示例，遵循 AWS 最佳实践，并且可以为需要基础设施即代码 (IaC) 配置帮助的客户简化部署。

## 对 Terraform 状态管理问题进行故障排除
<a name="terraform-state-issues"></a>

**描述**

在 Terraform 之外对 Transfer Family 资源进行更改后（通过控制台或 AWS CLI），在运行`terraform plan`或时会遇到状态偏差或错误。`terraform apply`

**原因**

Terraform 维护着一个状态文件，用于跟踪其管理的资源。在 Terraform 之外进行更改时，状态文件会与实际资源不同步，从而在后续的 Terraform 操作中导致错误或意外行为。

**解决方案**

要解决使用 Transfer Family 资源的 Terraform 状态管理问题，请执行以下操作：

1. 用于`terraform import`将现有资源置于 Terraform 管理之下：

   ```
   terraform import {{<transfer_family_server.example>}} s-{{<server-id>}}
   terraform import {{<transfer_family_server.example>}} s-{{<server-id>}}/username
   ```

1. `terraform refresh`用于使用当前的真实基础架构更新状态文件

1. 对于无法导入或存在复杂状态问题的资源，可以考虑使用`terraform state rm`将其从状态文件中删除，然后使用 Terraform 重新创建它们

1. 实施一项政策，专门通过 Terraform 管理 Transfer Family 资源，以防止将来的状态漂移

1. 使用带锁定的远程状态存储，以防止在团队合作时同时进行修改