

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 機能との互換性を確保します。
+ 複雑なデプロイとシンプルなユースケースについては、[https://github.com/aws-ia/terraform-aws-transfer-family](https://github.com/aws-ia/terraform-aws-transfer-family) の GitHub で利用可能な公式の Transfer Family Terraform モジュールの使用を検討してください。これらのモジュールは、シンプルで複雑なお客様のユースケースをカバーする広範な例を提供し、 AWS ベストプラクティスに従い、Infrastructure as Code (IaC) 設定のサポートを必要とするお客様のデプロイを簡素化できます。

## Terraform 状態管理問題のトラブルシューティング
<a name="terraform-state-issues"></a>

**説明**

Transfer Family リソースを Terraform の外部 (コンソールまたは 経由 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. ロック付きのリモートステートストレージを使用して、チームでの作業時の同時変更を防ぐ