ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

バージョニングが無効になっているS3バケットのバッチレプリケーション

この記事を共有する

目次

みなさんこんにちは!
サポートGの山内です!
先日、業務にてバージョニングが無効になっているS3バケットのバッチレプリケーションを実施しました。
手順が意外と複雑だったため紹介します。

前提

以下の設定やリソースは、設定済み、構築済みとします。
ロールの設定は公式ガイドを参考に作成いただければと思います。

  1. レプリケーション先バケット
  2. レプリケーション設定
  3. レプリケーション用ロール

S3バッチレプリケーションについて

以下のようにバージョニング有効化前にアップロードしたオブジェクトと、
有効化後にアップロードしたオブジェクトがあるとします。
バージョニング有効化前のオブジェクトは、バージョンIDがnullとなっています。
バッチレプリケーションでは、バージョンIDがnullのオブジェクトはレプリケーションの対象にならないため、バージョンIDの指定が必要です。 07.png

大まかな手順

  1. S3インベントリ設定を有効化し、インベントリリストファイルを生成
  2. インベントリリストファイルを編集し、バージョンIDを記載
  3. バッチレプリケーションを実施

バケットのオブジェクトの一覧CSVファイルを作成し、それを基にバッチレプリケーションを実施しますが、 オブジェクトの一覧CSVファイルを取得するために、S3のインベントリを使用します。
CLIを使ったオブジェクトの一覧取得でもいいと思いますが、オブジェクト数が数千個以上ある場合は、
S3インベントリを使用した方が、適切なサイズでCSVファイルを分割してくれるのでおすすめです。
取得したインベントリリストファイルにバージョンIDを記載し、バッチレプリケーションが実行できるようにします。

実際にやってみる

S3 インベントリ設定

バッチレプリケーションの対象オブジェクトがあるバケットにて、インベントリ設定を行います。
管理タブから「インベントリ設定を作成」をクリックすることでインベントリの設定ができます。

インベントリスコープにてプレフィックスの指定ができ、 インベントリリストファイルにて出力するオブジェクトの細かな指定ができます。
今回は特に指定しません。
01.png

次にインベントリリストファイルの保存先バケットを指定します。
ここで指定したバケットに、バケットポリシーを自動で設定してくれます。 02.png

頻度は日別、出力形式はCSV、ステータスは有効にします。
頻度の項目にも記載があるように、インベントリリストファイルの生成は最大48時間かかります。
03.png

今回は暗号化の設定は行いません。 04.png

最後に「追加のメタデータ」の設定です。
バッチレプリケーションの実施の場合は特に有効化は不要です。 05.png

ここまで設定したら「作成」をクリックして、インベントリ設定を作成します。

うまくいくと、インベントリファイル保管先バケットにインベントリリストファイルが生成されています。 06.png

生成先フォルダーは以下の通りです。

  インベントリリストファイルの場所
保管先バケット
       - バケット名
          - data
            - ★ここです
          - hive
          - マニフェストファイル保管フォルダー

インベントリリストファイルの確認

生成されたインベントリリストファイルを確認します。
3列目がバージョンIDのため、バージョニング有効化前のオブジェクトは空となっているのが分かります。 08.png

ファイルではこのような形でオブジェクトの情報が記載されています。

データ
1列目 バケット名
2列目 オブジェクト名
3列目 バージョンID
4列目 is_latest
5列目 is_delete_marker

インベントリリストファイルの編集

空欄のバージョンIDに「null」を記載し、4列目、5列目の記載を削除します。
バージョンIDに記載する文字は「null」でなくともなんでも大丈夫です。 09.png

編集したCSVファイルをアップロードします。
アップロード先はどこでも大丈夫ですが、私はインベントリファイルが保管されているフォルダにしています。 10.png

バッチレプリケーションジョブを作成する際に必要のため、ARNとETagを控えておいてください。
15.png

バッチレプリケーションの実行

以下のコマンドを実行し、バッチレプリケーション用のジョブを作成します。
コマンド内にレポート送信先の設定があります。
レポートにはバッチレプリケーションジョブの実行結果が記載されます。

ここを押すと展開します

 aws s3control create-job \
  --account-id アカウントID \
  --operation '{"S3ReplicateObject":{}}' \
  --report '{
    "Bucket":"レポート保管先バケットARN",
    "Prefix":"batch-replication-report(レポート保管の際に設定するプレフィックス変更しなくてもいい)",
    "Format":"Report_CSV_20180820",
    "Enabled":true,
    "ReportScope":"AllTasks"
  }' \
  --manifest '{
    "Spec":{
      "Format":"S3BatchOperations_CSV_20180820",
      "Fields":["Bucket","Key","VersionId"]
    },
    "Location":{
      "ObjectArn":"csvファイルのARN",
      "ETag":"csvファイルのETag"
    }
  }' \
  --priority 1 \
  --role-arn 使用するRoleのARN \
  --no-confirmation-required \
  --region バッチレプリケーション元バケットのリージョン

コマンドを実行してみます。
コマンドが長いのでスクリプトとして実行しています。
成功するとジョブidがプロンプトに返ってきます。
11.png

マネジメントコンソールを確認すると、レプリケーションジョブが自動で実行されています。 12.png

少し待つと完了しました。
レプリケーション先バケットにもオブジェクトがあることが確認できました。 13.png 14.png

まとめ

バージョニングが無効だったバケットに対するバッチレプリケーションの手順を理解できたので、良かったと思います。
こういった事象に遭遇して困っている方のためになれたらうれしいです。

この記事は私が書きました

山内 宏紀

記事一覧

CloudFormationが好きです。 使っているギターはSGです。

山内 宏紀

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。