

# AWS Glue ストリーミングのメンテナンスウィンドウ
<a name="glue-streaming-maintenance"></a>

AWS Glue は定期的にメンテナンスアクティビティを実行します。AWS Glue は、これらのメンテナンスウィンドウ中にストリーミングジョブを再起動する必要があります。メンテナンスウィンドウを指定することで、ジョブを再起動するタイミングを制御できます。このセクションでは、メンテナンスウィンドウを設定する場所と、考慮すべき特定の動作について説明します。

**Topics**
+ [メンテナンスウィンドウの設定](#glue-streaming-maintenance-setup)
+ [メンテナンスウィンドウの動作](#glue-streaming-maintenance-behavior)
+ [ジョブのモニタリング](#glue-streaming-maintenance-job-monitoring)
+ [データ損失処理](#glue-streaming-maintenance-data-loss-handling)

## メンテナンスウィンドウの設定
<a name="glue-streaming-maintenance-setup"></a>

AWS Glue Studio または API を使用してメンテナンスウィンドウを設定できます。

### AWS Glue Studio でのメンテナンスウィンドウの設定
<a name="glue-streaming-maintenance-setup-studio"></a>

メンテナンスウィンドウは、AWS Glue ストリーミングジョブの **[ジョブ詳細]** ページで指定できます。GMT で日時を指定できます。AWS Glue は指定された時間枠内にジョブを再起動します。

![AWS Glue Studio でのメンテナンスウィンドウの指定](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-maintenance-windows-1.png)


### API でのメンテナンスウィンドウの設定
<a name="glue-streaming-maintenance-setup-api"></a>

または、Create Job API でメンテナンスウィンドウを設定することもできます。API を使用してメンテナンスウィンドウを設定する例を次に示します。

```
aws glue create-job —name jobName —role roleArnForTheJob —command Name=gluestreaming,ScriptLocation=s3-path-to-the-script --maintenance-window="Sun:10"
```

以下にコマンドの例を示します。

```
aws glue create-job —name testMaintenance —role arn:aws:iam::012345678901:role/Glue_DefaultRole —command Name=gluestreaming,ScriptLocation=s3://glue-example-test/example.py —maintenance-window="Sun:10
```

## メンテナンスウィンドウの動作
<a name="glue-streaming-maintenance-behavior"></a>

AWS Glue は、ジョブを再起動するタイミングを決定するために一連のステップを実行します。

1. 新しいストリーミングジョブが開始されると、AWS Glue はまず、ジョブの実行に関連付けられたタイムアウトがあるかどうかを確認します。タイムアウトを使用すると、ジョブの終了時間を設定できます。タイムアウトが 7 日未満の場合、ジョブは再起動されません。

1. タイムアウトが 7 日を超える場合、AWS Glue はメンテナンスウィンドウがジョブに設定されているかどうかを確認します。その場合、そのウィンドウがピックアップされ、そのウィンドウがジョブ実行に割り当てられます。AWS Glue は、指定されたメンテナンスウィンドウから 3 時間以内にジョブを再起動します。たとえば、月曜日の午前 10 時 (GMT) にメンテナンスウィンドウを設定すると、ジョブは午前 10 時 (GMT) から午後 1 時 (GMT) までの間に再起動されます。

1. メンテナンスウィンドウが設定されていない場合、AWS Glue は再起動時間をジョブ実行開始時刻の 7 日前に自動的に設定します。例えば、ジョブを 7/1/2024 午前 12 時に開始し、メンテナンスウィンドウを指定しなかった場合、ジョブは 7/8/2024 午前 12 時に再起動するように設定されます。
**注記**  
ストリーミングジョブを既に実行している場合、この変更は 2024 年 7 月 1 日以降に影響します。メンテナンスウィンドウを設定する時間は 6 月 30 日までです。7 月 1 日以降、開始したストリーミングジョブは、このドキュメントに従って再起動されます。追加のサポートが必要な場合は、AWS サポートにお問い合わせください。

1. 特に進行中のマイクロバッチが処理されない場合、AWS Glue はジョブを再起動できないことがあります。このような場合、ジョブは中断されません。このような場合、AWS Glue は 14 日後にジョブを再起動します。この場合、メンテナンスウィンドウは受け入れられません。

## ジョブのモニタリング
<a name="glue-streaming-maintenance-job-monitoring"></a>

AWS Glue Studio の **[モニタリング]** ページでジョブをモニタリングできます。

ストリーミングジョブの次回の再起動予定時間を確認するには、**[モニタリング]** ページのジョブ実行テーブルに 列を表示します。

1. テーブルの右上にある歯車アイコンをクリックします。  
![AWS Glue Studio でのメンテナンスウィンドウの指定](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-maintenance-windows-2.png)

1. 下にスクロールして、**[予想される再起動時間]** の列をオンにします。UTC とローカル時間の両方のオプションを使用できます。  
![AWS Glue Studio でのメンテナンスウィンドウの指定](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-maintenance-windows-3.png)

1. その後、テーブル内の列を表示できます。  
![AWS Glue Studio でのメンテナンスウィンドウの指定](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-maintenance-windows-4.png)

元のジョブには「EXPIRED」ステータスがあり、新しいジョブインスタンスには「RUNNING」ステータスがあります。再起動された新しいジョブ実行には、最初のジョブ実行 ID と再起動数を表すプレフィックス「restart\_」の連結としてジョブ実行 ID が付けられます。例えば、最初のジョブ実行 ID が `jr_1234` の場合、再起動されたジョブ実行には、最初の再起動の ID `jr1234_restart_1` が含まれます。2 回目の再起動は 2 回目の再起動などの `jr1234_restart_2` になります。

再起動により、再試行に影響はありません。自動再試行が原因で実行が失敗し、新しい実行が開始された場合、再起動のカウンターは 1 から再び開始されます。例えば、`jr_1234_attempt_3_restart_5` で実行が失敗した場合、自動再試行は ID:`jr_id1_attempt_4` で新しい実行を開始し、この試行が 7 日後に再開されると、新しい実行 ID は `jr_id1_attempt_4_restart_1` になります。

## データ損失処理
<a name="glue-streaming-maintenance-data-loss-handling"></a>

メンテナンスの再起動中、AWS Glue ストリーミングは、前のジョブ実行と再起動されたジョブ実行の間のデータの整合性と一貫性を確保するプロセスに従います。AWS Glue は、ジョブの再起動間のデータの整合性と一貫性を保証するものではありません。ストリーミングジョブ内で重複したデータを処理するには、アーキテクチャに関する考慮事項をお勧めします。

1. メンテナンスの再起動条件の検出: AWS Glue ストリーミングは、7 日後にメンテナンスウィンドウに達した場合や 14 日後にハード再起動が必要な場合など、メンテナンスの再起動をトリガーすべきタイミングを示す条件をモニタリングします。

1. 正常な終了の呼び出し: メンテナンスの再起動条件が満たされると、AWS Glue ストリーミングは現在実行中のジョブの正常な終了プロセスを開始します。このプロセスには、以下のステップが含まれます。

   1. 新しいデータの取り込みの停止: ストリーミングジョブは、入力ソース (Kafka トピック、Kinesis ストリーム、ファイルなど) からの新しいデータの消費を停止します。

   1. 保留中のデータの処理: ジョブは、内部バッファまたはキューに既に存在するデータを引き続き処理します。

   1. オフセットとチェックポイントのコミット: ジョブは、最新のオフセットまたはチェックポイントを外部システム (Kafka、Kinesis、Amazon S3 など) にコミットし、再起動されたジョブが前のジョブが中断した場所から取得できるようにします。

1. ジョブの再起動: 正常な終了プロセスが完了すると、AWS Glue ストリーミングは保持された状態とチェックポイントを使用してジョブを再起動します。再起動されたジョブは、最後にコミットされたオフセットまたはチェックポイントから処理をピックアップし、データが失われたり重複したりしないようにします。

1. データ処理の再開: 再起動されたジョブは、前のジョブが中断された時点からデータ処理を再開します。最後にコミットされたオフセットまたはチェックポイントから、入力ソースから新しいデータを取り込み続け、定義された ETL ロジックに従ってデータを処理します。