ジョブステータスと完了レポートの追跡 - Amazon Simple Storage Service

ジョブステータスと完了レポートの追跡

S3 バッチオペレーションを使用すると、ジョブステータスの表示と更新、通知とログの追加、ジョブの失敗の追跡、完了レポートの生成を行うことができます。

ジョブステータス

ジョブの作成および実行後、ジョブは一連のステータスを進行します。ステータスとその間のあり得る移行を次の表に示します。

ステータス 説明 Transitions
New ジョブを作成すると、ジョブは New ステータスから始まります。 Amazon S3 がマニフェストオブジェクトの処理を開始すると、ジョブは自動的に Preparing ステータスになります。
Preparing Amazon S3 はマニフェストオブジェクトと他のジョブパラメータを処理してセットアップし、ジョブを実行します。 Amazon S3 がマニフェストと他のパラメータの処理を終了すると、ジョブは自動的に Ready ステータスになります。マニフェストに一覧表示されているオブジェクトにおいて指定されたオペレーションの実行を開始する準備が整いました。

ジョブで実行前に確認が必要な場合は (Amazon S3 コンソールを使用してジョブを作成した場合など)、ジョブは Preparing から Suspended に移行します。ジョブを実行することが確認されるまで、Suspended 状態のままになります。

Suspended ジョブには確認が必要ですが、ジョブを実行したいことをまだ確認していません。Amazon S3 コンソールを使用して作成したジョブのみ確認が必要になります。コンソールを使用して作成したジョブは、Preparing 後にすぐ Suspended 状態になります。ジョブを実行したいことを確認すると、このジョブは Ready になり、Suspended 状態に戻ることはありません。 ジョブを実行したいことを確認すると、そのステータスは Ready に変更します。
Ready Amazon S3 はリクエストしたオブジェクトオペレーションの実行を開始する準備ができました。 Amazon S3 がジョブを開始すると、ジョブは自動的に Active ステータスになります。ジョブが Ready 状態のままになる期間は、優先度の高いジョブをすでに実行中であるかどうか、またそのジョブが完了するまでの時間に応じます。
Active Amazon S3 はマニフェストで一覧表示されているオブジェクトでリクエストされたオペレーションを実行しています。ジョブが Active の間、Amazon S3 コンソール、あるいは REST API、AWS CLI、または AWS SDK の DescribeJob オペレーションを使用してその進捗状況を監視できます。 ジョブがオブジェクトでオペレーションを実行しなくなると、ジョブは Active 状態ではなくなります。ジョブが成功して完了したか失敗した場合などに、これが自動的に起こります。あるいは、ジョブのキャンセルなどのユーザーアクションの結果としても生じます。ジョブが移行する状態は、移行の理由によって異なります。
Pausing ジョブは別の状態から Paused に移行しています。 Pausing ステージが完了すると、ジョブは自動的に Paused になります。
Paused ジョブを現在実行中に優先度の高い別のジョブを送信すると、ジョブは Paused になります。 ジョブの実行が完了、失敗、あるいは停止になることを阻止している優先度の高いジョブの後、Paused ジョブは自動的に Active に戻ります。
Complete ジョブは、マニフェストのすべてのオブジェクトでリクエストされたオペレーションの実行を終了しました。このオペレーションは、すべてのオブジェクトで成功または失敗することがあります。完了レポートを生成するようにジョブを設定した場合、このレポートはジョブが Complete になるとすぐに利用可能になります。 Complete は終了状態です。ジョブが Complete に達すると、他の状態に移行することはありません。
Cancelling このジョブは Cancelled に移行しています。 Cancelling ステージが完了すると、ジョブは自動的に Cancelled になります。
Cancelled ユーザーはジョブのキャンセルをリクエストし、S3 バッチオペレーションはジョブのキャンセルに成功しました。このジョブは、Amazon S3 に新しいリクエストを送信しません。 Cancelled は終了状態です。ジョブが Cancelled に達した後、他の状態には移行しません。
Failing このジョブは Failed に移行しています。 Failing ステージが完了すると、ジョブは自動的に Failed になります。
Failed このジョブは失敗し、もう実行されていません。ジョブの失敗に関する詳細については、「ジョブの失敗の追跡」を参照してください。 Failed は終了状態です。ジョブが Failed に達した後、他の状態には移行しません。

ジョブステータスの更新

次の AWS CLI および SDK for Java の例は、バッチオペレーションジョブのステータスを更新します。S3 コンソールを使用してバッチオペレーションジョブを管理する方法の詳細については、S3 コンソールを使用した S3 バッチオペレーションジョブの管理 を参照してください。

  • たとえば、前の create-job の例で、--no-confirmation-required パラメータを指定しなかった場合、ジョブのステータスを Ready に設定してジョブを確定するまでこのジョブは停止状態になります。その後、Amazon S3 によってジョブが実行可能になります。

    aws s3control update-job-status \ --region us-west-2 \ --account-id 181572960644 \ --job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \ --requested-job-status 'Ready'

  • ジョブステータスを Cancelled に設定して、ジョブをキャンセルします。

    aws s3control update-job-status \ --region us-west-2 \ --account-id 181572960644 \ --job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \ --status-update-reason "No longer needed" \ --requested-job-status Cancelled

