こんにちは!2015年2月からサーバーワークスに入社し2ヶ月間東京オフィスで修行中の柏尾です。 仕事はそこそこに、部活動(バッティングセンター部、ボルダリング部、モーターサイクル部、アナログゲーム部、こけし部)に精力的に参加しています。飯田橋の新オフィスもとても楽しみです!
リージョン間でS3上のファイルが同期可能に!
AWSのオブジェクトストレージサービスであるS3で、リージョン間でのオブジェクトのレプリケーションが可能になりました。
この機能を使うことで、オリジナルのバケットへのオブジェクトの新規追加、変更、削除といった操作が、(他リージョンの)セカンダリバケットに自動的に反映されるようになります。
利用可能なリージョン一覧
2015年03月25日現在で、クロスリージョンレプリケーションが可能なリージョンは下記の通りです。
US Standard
US West (Oregon)
US West (N. California)
EU (Ireland)
EU (Frankfurt)
Asia Pacific (Tokyo)
Asia Pacific (Singapore)
Asia Pacific (Sydney)
South America (Sao Paulo)
Cross-Region Replicationの設定方法
レプリケーションのオリジンとなるバケットに設定を行っていきます。
バケットの作成・設定
今回はオリジンとして「kasshy-tokyo-origin」という名前のバケットを東京リージョンに、レプリケーション先として「kasshy-us-secondary」という名前のバケットをUS Standardリージョンに作成しました。
1.レプリケーション先のバケットのVersioningを有効化
レプリケーション先のバケットのVersioningを有効化しておく必要があります。
- レプリケーション先のバケット「kasshy-us-secondary」を選択→「Properties」→「Enable Versioning」ボタンを押します。
2.オリジン側バケットのCross-Region Replicationの設定
- オリジン側のバケット「kasshy-tokyo-origin」を選択→「Properties」→「Cross-Region Replication」を開きます。
- 「Enable Versioning」のボタンを押します。バージョニングを有効化して良いかのダイアログが表示されますのでOKを押します。
- 「Enable Cross-Region Replication」を選択
- Source:「This bucket」を選択(「A prefix in this bucket」を選択するとプレフィックスに一致するものがレプリケート対象になります)
- Destination Region:今回は「US Standard」を選択します。(注意:オリジンと同一リージョンは選択できません)
- Destination Bucket:レプリケート先のバケットとして、先ほど作成した「kasshy-us-secondary」のバケットを選択します。
3.IAM Roleの設定
- 「Create/Select IAM Role」のボタンを押します。
別ウィンドウが開き、IAM Roleを設定する画面が表示されます。
- IAM Role:デフォルトのまま「Create a new IAM Role」を選択します。
- Role Name:デフォルトのまま「kasshy-tokyo-origin-kasshy-us-secondary-s3-repl-role」
- 「Allow」ボタンを押すとウィンドウが閉じ、元の画面に戻ります。
- Policy Documentの中身は下記のようになっています。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::kasshy-tokyo-origin",
"arn:aws:s3:::kasshy-tokyo-origin/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::kasshy-us-secondary/*"
}
]
}
- 「Selected IAM Role」に先ほど設定した「kasshy-tokyo-origin-kasshy-us-secondary-s3-repl-role」が表示されていることを確認し、「Save」ボタンを押します。
- 「Cross-Region Replication is currently enabled on this bucket」というメッセージが表示されれば成功です。
- 下記のように「Destination bucket must have versioning enabled.」というメッセージが表示されてしまう場合は、レプリケート先のバケットのバージョニングが有効化されていませんので、「1.レプリケーション先のバケットのVersioningを有効化」の操作で有効にしておく必要があります。
ファイルを用意してさっそく動かしてみます!
さっそくオリジン側のバケットにファイルをアップロードして、レプリケーション先のバケットにファイルが同期されるかを確認してみたいと思います。
社内のLambda勉強会で、S3へ顔写真アップロード → Lambda起動 → 顔認識APIを使って加工するというサンプルプログラムで作った某社代表の画像『ooishi1.png』『ooishi2.png』を動作確認に使いたいと思います。
1枚目はSDK-Javaが良い仕事してますね!2枚目はDynamoDBのItemの隙間から細い目がこっちを見ていてほんとうに不気味です・・・。
オリジンのバケットにファイルをアップロード
レプリケーション先のバケットにちゃんとファイルがレプリケートされていますね。
オリジンのバケットの削除
オリジン側の「ooishi2.png」を削除してみます
レプリケーション先のバケットからもファイルが削除されていることが確認できました。オリジン側のファイルの変更なども同様に同期されます。
オブジェクトのレプリケーションのステータスの確認
レプリケーションの状態はオブジェクトの「Replication Status」で確認することができます。
料金・注意事項など
- S3自体の利用についてはこれまでと同じで、レプリケーション時には通常のAWSのリージョン間データ転送費用がかかります。(料金表)
- バージョニング機能を使うため、頻繁にファイルの更新がある場合は利用データ量が増えますので履歴ファイルの管理に注意が必要です。
- 同一リージョン内にある2つのバケット間では利用できません。
- レプリケーション設定を入れる前にS3にあったオブジェクトは、設定したタイミングではレプリケートされませんので、一旦SDKなどでレプリケーション先のバケットにCOPYする必要があります。
- 双方向にレプリケーションすることも可能です。
まとめ
これまでS3オブジェクトのリージョン間同期はSDKやCLIを使って自前で用意することが多かったと思いますが、Cross-Region ReplicationによってS3の標準機能でそれが実現できるようになりました。今まで以上にDR要件を実現しやすくなり、ますますS3が便利になりましたね!
JAWS DAYS 2015 お疲れさまでした〜
先日、JAWS DAYS 2015にスタッフとして参加してきました。 1000人以上の来場がありイベントは大盛り上がりでした!
AWSカルタのコーナーで遊んでいたお手伝いしていた時の写真です。 これは僕がお手つきした瞬間のようです。(緑系のアイコンが難しい・・・)