【正解】A
【0からの解説】
①前提知識
・Cloud Storage のオブジェクト削除は、基本的に 1 オブジェクトにつき 1 回の DELETE リクエストです。数百万件を 1 件ずつ順番に削除すると、HTTP の往復が数百万回発生して時間がかかります。
・JSON API のバッチ リクエストを使うと、最大 100 件の API 呼び出しを 1 つの HTTP リクエストにまとめられ、ネットワークのオーバーヘッドを削減できます。Python のクライアント ライブラリ(google-cloud-storage)では client.batch() コンテキストで削除をまとめられ、複数のバッチを並列に送ることもできます。
・オブジェクトのライフサイクル管理は、オブジェクトの経過日数・作成日・ストレージ クラスなどの条件に一致したオブジェクトを自動で削除・クラス変更する機能です。条件の評価と実行は非同期で、条件を満たしてから実際に削除されるまで最大 24 時間程度の遅延があり得ます。また「ジョブが終了したとき」というイベントを条件にすることはできません。
・参考: 現在の公式ドキュメントでは、数百万〜数十億件規模の削除には「ストレージ バッチオペレーション(Storage batch operations)」を使い、1 つの削除ジョブでまとめて削除する方法が案内されています。これは JSON API のバッチ リクエスト(選択肢 A)とは別の機能で、本問の選択肢にはありません。そのため本問では、選択肢の中で最も要件に合う A を選びます。
②要件の整理
・数百万件の顧客レコード ファイル
・ジョブ完了後「直ちに」削除(規制要件)
・完了までの時間を最小化
③正解の理由
ジョブ自身の最終ステップとして削除を組み込めば、処理の完了と同時に人手を介さず削除が始まり「直ちに」の要件を満たします。さらにバッチ リクエストで 100 件ずつまとめて(必要なら並列で)削除するため、1 件ずつ削除するより大幅に短時間で完了します。自動化・即時性・速度の 3 点を満たすのは A です。
【誤りの選択肢】
B:ライフサイクル管理は非同期で実行され、条件を満たしてから削除まで最大 24 時間程度かかる場合があるため「直ちに削除」を保証できません。また「ジョブの実行終了時」を条件にする設定は存在せず、選択肢の構成自体が実現できません。
C:Google Cloud コンソールは数百万件規模の一括削除をバックグラウンドで実行できますが、あくまで人が画面を操作する手動の手順です。ジョブの完了を人が確認してから作業するため、確認や操作が遅れればその分だけ削除開始が遅れ、規制要件の「ジョブ完了後に直ちに削除」を確実には満たせません(即時性・確実性に欠ける)。さらにバケット自体を消すと、次回のジョブ実行時にバケットを作り直す必要も生じます。ジョブに削除を組み込んで自動で即時に実行する A に劣ります。
D:gcloud storage rm --recursive でも削除はできますが、公式ドキュメントは「10 万件以上のオブジェクトを一括削除する場合は処理に長い時間がかかるため gcloud storage の使用は避ける」としています。また手動で実行する手順であり、ジョブ完了と連動した即時削除になっていない点でも A に劣ります。
【参考】
オブジェクトのライフサイクル管理 | Cloud Storageリクエスト レートとアクセス分散のガイドライン | Cloud Storage