🗂
S3のオブジェクトレプリケーションにかかる時間を検証してみた
動機
S3レプリケーションでオブジェクトのレプリケーションにどの程度かかるか知る必要があり、調べてみるも以下のような記述しか見つからず、自分で検証するに至りました。
大部分のオブジェクトは、15 分以内にレプリケートされます。Amazon S3 がオブジェクトをレプリケートするために要する時間は、さまざまな要因に依存します (レプリケート元とレプリケート先のリージョンペア、オブジェクトのサイズなど)。大きなオブジェクトの場合は、レプリケーションには最大で数時間かかることもあります。
環境
-
レプリケーション用のS3バケット
- 削除マーカーのレプリケーションは
Enabled
です。 - レプリケーション元のS3バケットは
us-east-1(バージニア北部)
に、レプケーション先のS3バケットはus-east-2(オハイオ)
とus-west-1(北カリフォルニア)
に構築しました。
- 削除マーカーのレプリケーションは
-
レプリケーションのログ取得と確認
-
CloudTrail
,S3バケット
,Athena
を使用し、いずれもus-east-1(バージニア北部)
に構築しました。
-
-
各リソースの詳細な設定値は以下のCloudFormationテンプレートの通りです
レプリケーション元(一部抜粋){ "Resources": { "S3ReplicationBucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "trials3replicationsrcstaceplicationbucket", "ReplicationConfiguration": { "Role": { "Fn::GetAtt": [ "S3ReplicationRole", "Arn" ] }, "Rules": [ { "DeleteMarkerReplication": { "Status": "Enabled" }, "Destination": { "Bucket": "arn:aws:s3:::trials3replicationdest1stdest1stackbucket" }, "Filter": {}, "Id": "Rule1", "Priority": 0, "Status": "Enabled" }, { "DeleteMarkerReplication": { "Status": "Enabled" }, "Destination": { "Bucket": "arn:aws:s3:::trials3replicationdest2stdest2stackbucket" }, "Filter": {}, "Id": "Rule2", "Priority": 1, "Status": "Enabled" } ] }, "Tags": [ { "Key": "aws-cdk:auto-delete-objects", "Value": "true" } ], "VersioningConfiguration": { "Status": "Enabled" } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { "aws:cdk:path": "TrialS3ReplicationSrcStack/S3Replication/Bucket/Resource" } }, "S3ReplicationRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" } } ], "Version": "2012-10-17" } }, "Metadata": { "aws:cdk:path": "TrialS3ReplicationSrcStack/S3Replication/Role/Resource" } }, "S3ReplicationRoleDefaultPolicy": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "S3ReplicationBucket", "Arn" ] } }, { "Action": [ "s3:GetObjectVersionAcl", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "S3ReplicationBucket", "Arn" ] }, "/*" ] ] } }, { "Action": [ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ReplicateTags" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::trials3replicationdest1stdest1stackbucket/*", "arn:aws:s3:::trials3replicationdest2stdest2stackbucket/*" ] } ], "Version": "2012-10-17" }, "PolicyName": "S3ReplicationRoleDefaultPolicy", "Roles": [ { "Ref": "S3ReplicationRole" } ] }, "Metadata": { "aws:cdk:path": "TrialS3ReplicationSrcStack/S3Replication/Role/DefaultPolicy/Resource" } } } }
レプリケーション先(一部抜粋){ "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "trials3replicationdest1stdest1stackbucket", "Tags": [ { "Key": "aws-cdk:auto-delete-objects", "Value": "true" } ], "VersioningConfiguration": { "Status": "Enabled" } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { "aws:cdk:path": "TrialS3ReplicationDest1Stack/Bucket/Resource" } } } }
方法
- 1KBのテキストファイルをレプリケーション元のバケットに
PutObject
します。 - レプリケーション先の全バケットにファイルがレプリケーションされたらレプリケーション元のファイルを
DeleteObject
します。 - レプケーション先の全バケットからファイルが削除されたら再度
1
から同じ手順を複数回繰り返します。
結果
- レプリケーションにかかる時間は概ね20数秒でした。
- 平均より時間がかかることが相当数ありました。
PutObject us-east-2 (秒) |
PutObject us-west-1 (秒) |
DeleteObject us-east-2 (秒) |
DeleteObject us-west-1 (秒) |
|
---|---|---|---|---|
1回目 | 22 | 22 | 21 | 21 |
2回目 | 20 | 20 | 22 | 22 |
3回目 | 22 | 22 | 22 | 21 |
4回目 | 22 | 22 | 21 | 31 |
5回目 | 21 | 21 | 22 | 22 |
6回目 | 22 | 22 | 23 | 32 |
7回目 | 21 | 32 | 21 | 21 |
8回目 | 22 | 22 | 22 | 25 |
9回目 | 22 | 21 | 22 | 22 |
10回目 | 21 | 22 | 22 | 22 |
11回目 | 22 | 22 | 22 | 22 |
12回目 | 22 | 23 | 22 | 32 |
13回目 | 22 | 23 | 23 | 24 |
14回目 | 22 | 21 | 21 | 22 |
15回目 | 21 | 22 | 21 | 21 |
16回目 | 21 | 22 | 21 | 22 |
17回目 | 22 | 22 | 22 | 22 |
18回目 | 22 | 23 | 22 | 22 |
所感
- 即時性があるとは言い難く、瞬時の切り替えが要求されるシステムには向かないと思いました。
- 思ったよりも安定しているようですが、時間がかかる時がそれなりに発生するのだなと改めて認識できました。
Discussion