次の例では、AWS SDK for Java を使用して S3 バッチオペレーションジョブのステータスを更新します。

ジョブのステータスの詳細については、「ジョブステータスと完了レポートの追跡」を参照してください。

package aws.example.s3control; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3control.AWSS3Control; import com.amazonaws.services.s3control.AWSS3ControlClient; import com.amazonaws.services.s3control.model.UpdateJobStatusRequest; import static com.amazonaws.regions.Regions.US_WEST_2; public class UpdateJobStatus { public static void main(String[] args) { String accountId = "Account ID"; String jobId = "00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c"; try { AWSS3Control s3ControlClient = AWSS3ControlClient.builder() .withCredentials(new ProfileCredentialsProvider()) .withRegion(US_WEST_2) .build(); s3ControlClient.updateJobStatus(new UpdateJobStatusRequest() .withAccountId(accountId) .withJobId(jobId) .withRequestedJobStatus("Ready")); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it and returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

通知とログ記録

完了レポートをリクエストすることに加えて、AWS CloudTrail を使用してバッチオペレーションのアクティビティをキャプチャ、確認、および監査することもできます。バッチオペレーションは既存の Amazon S3 API を使用してタスクを実行するため、それらのタスクも直接呼び出した場合と同じイベントを出力します。したがって、Amazon S3 で既に使用しているのと同じ通知、ログ記録、および監査ツールとプロセスを使用して、ジョブの進捗状況とジョブのすべてのタスクを追跡および記録することができます。詳細については、次のセクションの例を参照してください。

注記

Amazon S3 バッチオペレーションは、ジョブの実行中に CloudTrail で管理イベントとデータイベントの両方を生成します。これらのイベントの量は、各ジョブのマニフェスト内のキーの数に応じてスケールされます。詳細については、CloudTrail の料金のページを参照してください。このページには、アカウントで設定した証跡の数に応じて料金がどのように変わるのかを示す例が記載されています。ニーズに合わせてイベントを設定してログに記録する方法については、AWS CloudTrail ユーザーガイド最初の証跡を作成するを参照してください。

Amazon S3 イベントの詳細については、「Amazon S3 イベント通知」を参照してください。

ジョブの失敗の追跡

指定されたマニフェストを読み取れないなど、S3 バッチオペレーションが正常に実行できない問題が発生した場合、そのジョブは失敗します。ジョブが失敗すると、1 つ以上の障害コードまたは失敗の理由が生成されます。S3 バッチオペレーションは、ジョブの詳細をリクエストしてそれらを表示できるように、障害コードと理由をジョブとともに保存します。ジョブの完了レポートをリクエストした場合は、そこに障害コードと理由も表示されます。

ジョブが大量の失敗したオペレーションを実行するのを防ぐために、Amazon S3 はすべてのバッチオペレーションジョブにタスク失敗のしきい値を設定します。ジョブが 1000 個以上のタスクを実行すると、Amazon S3 はタスクの失敗率を監視します。いずれかの時点で、失敗率 (実行されたタスクの総数に対する失敗したタスクの数の割合) が 50 パーセントを超えると、そのジョブは失敗します。タスク失敗しきい値を超えたためにジョブが失敗した場合、この失敗の原因を識別できます。たとえば、特定のバケットに存在しないいくつかのオブジェクトを誤ってマニフェストに含めてしまうことがあります。誤りを訂正したら、ジョブを再送信できます。

注記

S3 バッチオペレーションは非同期で動作するため、タスクはマニフェストにリストされているオブジェクトの順序で実行する必要はありません。つまり、どのオブジェクトのタスクが成功して、どれが失敗したかを判断するためにマニフェストの順序を使用することはできません。代わりに、ジョブの完了レポート (リクエストした場合) を調べるか、AWS CloudTrail イベントログを表示して失敗の原因を特定することができます。

完了レポート

ジョブを作成するときに、完了レポートをリクエストできます。S3 バッチオペレーションが少なくとも 1 つのタスクを正常に呼び出す限り、タスクの実行が完了した後、失敗したとき、またはキャンセルされたときに、Amazon S3 は完了レポートを生成します。完了レポートに、すべてのタスクを含めるか、失敗したタスクのみを含めるかを設定できます。

完了レポートには、ジョブ設定とステータス、およびオブジェクトキーとバージョン、ステータス、エラーコード、およびエラーの説明を含む各タスクの情報が含まれます。完了レポートは、追加の設定を必要としない統合形式でタスクの結果を表示する簡単な方法です。完了レポートの例については、「例: S3 バッチオペレーション完了レポート」を参照してください。

完了レポートを設定していない場合でも、CloudTrail および Amazon CloudWatch を使用して、ジョブとそのタスクをモニタリングして監査できます。詳細については、次のセクションを参照してください。