AWS SWF で長時間実行されているタスクを強制終了/再起動する方法はありますか? 一部のタスクが長時間実行される場合があり、特定のタスクを (UI 経由またはプログラムによって) 手動で強制終了し、可能であればタスクを再起動したい場合があります。これを達成する方法は?
2 に答える
コンソールは、ワークフローを手動で強制終了するオプションです。
ワークフローの実行時間全体または個々のアクティビティにタイムアウトを設定することもできます。これは、アクティビティを登録するとき、またはアクティビティを開始するときに設定できます(defaultTaskStartToCloseTimeoutSecond)。
使用している言語が明確ではありません。
Javaを使用している場合は、 FlowFrameworkの指数バックオフを調べる必要があります。これにより、SDKは、失敗した場合にアクティビティを再開します。
長時間実行されるアクティビティは、RecordActivityTaskHeartbeatを使用してハートビートすることが期待されます。アクティビティ プロセスがハングまたはクラッシュした場合、長いタスク実行タイムアウトではなく、短いハートビート間隔の後にタイムアウト エラーが発生します。
ワークフロー コード (ディサイダー) は、RequestCancelActivityTask決定を通じて、いつでもアクティビティのキャンセルを要求できます。取り消し要求は、RecordActivityTaskHeartbeat呼び出しの出力として返されます。アクティビティの実装は、それ自体をキャンセルし、RespondActivityTaskCanceled API 呼び出しを使用してサービスに報告する必要があります。
アクティビティをキャンセルする AWS Flow Framework の方法については、AWS Flow Framework 開発者ガイドのエラー処理セクションを参照してください。
アクティビティの実装では、ハートビートとセルフ キャンセルをサポートできない場合があります。解決策は、最初のアクティビティの実行を終了する別のkillアクティビティを実行することです。たとえば、Unix では、このような kill アクティビティは、最初のアクティビティを実装するプロセスに対して「kill -9」コマンドを発行する可能性があります。