

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

# カスタム ID プロバイダーの問題をトラブルシューティングする
<a name="custom-idp-troubleshooting"></a>

このセクションでは、Transfer Family を使用したカスタム ID プロバイダーに関連する問題の考えられる解決策について説明します。

**Topics**
+ [API Gateway 統合エラーのトラブルシューティング](#api-gateway-errors)
+ [Lambda 関数のタイムアウトのトラブルシューティング](#lambda-timeout-issues)
+ [一貫した Lambda タイムアウト問題のトラブルシューティング](#lambda-timeout-auth)
+ [`KeyError` 例外のトラブルシューティング](#keyerror-logs)

## API Gateway 統合エラーのトラブルシューティング
<a name="api-gateway-errors"></a>

**説明**

ユーザーは Transfer Family サーバーで認証できません。ID プロバイダーをテストすると、次のようなエラーが表示されます。

```
{
    "Response": "",
    "StatusCode": 500,
    "Message": "Internal server error"
}
```

**原因**

API Gateway 統合エラーは、以下が原因で発生する可能性があります。
+ API Gateway の設定が正しくない
+ Lambda 関数エラーが適切に処理されていない
+ API Gateway と Lambda 間のアクセス許可の問題
+ Lambda 関数からの不正な形式のレスポンス

**解決策**

API Gateway 統合エラーをトラブルシューティングするには:

1. 詳細なエラー情報については、Lambda 関数ログを確認してください。
   + CloudWatch コンソールで、**ロググループ** > **/aws/lambda/your-function-name** に移動します。
   + 根本原因を示すエラーメッセージまたはスタックトレースを検索する

1. Lambda 関数が適切にフォーマットされたレスポンスを返すことを確認します。

   ```
   {
       "Role": "arn:aws:iam::123456789012:role/TransferUserRole",
       "HomeDirectory": "/mybucket/home/username"
   }
   ```

1. API Gateway の詳細な CloudWatch ログ記録を有効にします。
   + API Gateway コンソールで API を選択し、**ステージを選択します。**
   + ステージを選択し、**ログ/トレース**で **CloudWatch Logs** を有効にする
   + ログレベルを **ERROR** または **INFO** に設定する

1. API Gateway エンドポイントを直接テストします。

   ```
   curl -X POST https://your-api-id.execute-api.region.amazonaws.com/prod/servers/your-server-id/users/username/config \
       -H "Content-Type: application/json" \
       -d '{"Password": "password"}'
   ```

1. API Gateway と Lambda 間のアクセス許可を確認します。
   + API Gateway に Lambda 関数を呼び出すアクセス許可があることを確認します。
   + Lambda 関数の実行ロールに必要なアクセス許可があることを確認します。

## Lambda 関数のタイムアウトのトラブルシューティング
<a name="lambda-timeout-issues"></a>

**説明**

ユーザーがカスタム ID プロバイダーを使用して Transfer Family サーバーで認証しようとすると、長い遅延が発生し、認証が失敗します。Lambda ログにタイムアウトエラーが表示されます。

**原因**

カスタム ID プロバイダーに使用される Lambda 関数のデフォルトのタイムアウトは 3 秒です。認証ロジックがこのタイムアウトよりも時間がかかる場合 (外部データベースのクエリやサードパーティー ID プロバイダーへの API 呼び出しなど）、関数はタイムアウトし、認証は失敗します。

**解決策**

Lambda タイムアウトの問題を解決するには:

1. Lambda 関数のタイムアウトを長くします。
   + Lambda コンソールで、関数に移動し、**設定**タブを選択します。
   + **全般設定**で、**編集** をクリックします。
   + タイムアウト値を増やす (認証関数には最大 15 秒を推奨)

1. Lambda 関数コードを最適化します。
   + データベースクエリの接続プーリングを使用する
   + 頻繁にアクセスされるデータのキャッシュを実装する
   + 認証中の外部 API コールの最小化

1. Lambda プロビジョニングされた同時実行を使用してコールドスタートを排除することを検討してください。

   ```
   aws lambda put-provisioned-concurrency-config \
       --function-name my-authentication-function \
       --qualifier prod \
       --provisioned-concurrent-executions 5
   ```

1. CloudWatch メトリクスを使用して Lambda パフォーマンスをモニタリングし、期間しきい値のアラームを設定する

## 一貫した Lambda タイムアウト問題のトラブルシューティング
<a name="lambda-timeout-auth"></a>

**説明**

認証に Lambda 関数を使用すると、ユーザーは一貫したタイムアウトが発生します。

**原因**

Lambda は、認証に使用される対応する AWS サービス (DynamoDB、Secrets Manager、またはその他の ID プロバイダーなど) に到達できません。

**解決策**

サブネットが AWS サービスに到達できることを確認します。または、インターネット ID プロバイダー (Okta など) に接続する場合は、Lambda 関数のサブネットが NAT ゲートウェイ経由でインターネットにアクセスできることを確認します。

## `KeyError` 例外のトラブルシューティング
<a name="keyerror-logs"></a>

**説明**

Transfer Family ログエントリに、KeyError」例外があります。

**原因**

最も可能性の高い原因は、ユーザーまたは`identity_provider`レコードの形式が正しくないか、必須フィールドが欠落していることです。

**解決策**

`ERRORS` ロググループにある`/aws/transfer/your-server-id`ログで手がかりを確認します。