

AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization Service (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、[AWS 「 Mainframe Modernization の可用性の変更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)」を参照してください。

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

# メインフレームランタイムの AWS 変換のレート制限を設定する
<a name="ba-runtime-rate-limiting"></a>

AWS メインフレームランタイムの変換には、過剰なリクエストや潜在的な不正使用から gapwalk アプリケーションを保護するためのレート制限機能が組み込まれています。レート制限システムは、トークンバケットアルゴリズムを使用して、バースト容量と持続的なレート制限の両方を提供します。

**Topics**
+ [レート制限の概要](#ba-runtime-rate-limiting-overview)
+ [設定プロパティ](#ba-runtime-rate-limiting-config)
+ [レート制限を有効にする](#ba-runtime-rate-limiting-enable)
+ [クライアント識別](#ba-runtime-rate-limiting-client-id)
+ [レート制限ヘッダー](#ba-runtime-rate-limiting-headers)
+ [メモリ管理](#ba-runtime-rate-limiting-memory)

## レート制限の概要
<a name="ba-runtime-rate-limiting-overview"></a>

レート制限システムには以下の機能があります。

**トークンバケットアルゴリズム**  
+ 設定されたバースト容量までのバーストトラフィックを許可する
+ 1 分あたりのリクエスト数に基づいてトークンを一定の割合で補充します
+ 正当なトラフィックスパイクをブロックすることなく、スムーズなレート制限を提供

**クライアント ID**  
+ プロキシサポートを使用して IP アドレスでクライアントを識別する
+ X-Forwarded-For ヘッダーと X-Real-IP ヘッダーをサポート
+ ロードバランサーとリバースプロキシのシナリオを処理します

**自動メモリ管理**  
+ 期限切れのレート制限バケットを自動的にクリーンアップする
+ 設定可能なクリーンアップ間隔と有効期限
+ 長時間実行されるアプリケーションでのメモリリークの防止

**HTTP 統合**  
+ 制限を超えたときに HTTP 429 (リクエストが多すぎます) を返します
+ レスポンスに標準レート制限ヘッダーを含める
+ クライアントの再試行情報を提供します。

## 設定プロパティ
<a name="ba-runtime-rate-limiting-config"></a>

`application-main.yaml` ファイルでレート制限を設定します。

```
gapwalk:
  ratelimiting:
    enabled: true                                        # Enable/disable rate limiting
    requestsPerMinute: 1000                              # Sustained rate limit per minute
    burstCapacity: 1500                                  # Maximum burst requests allowed
    includeHeaders: true                                 # Include X-RateLimit-* headers
    cleanupIntervalMinutes: 5                            # Cleanup interval for expired buckets
    bucketExpiryHours: 1                                 # Hours after which unused buckets expire
    errorMessage: "Too many requests. Try again later."  # Custom error message
    whitelistIps: ""                                     # Comma-separated IPs to bypass limiting
    perEndpointLimiting: false                           # Apply limits per endpoint (not implemented)
```

### プロパティの説明
<a name="ba-runtime-rate-limiting-config-properties"></a>

**有効**  
レート制限機能を有効または無効にするマスタースイッチ。デフォルト: `false`

**requestsPerMinute**  
持続的なレート制限に対して 1 分あたりに許可されるリクエストの数。これはトークンリフィルレートを表します。デフォルト: `1000`

**burstCapacity**  
レート制限が適用される前にバーストで許可されるリクエストの最大数。トラフィックの急増を許可する`requestsPerMinute`には、 よりも高くする必要があります。デフォルト: `1500`

**includeHeaders**  
HTTP レスポンスに標準レート制限ヘッダー (`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`) を含めるかどうか。デフォルト: `true`

**cleanupIntervalMinutes**  
期限切れレート制限バケットの自動クリーンアップの分単位の間隔。メモリリークの防止に役立ちます。デフォルト: `5`

**bucketExpiryHours**  
未使用のレート制限バケットが期限切れと見なされ、クリーンアップの対象となる時間。デフォルト: `1`

**errorMessage**  
レート制限を超えたときに JSON レスポンスで返されるカスタムエラーメッセージ。デフォルト: `"Too many requests. Try again later."`

**whitelistIps**  
レート制限を完全にバイパスする IP アドレスのカンマ区切りリスト。ヘルスチェックや信頼できるシステムに役立ちます。デフォルト: `empty`

**perEndpointLimiting**  
クライアントのみではなくエンドポイントごとに個別のレート制限を適用するかどうか。現在実装されていません。デフォルト: `false`

## レート制限を有効にする
<a name="ba-runtime-rate-limiting-enable"></a>

デフォルト設定でレート制限を有効にするには:

```
gapwalk:
  ratelimiting:
    enabled: true
```

## クライアント識別
<a name="ba-runtime-rate-limiting-client-id"></a>

レート制限システムは、次の優先順位を使用してクライアントを識別します。

1. **X-Forwarded-For ヘッダー** (カンマ区切りの場合は最初の IP)

1. **X-Real-IP ヘッダー**

1. HTTP リクエストからの**リモートアドレス** 

これにより、アプリケーションの背後にある場合の適切なクライアント識別が保証されます。
+ ロードバランサー
+ リバースプロキシ
+ CDNs
+ API ゲートウェイ

### クライアント ID の例
<a name="ba-runtime-rate-limiting-client-id-example"></a>

```
# Direct connection
Client IP: 192.168.1.100

# Behind load balancer with X-Forwarded-For
X-Forwarded-For: 203.0.113.45, 192.168.1.100
Client IP: 203.0.113.45 (first IP used)

# Behind reverse proxy with X-Real-IP
X-Real-IP: 203.0.113.45
Client IP: 203.0.113.45
```

## レート制限ヘッダー
<a name="ba-runtime-rate-limiting-headers"></a>

`includeHeaders` を有効にすると、次のヘッダーが HTTP レスポンスに追加されます。

**X-RateLimit-Limit**  
クライアントのレート制限の上限 (1 分あたりのリクエスト数)

**X-RateLimit-Remaining**  
現在のレート制限ウィンドウに残っているリクエストの数

**X-RateLimit-Reset**  
レート制限ウィンドウがリセットされる時刻 (Unix タイムスタンプ)

### レスポンスヘッダーの例
<a name="ba-runtime-rate-limiting-headers-example"></a>

```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1640995200
```

### レート制限がレスポンスを超えました
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

レート制限を超えると、システムは以下を返します。

**HTTP ステータス**  
429 Too Many Requests

**Content-Type**  
application/json

**再試行後**  
再試行するまでの待機秒数

```
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60,
  "timestamp": 1640995140000
}
```

## メモリ管理
<a name="ba-runtime-rate-limiting-memory"></a>

レート制限システムは、長時間実行されるアプリケーションのリークを防ぐためにメモリを自動的に管理します。

**自動クリーンアップ**  
+ `cleanupIntervalMinutes` 分ごとに実行
+ `bucketExpiryHours` 時間未使用のバケットを削除します
+ モニタリングのクリーンアップアクティビティを記録します。

**メモリ効率**  
+ スレッドの安全性のために同時データ構造を使用する
+ 遅延バケットの作成 (必要な場合のみ)
+ 効率的なトークンバケットの実装

### クリーンアップアクティビティのモニタリング
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

クリーンアップメッセージのログを確認します。

```
INFO  RateLimitingService - Cleaned up 15 expired rate limiting buckets
```