[アップデート]Amazon S3 Glacier Flexible Retrieval でデータの復元時間が最大 85% 短縮されました

S3 バッチオペレーションを使用し S3 Glacier Flexible Retrieval の標準取り出しオプションを選択すると、追加費用なしで高速なデータ復元(数分~数十分)が可能になります。
2023.08.13

コーヒーが好きな emi です。

2023/8/9、Amazon S3 Glacier Flexible Retrieval のデータ復元時間が追加費用なしで最大 85% 短縮されると発表されました。アップデートのポイントは以下 3 点です。

  • 追加費用はかからない
  • S3 バッチオペレーションを使用し「S3 Glacier Flexible Retrieval」の標準取り出しオプションを選択すると、より高速なデータ復元が可能になる
  • 数分~数十分以内に復元したオブジェクトが利用できるようになる

S3 Glacier では「データ復元」という操作が必要

S3 Glacier ストレージクラスのデータ保存料金は割安ですが、データを取り出す際に取り出し料金がかかります。そのため普段はアクセスしない大容量のアーカイブデータを格納するのに適しています。

S3 Glacier ストレージクラスは以下の 3 種類があります。

  • S3 Glacier Instant Retrieval
  • S3 Glacier Flexible Retrieval
  • S3 Glacier Deep Archive

このうち 1 つ目の S3 Glacier Instant Retrieval は即時取り出しが可能です。
S3 Glacier Flexible Retrieval と S3 Glacier Deep Archive では「復元」という操作を行わないと、データを取り出すことができません。復元には以下の時間がかかります。

  • S3 Glacier Flexible Retrieval
    • 迅速取り出し:1~5 分
    • 標準取り出し:3~5 時間
    • 大容量取り出し:5~12 時間
  • S3 Glacier Deep Archive
    • 標準取り出し:12 時間以内
    • 大容量取り出し:48 時間以内

今回のアップデートは、S3 Glacier Flexible Retrieval ストレージクラスに保存されているオブジェクトを標準取り出しオプションで取り出す場合、S3 バッチオペレーションを使用すると時間が短縮できる、というものです。従来は 3~5 時間かかっていたものが、数分~数十分でデータの取り出しが可能になります。

復元時間を短縮するには S3 バッチオペレーション という機能を使う必要があります。S3 バッチオペレーションで S3 Glacier Flexible Retrieval の標準取り出しオプションを選択して実行することで、データ復元時間が短縮できます。

ちなみに S3 Intelligent-Tiering のアーカイブアクセス層にある場合も、より高速な復元の恩恵を受けることができます。復元操作後、オブジェクトは S3 Intelligent-Tiering の高頻度アクセス階層に移動されます。

検証

今回の検証のイメージ図はこちらです。順番に実施していきます。

S3 Glacier Flexible Retrieval ストレージクラスでオブジェクトを保存

テストファイル「test.txt」を S3 Glacier Flexible Retrieval ストレージクラスで保存するとどのように表示されるか見てみます。
「アクション」からは「合計サイズを計算する」「復元を開始」以外はグレーアウトしており、ダウンロードやコピーなどの操作は選択できません。

今回はバケット名「s3-console-emikitani」の中に「S3_Glacier_Flexible_Retrieval_restore_test/」という検証用のプレフィックスを作成します。この中に復元対象のファイルを格納します。

復元対象のファイル以下 3 つを、S3 Glacier Flexible Retrieval ストレージクラスで保存します。

  • object1.rtf
  • object2.rtf
  • object3.rtf

更に、「S3_Glacier_Flexible_Retrieval_restore_test/」の中に「Completion_report/」というプレフィックスを作成しました。これは S3 バッチオペレーションの完了レポート格納用に使います。

S3 バッチオペレーションに使用するマニフェストファイル作成

S3 バッチオペレーションでオブジェクトを復元するには「マニフェスト」が必要です。マニフェストとは、復元するすべてのオブジェクトをリスト化したものです。
今回は「s3-inventory-report-emikitani」というバケットを用意し、「S3_Glacier_Flexible_Retrieval_restore_test.csv」という名前で CSV ファイルを作成・格納しました。

CSV 形式は、バケット名、オブジェクトキー、オプションのバージョン ID の順に、2 列または 3 列にする必要があります。今回バージョニングは無効なので、バケット名、オブジェクトキーの順にカンマ区切りで記述しています。今回格納した CSV ファイルの中身は以下です。

S3_Glacier_Flexible_Retrieval_restore_test.csv

s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object1.rtf
s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object2.rtf
s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object3.rtf

今回は検証のため手作業で CSV ファイルを作成しました。もし大量のオブジェクトが存在する場合は S3 インベントリの機能を利用されるとよいと思います。

S3 バッチオペレーション設定

S3 コンソールを開き、画面左のナビゲーションペインから [バッチオペレーション] - [ジョブの作成] を選択します。

  • AWS リージョン
  • CSV
  • 作成しておいたマニフェストオブジェクトの場所

を指定し、「次へ」をクリックします。

S3 バッチオペレーションで実行できるオペレーションを選択できます。「復元」を選択します。

