LoginSignup
11
5

More than 1 year has passed since last update.

【備忘録】AWS S3 クロスリージョンレプリケーション(CRR)の設定方法

Posted at

はじめに

業務でS3のクロスリージョンレプリケーション(以下CRR)の設定をすることがあったので、自分用にメモとして残します。 レプリケーションとは

ハードウェアを含め同じシステム環境が2セット(稼働系と待機系)用意された環境において リアルタイムにデータをもう一方の環境に複製する技術です。
https://bcblog.sios.jp/what-is-replication/

AWSのドキュメントはこちらです
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

CRRとはクロスリージョンなので、その名の通りレプリケーションをAWSのリージョンを跨いで別のバケットにリアルタイムでオブジェクトをコピーしておく設定です。データを別リージョンに逃がしておいて障害時に復旧させるために使用したり、AWSの複数リージョンで稼働しているシステムに組み込むこともできます。

早速ですが設定していきましょう!

S3バケットの作成

まずは、CRR元とCRR先のバケットを作成します。CRR元のバケットを東京リージョンに、CRR先のバケットを大阪リージョンに作成したいと思います。

バケット名はCRR元を"ari-crr-test-tokyo"、CRR先を"ari-crr-test-osaka"としておきます。他の設定については、"ACL無効"、"パブリックアクセスをすべてブロック"、バージョニングは"有効"(CRRの要件として両バケットともバージョニングの有効化が必要)、タグは特に無し、デフォルトの暗号化は"無効にする"としておきます。
※今回は検証後削除予定のため設定は適当です。要件に合わせて暗号化やログ記録も設定してください。

レプリケーション元(東京リージョン)

image.png

レプリケーション先(大阪リージョン)

image.png
設定が完了したら「バケットを作成」を押します。

バケットが作成できました。
image.png

CRR用IAMロールの作成

※自動作成のIAMロール・IAMポリシーを使用する場合は飛ばしてください。

まずはIAMロールにアタッチするIAMポリシーを作成します。

設定は画像のように
ListBucket
GetReplicationConfiguration
GetObjectVersionForReplication
GetObjectVersionAcl
GetObjectVersionTagging
GetObjectRetention
GetObjectLegalHold
ReplicateObject
ReplicateDelete
ReplicateTags
ObjectOwnerOverrideToBucketOwner
選択します。
リソースはCRR元と先のバケットとバケット配下全てを選択します。
image.png

※以下のポリシーをjsonで入力しても問題ありません。

IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetReplicationConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging",
                "s3:GetObjectRetention",
                "s3:GetObjectLegalHold",
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags",
                "s3:ObjectOwnerOverrideToBucketOwner"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::(CRR元)",
                "arn:aws:s3:::(CRR元)/*",
                "arn:aws:s3:::(CRR先)",
                "arn:aws:s3:::(CRR先)/*"
            ]
        }
    ]
}

今回はタグは特に設定しません。
ポリシー名は"IAMP-ARI-CRR-TEST"としておき、説明は空欄でも構いません。
ポリシー名を入力したら、「ポリシーの作成」を押します。

image.png

次にIAMロールを作成します。
信頼されたエンティティタイプは"AWSのサービス"、ユースケースは"S3"を選択します。
image.png
許可ポリシーは先ほど作成したポリシーを選択します。
image.png
ロール名は"IAMR-ARI-CRR-TEST"として、ロールも特にタグ付けはしません。
image.png
IAMロールが作成できました。
image.png

CRRの設定

準備ができたのでCRRの設定をしていきます。 レプリケーション元のバケットの管理タブに移動し、レプリケーションルールの作成を押します。

image.png

ルール名は"RR-ARI-CRR-TEST"としておきます。ちなみにRRはReplicationRuleのRRです。
ステータスは"有効"にチェックを付けます。ソースバケットの設定は"バケット内のすべての~"にチェックを付けます。レプリケーション元バケットの特定のフォルダだけレプリケーションする場合は上の"1つ以上の~"を選択して、プレフィックスを指定してください。送信先は"このアカウントの~"を選択して、「S3の参照」から先ほど作成したレプリケーション先のバケットを指定します。残りはデフォルトのままで特に設定しません。要件に合わせて暗号化なども設定してください。
image.png
※ちなみにIAMロールを「新しいロールの作成」としてRRを設定すると"s3crr_role_for_(レプリケーション元バケット名)"というIAMロールと"s3crr_for_(レプリケーション元バケット名)_XXXXXX"というIAMポリシーが自動生成されます。IAMを管理する時の参考にしてもらえたらと思います。

「保存」を押すと次のようなポップアップが表示されます。
image.png
レプリケーション元のバケットにある既存のオブジェクトをレプリケーションする場合は、"はい~"を選択、しない場合は"いいえ~"を選択します。"はい~"を選択した場合はバッチオペレーションジョブを設定(ジョブ結果のレポートの設定とジョブで使用するIAMロール)し実行することで既存のオブジェクトもレプリケーションできます。
CloudShellから次のコピーコマンドを打ってバケットごとコピーすることでも再現可能です。無駄にIAMロールが増えることを考えるとこちらの方が良いと思いますが、レプリケートするオブジェクトの容量が多いとCloudShellがパンクしますので注意が必要です。

aws s3 cp s3://(レプリケーション元バケット名) s3://(レプリケーション先バケット名) --recursive 

今回はテスト用でオブジェクトが入っていないので、"いいえ~"を選択します。
image.png
レプリケーションルールができました。これでCRRの設定が完了です。

CRRの検証

最後にちゃんとレプリケーションされるか検証します。

初期状態は東京リージョンのバケットも大阪リージョンのバケットも空になっています。

image.png
レプリケーション元の東京リージョンのバケットにテスト用のテキストファイルをアップロードします。
image.png
アップロードできました。
image.png
するとレプリケーション先である大阪リージョンのバケットに、東京リージョンに置いたテキストファイルがコピーされている事が確認できました!
image.png

おわりに

自分用のメモと言いつつこれを読んだ人がCRRの設定をできるように手順を記載したつもりです。 何か分かりづらい所があればご指摘お願いします。 最後まで読んでくださりありがとうございました!!
11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5