【新機能】S3でCross-Region Replicationが出来るようになりました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

本日S3に重要なアップデートが行われました。S3のオブジェクトを別リージョンへレプリケーションすることで出来るようになりました。

設定

今回はManagement Consoleから設定を行いました。

まずS3の画面を表示します。Cross-Region Replicationの告知が表示されていました。

S3_Management_Console

レプリケーションのオリジンとしてS3バケットを"maroon1st-rep-tokyo"という名称で作成して設定します。

Propertiesの中に"Cross-Region Replication"が増えています。 まず、[Enable Versioning]をクリックして有効化します。有効化は既存"Versioning"の項でも実施可能です。

S3_Management_Console_と_新_-_Amazon_S3のためのクロスリージョンレプリケーション__AWS公式ブログ

次にレプリケーションの内容を設定します。

  • [Enable Cross-Region Replication]を選択
  • Source:[This bucket]を選択([A prefix in this bucket]を選択すると特定のオブジェクトのみを対象とできます)
  • Destination Region:レプリケーション先のリージョンを選択
  • Destination Bucket:レプリケーション先のS3バケットを選択(今回は既存バケット[maroon1st-rep-oregon]。ここで新規バケットも作成可能。)

S3_Management_Console_と_投稿の編集_‹_Developers_IO_—_WordPress

最後にIAMの権限設定を行います。 S3画面側で[Create/Select IAM Role]をクリックするとIAMの設定画面が開きます。ここで[Allow]をクリックします。 設定内容は以下になります。

  • IAM Role:デフォルトの[Create a new IAM Role]を選択し、新しいRoleを作成
  • Role-Name:デフォルト値の"maroon1st-rep-tokyo-maroon1st-rep-oregon-s3-repl-role"を設定

IAM_Management_Console

ここで作成したIAM Policyは以下の内容になります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:Get*",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::maroon1st-rep-tokyo",
        "arn:aws:s3:::maroon1st-rep-tokyo/*"
      ]
    },
    {
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateDelete"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::maroon1st-rep-oregon/*"
    }
  ]
}

[Selected IAM Role]で先ほど作成したIAM Roleである"maroon1st-rep-tokyo-maroon1st-rep-oregon-s3-repl-role"が設定されていることを確認して、[Save]をクリックします。

そのままでは、以下のメッセージが表示されますので、レプリケーション先のS3バケット"maroon1st-rep-oregon"でVersioningを有効化します。その後、再度[Save]をクリックします。

S3_Management_Console

これでCross-Region Replicationの設定は完了です。

動作確認

まず、オリジンの[maroon1st-rep-tokyo]にManagement Consoleからファイルをアップロードします。

東京リージョンのmaroon1st-rep-tokyoにファイルをアップロードします。 アップロード直後は[Replication Status]が"Pending"になっているますが、少し経つと"Completed"になります。

S3_Management_Console_と_投稿の編集_‹_Developers_IO_—_WordPress_と_Default

レプリケーション先バケットを確認すると、同じオブジェクトが同じタイムスタンプで作成されています。こちらの[Replication Status]は"Replica"となります。

S3_Management_Console

今度はオブジェクトを更新します。オリジンのバケット[Size]と[Last Modified]が変わっています。

S3_Management_Console

同様にレプリケーション先バケットでも[Size]と[Last Modified]が更新されます。

S3_Management_Console_と_投稿の編集_‹_Developers_IO_—_WordPress_と_TweetDeck

ファイルを削除してみましょう。 オリジンのバケットでオブジェクトを削除します。

S3_Management_Console

レプリケーション先バケットでも削除されます。

オブジェクトの追加、更新、削除のレプリケーションを確認できました。

注意点

機能的な制限事項として注意点があります。

  • レプリケーション先は1バケットのみ設定可能のようです。
  • レプリケーション先は別リージョンのみ指定可能です。同じリージョンへはレプリケーションできません。
  • Cross-Region Replicationの設定前にあったオブジェクトはレプリケーションされません。別途コピーが必要です。
  • SSE-CとSSE-KMSを使用して暗号化したオブジェクトはレプリケーションされません。
  • バケット所有者が権限を持っていない場合はレプリケーションできません。
  • S3のリソース(lifecycle、acl等)は複製されません。
  • lifecycleで行われた操作はレプリケーションされません。そのため、ログのパージ設定などは各々のバケットで設定する必要があります。
  • 多段レプリケーションは行えません。
  • バージョンの削除はレプリケーションされません。バージョンを削除したい場合には、各々のバケットに対して削除する必要があります。

また、運用方法や料金に注意が必要です。

  • レプリケーション先バケットのオブジェクトを操作すると整合性が崩れるため、更新操作は行わないほうが良いと思われます。
  • Versioningを有効化することが前提になるため、過去のオブジェクトに対しても課金が発生します。頻繁な更新がある場合は、予想しない高額な利用料金になる可能性があります。

さいごに

S3は堅牢性が99.999999999%ですが、可用性はそうでなく99.99%です。超高可用性が必要な場合などに使用できると思います。 S3のCross-Region Replicationは通常使用できる9リージョンで使用可能です。ユースケースに合う場合は試してみては如何でしょうか?