Amazon S3の新機能「バッチ一括処理」の使い方 #reinvent

S3のオブジェクトにバッチで一括処理

re:Invent 2018期間中に発表されたAmazon S3の新機能「S3バッチオペレーション」。何十億におよぶオブジェクトに対して一括でAPIを実行できる機能です。

S3が数十億におよぶ大量オブジェクトへのバッチ処理機能を発表!(プレビュー) #reinvent

現在はまだプレビュー提供中のため、申請が通った方のみ特別に試すことができます。しかしながらドキュメント自体はパブリックに公開されていますので、使い方や仕様を追うことはどなたでも可能です。

ということで使い方をまとめてみました。

基本的な手順

次の手順でバッチ一括処理を行います。

  1. 実行対象のオブジェクトを用意する(S3インベントリレポートまたは直接作成したCSV)
  2. CreateJob APIを利用してバッチ一括処理のジョブを作成する
  3. バッチ一括処理完了後に出力されるジョブレポートを確認する

新規に追加されるCreateJob APIが、本機能で最も重要なAPIです。

実行対象のオブジェクトの指定方法

バッチオペレーションの対象となるオブジェクトを指定する方法は2種類あります。

  • S3インベントリレポートで作成されるCSVファイル
  • CSVファイル

S3インベントリレポートは、S3内のオブジェクトリストを定期出力する機能です。

CSVファイルの場合は以下のようなフォーマットにします。バージョンはオプションですので、特定のバージョンのオブジェクトに対して実行したい場合に指定します。

[csv] <バケット名>, <オブジェクト名>, <バージョン> [/csv]

フォーマットについては以下に記載があります。

実行できる処理の種類

一括処理では、以下の処理を行うことができます。標準で用意されている処理以外はLambda Functionで行わせることができます。

ジョブの作成

CreateJob APIでジョブを作成します。こちらに記載されているパラメータで、どのような一括処理を行うのか設定します。

Operation

何の処理を実行するか、前述している処理の種類の中から指定します。

Manifest

処理の対象にするS3オブジェクトのリストです。こちらも前述の通りCSVファイルで指定します。

Priority

バッチ一括処理の優先度です。ジョブに対して設定した優先度が付けられますが、厳密な処理順としては保証されないようです。

RoleArn

バッチ一括処理自体に実行権限を与えるためのIAM Roleを指定します。

Report

バッチ一括処理で完了レポートを生成するかどうかを指定します。保存する場合はレポートの保存先となるS3バケットを指定します。

Description (Optional)

最大256文字で、管理目的の説明文を付けることができます。

ジョブのステータス

ジョブのステータスはDescribeJob APIを使って確認できます。その中の Status では次のようなステータスがあり、進捗状況を簡単に知ることができます。

ステータス 意味
New 作成後すぐの状態
Preparing ジョブをセットアップしている状態
Suspended ユーザーの確認待ち(コンソール利用時のみ発生)
Ready 実行可能な状態
Active ジョブの処理を実行中
Pausing 停止処理中
Paused 停止中(他の優先度の高いジョブが実行される場合に停止される場合がある)
Complete 全てのオブジェクトに対して処理が完了した(各オブジェクトに対しては成功または失敗の可能性がある)
Cancelling キャンセル中
Cancelled キャンセルが完了
Failing 失敗に転移中
Failed 失敗

処理結果の確認

バッチ一括処理では、処理完了の通知の受け取りや失敗のトラッキングなどが可能です。

通知とログ

バッチ一括処理はS3のオブジェクトの変更になるため、元々の機能であるS3 Event Notificationを併用することでAWS CloudTrail, Amazon SNS, Amazon SQSなどでキャプチャが可能です。

ジョブ失敗のトラッキング

バッチ一括処理では各オブジェクトに対して処理を行うため、1件ずつに成功または失敗の可能性があります。そのためジョブを失敗した場合のトラッキングが重要です。

バッチ一括処理では、ジョブに「失敗の閾値」が設けられています。1,000以上のタスクを実行した時に失敗率が計測され、50%を越えるとジョブが失敗として扱われます。エラーコードも取得できるため、失敗の原因が特定できます。

レポートの確認

CreateJob API呼び出し時にレポートの出力先のバケットを指定すると、ジョブ完了時にレポートが出力されます。レポートには各タスクについて、オブジェクトのキー、バージョン、ステータス、エラーコード、エラーの説明が含まれます。

まとめ

S3バッチオペレーション機能のドキュメントから、要点をまとめてみました。一括処理はジョブ、つまり非同期で実行されるため、どのような結果になったのかトラッキングすることが必要です。S3バッチオペレーションはジョブの追跡やレポートの機能が充実して印象でした。

濱田も発表時に感想を述べている通り、使いようによってはS3の使い方が大きく変わるような機能です。正式リリースされるまでの間はプレビューとして試すことはできるので、興味のある方はぜひプレビューに申し込みましょう!