S3 バージョニングの仕組み
S3 バージョニングを使用すると、オブジェクトの複数のバージョンを 1 つのバケットに保持し、誤って削除または上書きされたオブジェクトを復元できます。例えば、S3 バージョニングをバケットに適用すると、次の変更が行われます。
-
オブジェクトを削除した場合、Amazon S3 では、オブジェクトを完全に削除する代わりに削除マーカーを挿入し、それが最新のオブジェクトバージョンになります。これにより、以前のバージョンを復元できます。詳細については、「バージョニングが有効なバケットからのオブジェクトバージョンの削除」を参照してください。
-
オブジェクトを上書きすると、Amazon S3 のバケットに新しいオブジェクトバージョンが追加されます。以前のバージョンはバケットに残りますが、最新のバージョンではなくなります。以前のバージョンは復元することができます。
注記
通常の Amazon S3 料金は、保存または移行されるオブジェクトのバージョンごとに適用されます。オブジェクトの各バージョンはオブジェクト全体であり、以前のバージョンの差分ではありません。したがって、オブジェクトの 3 つのバージョンを保存している場合、3 つのオブジェクトに対して課金されます。
作成する各 S3 バケットには、それに関連付けられたバージョニングのサブリソースがあります。(詳しくは、バケット設定オプション を参照してください)。デフォルトでは、バケットのバージョニングは無効で、バージョニングのサブリソースには、以下のとおり、空のバージョニング設定が保存されます。
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>
バージョニングを有効にするには、Enabled
ステータスを含むバージョニング設定を使用して、Amazon S3 にリクエストを送信します。
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>
バージョニングを停止するには、ステータス値を Suspended
に設定します。
注記
バケットで初めてバージョニングを有効にした場合、変更が完全に反映されるまでに少し時間がかかることがあります。バケットのオブジェクトへの書き込みオペレーション (PUT
または DELETE
) は、バージョニングを有効にして 15 分待ってから発行することをお勧めします。
バケット所有者とすべての承認済み AWS Identity and Access Management (IAM) ユーザーは、バージョニングを有効にすることができます。バケット所有者はバケットを作成する AWS アカウント です。権限の詳細については、Amazon S3 用 Identity and Access Management をご参照ください。
AWS Management Console、AWS Command Line Interface (AWS CLI)、または REST API を使用した S3 バージョニングの有効化と無効化の詳細については、「バケットでのバージョニングの有効化」を参照してください。
バージョン ID
バケットのバージョニングを有効にすると、Amazon S3 は、保存されるオブジェクトに対して一意のバージョン ID を自動的に生成します。例えば、1 つのバケット内に、photo.gif
(バージョン 111111) と photo.gif
(バージョン 121212) のように、同じキー (オブジェクト名) でもバージョン ID が異なる 2 つのオブジェクトを保持することができます。
S3 バージョニングが有効になっているかどうかにかかわらず、各オブジェクトにはバージョン ID があります。S3 バージョニングが有効にされていない場合、Amazon S3 はバージョン ID の値を null
に設定します。S3 バージョニングを有効にした場合、Amazon S3 がオブジェクトにバージョン ID 値を割り当てます。この値により、そのオブジェクトが同じキーの他のバージョンと区別されます。
既存のバケットで S3 バージョニングを有効にしても、バケットにすでに保存されているオブジェクトは変更されません。バージョン ID (null
)、コンテンツ、アクセス権限が変更されることはありません。S3 バージョニングを有効にすると、バケットに追加された各オブジェクトにバージョン ID が与えられ、同じキーの他のバージョンと区別されます。
バージョン ID を生成できるのは Amazon S3 のみです。また、編集はできません。バージョン ID は、Unicode、UTF-8 エンコード、URL 対応の不透明な文字列で、長さは 1,024 バイト以下です。次に例を示します。
3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
注記
簡素化のため、本トピックの他の例ではさらに短い ID を使用します。
バージョニングのワークフロー
バージョニングが有効になっているバケットにオブジェクトを PUT
しても、以前のバージョンは上書きされません。次の図に示すように、既に同じ名前のオブジェクトが入っているバケットに新しいバージョンの photo.gif
が PUT
された場合、以下の挙動が生じます。
-
元のオブジェクト (ID = 111111) はバケットに残ります。
-
Amazon S3 は新しいバージョン ID (121212) を生成し、この新しいバージョンのオブジェクトをバケットに追加します。
この機能を使用すると、オブジェクトが誤って上書きまたは削除された場合に、オブジェクトの以前のバージョンを取得できます。
オブジェクトの DELETE
を実行すると、次の図に示すように、バケット内のすべてのバージョンが残り、Amazon S3 によって削除マーカーが挿入されます。
削除マーカーはオブジェクトの最新バージョンになります。デフォルトで、GET
リクエストは最後に保存されたバージョンを取得します。最新バージョンが削除マーカーである場合に GET Object
リクエストを実行すると、次の図に示すように 404 Not Found
エラーが返されます。
ただし、バージョン ID を指定すれば、オブジェクトの以前のバージョンを GET
することができます。次の図では、特定のオブジェクトバージョン 111111 の GET
を実行します。これはオブジェクトの最新バージョンではありませんが、Amazon S3 はこのバージョンを返します。
詳細については、「バージョニングが有効なバケットからのオブジェクトバージョンの取得」を参照してください。
オブジェクトを完全に削除するには、削除するバージョンを指定します。Amazon S3 バケット所有者または権限のある IAM ユーザーのみが、特定のバージョンを永久に削除することができます。DELETE
オペレーションで versionId
を指定すると、そのオブジェクトバージョンは完全に削除され、Amazon S3 による削除マーカーの挿入も行われません。
多要素認証 (MFA) Delete に対応するようにバケットを設定すると、セキュリティを強化できます。多要素認証 (MFA) Delete を有効にすると、バケット所有者は特定のバージョンを削除したりバケットのバージョニング状態を変更したりするために、すべてのリクエストに 2 つの認証形態を含める必要があります。詳細については、「MFA 削除の設定」を参照してください。
オブジェクトの新しいバージョンが作成されるのはどのような場合か
オブジェクトの新しいバージョンは、新しいオブジェクトを PUT
した場合にのみ作成されます。CopyObject
のような特定のアクションは、PUT
オペレーションを実装することにより機能することに注意してください。
現在のオブジェクトを変更するアクションを実行しても、新しいオブジェクトを PUT
しないため、新しいバージョンは作成されません。これには、オブジェクトのタグの変更などのアクションが含まれます。
重要
S3 バージョニングを有効にしたバケットへの Amazon S3 PUT
または DELETE
オブジェクトリクエストに対して受信される HTTP 503 (Service Unavailable) レスポンスの数が著しく増加した場合、バケットに数百万のバージョンが存在するオブジェクトがある可能性があります。詳細については、バージョニングのトラブルシューティングの「S3 バージョニングの使用」セクションを参照してください。