以下のように設定します。

  • ソースを復元:Glacier Flexible Retrieval または Glacier Deep Archive
  • 復元されたコピーが利用可能な日数:1
    • 復元されたオブジェクトにアクセス可能な期間を設定します。今回検証のため 1 日とします。
  • 取得階層:標準取り出し

復元操作では、Glacier に保存されているオブジェクトを一時的に S3 内にコピーし、そのコピーが一定の日数間(指定した日数)、アクセス可能な状態で保持されます。「復元されたコピーが利用可能な日数」は、そのコピーがアクセス可能である期間を設定するものです。設定した期間経過後、復元されたコピーは自動的に削除されます。

設定したら、「次へ」をクリックします。

完了レポートの格納先を指定します。
完了レポートには、ターゲットオブジェクト、タスクの成功またはエラーコード、出力、および説明一覧が記載されます。
完了レポート格納用に用意しておいたプレフィックス「Completion_report/」を指定します。

S3 バッチオペレーションに使用する IAM ロール作成

ここで、S3 バッチオペレーションに使用する IAM ロールを指定する必要があります。必要な権限は「IAM ロールのポリシーテンプレートと IAM 信頼ポリシーを表示」と書いてあるトグルを展開するとコピーできます。

以下のようなポリシーテンプレートがコピーできました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:RestoreObject"
            ],
            "Resource": "arn:aws:s3:::{{TargetResource}}/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::s3-inventory-report-emikitani/S3_Glacier_Flexible_Retrieval_restore_test.csv"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::s3-console-emikitani/S3_Glacier_Flexible_Retrieval_restore_test/Completion_report/*"
            ]
        }
    ]
}

{{TargetResource}} はバケット名 s3-console-emikitani に書き換えておきます。

それではブラウザの別タブで IAM コンソールを開き、まずは IAM ロールにアタッチするための IAM ポリシーを作成します。
ナビゲーションペインから [ポリシー] - [ポリシーを作成] をクリックします。
エディタは JSON を選択し、ポリシーエディタの中身を一旦全部削除します。コピーしてバケット名を置き換えたポリシーをポリシーエディタに貼り付けたら「次へ」をクリックします。

ポリシー名は「S3_Glacier_Flexible_Retrieval_restore_test_policy」としました。「ポリシーの作成」をクリックしてポリシーの作成を完了します。

ポリシーができたら、IAM ロールを作成していきます。ナビゲーションペインから [ロール] - [ロールを作成] をクリックします。
信頼されたエンティティタイプは「AWS のサービス」を選択します。
ユースケースでは「S3」で検索すると「S3 Batch Operations」が出てくるので選択し、「次へ」をクリックします。

許可ポリシーでは先ほど作成した「S3_Glacier_Flexible_Retrieval_restore_test_policy」を選択します。

ロール名は「S3_Glacier_Flexible_Retrieval_restore_test_role」としました。「ロールを作成」をクリックして IAM ロールの作成を完了します。

S3 バッチオペレーションの設定タブに戻る

ここから S3 バッチオペレーションの設定タブに戻ります。
「既存の IAM ロールから選択」を選択し、先ほど作成した IAM ロール「S3_Glacier_Flexible_Retrieval_restore_test_role」を設定して「次へ」をクリックします。

確認画面で設定を確認し、「ジョブの作成」をクリックします。

ジョブの作成操作が完了しました。ジョブの準備が整うまで数秒待ちます。

数秒でステータスが「実行のための確認待ち」になります。ジョブを選択し、「ジョブを実行」をクリックします。

ジョブの詳細画面が表示されます。画面下部までスクロールして「ジョブを実行」をクリックします。

ジョブが実行されます。このジョブは 1 分程度で完了しました。

ジョブの詳細を見ると、100% 完了となっています。

復元確認

S3 Glacier Flexible Retrieval ストレージクラスで保存したオブジェクト「object1.rtf」を見てみると、復元ステータスは「進行中」となっており、まだ利用できないようです。

復元を待ちつつ、完了レポートを見てみましょう。
Completion_report/job-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/results/ ともぐりこんでいくと、結果の CSV ファイルがあります。
ダウンロードして確認すると以下のようになっていました。

s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object2.rtf,,succeeded,200,,Successful
s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object1.rtf,,succeeded,200,,Successful
s3-console-emikitani,S3_Glacier_Flexible_Retrieval_restore_test/object3.rtf,,succeeded,200,,Successful

約 20 分後、再度 S3 Glacier Flexible Retrieval ストレージクラスで保存したオブジェクト「object1.rtf」を見てみると、復元ステータスは「完了済み」となりました。

「object2.rtf」「object3.rtf」も同様に「完了済み」となっており、復元の有効期限は 2023/08/14 09:00:00 AM JST となっていました。
ストレージクラスの表示は S3 Glacier Flexible Retrieval のままで、アクセスだけ可能になっているようです。

復元完了済みだと以下のように「ダウンロード」「開く」「名前を付けてダウンロード」「署名付き URL で共有」が選択できるようになっています。

ダウンロードもできます。

所感

3~5 時間かかっていたものが約 20 分程度で完了するのは嬉しいですね。
復元対象のオブジェクトをリストアップしたマニフェストファイルを準備するのがやや手間ですが、大量のオブジェクトが存在する場合は S3 インベントリの機能をうまく利用するとよさそうです。

参考