IBM Cloud Docs
コールド・データのアーカイブとアクセス

コールド・データのアーカイブとアクセス

IBM Cloud® Object Storage 「アーカイブ」と「高速アーカイブ」は、めったにアクセスされないデータの 低コスト ・オプションです。 ストレージ層 (Standard、Vault、Cold Vault、および Flex) のいずれかから長期間オフライン・アーカイブに遷移させることによってデータを保管するか、またはオンライン Cold Vault オプションを使用することができます。 新しい「高速アーカイブ」機能を使用すると、2 時間以内に復旧することで、休止データに素早くアクセスできます。

この機能は現在、 Object Storage for Satelliteではサポートされていません。 詳細はこちらをご覧ください。

ArchiveおよびAccelerated Archive Tierの最低保存期間は90日です。 この期間より前に削除されたオブジェクトには、90日間の保管料が発生します。

アーカイブとアクセラレーテッド・アーカイブの両方で、課金対象となるオブジェクトの最小サイズは 128KBs です。 これより小さいオブジェクトもアーカイブできますが、 128KB オブジェクトのサイズレートで課金されます。

Vault または Cold Vault に書き込まれたオブジェクトは、そのオブジェクトが最小期間より前にアーカイブされた場合でも、それらの層の最小ストレージ期間全体に対して課金されます。

IBM Cloud Object Storage に組み込まれている Web コンソール、REST API、およびサード・パーティー・ツールを使用して、オブジェクトをアーカイブできます。

エンドポイントについて詳しくは、エンドポイントおよびストレージ・ロケーションを参照してください。

バケットのアーカイブ・ポリシーの追加または管理

バケットのアーカイブ・ポリシーを作成または変更するときには以下の点を考慮してください。

  • 新規または既存のバケットにアーカイブ・ポリシーをいつでも追加できます。
  • 既存のアーカイブ・ポリシーは変更することも無効にすることもできます。
  • 新しく追加されたか、変更されたアーカイブ・ポリシーは、アップロードされた新規オブジェクトに適用され、既存のオブジェクトには影響しません。

ログイン後にコンソールでバケットを作成し、図 1 に示すフィールドを使用してアーカイブ・ポリシーを構成できます。

アーカイブポリシーの作成
アーカイブポリシーの作成

バケットにアップロードされた新規オブジェクトを即時にアーカイブするには、アーカイブ・ポリシーに 0 日を入力します。

Archive は特定の地域でのみ使用可能です。 詳しくは、統合サービスを参照してください。

アーカイブ済みオブジェクトのリストア

アーカイブされたオブジェクトにアクセスするには、それを元のストレージ層にリストアする必要があります。 オブジェクトをリストアするときに、そのオブジェクトを使用可能な状態にしておきたい日数を指定できます。 指定した期間が終わると、リストアされたコピーは削除されます。

「高速アーカイブ」のリストア・プロセスには最大 2 時間かかり、「アーカイブ」のリストア・プロセスには最大 12 時間かかります。

アーカイブ済みオブジェクトの副状態は以下のとおりです。

  • アーカイブ済み: 「アーカイブ済み」状態のオブジェクトは、バケットのアーカイブ・ポリシーに基づいて、オンラインのストレージ層 (Standard、Vault、Cold Vault、および Flex) からオフラインのアーカイブ層に移動済みです。
  • リストア中: 「リストア中」状態のオブジェクトは、「アーカイブ済み」状態から元のオンラインのストレージ層へのコピーの生成が進行中です。
  • リストア済み: 「リストア済み」状態のオブジェクトは、アーカイブ済みオブジェクトのコピーであり、指定された期間だけ元のオンラインのストレージ層にリストアされたものです。 期間が終了すると、アーカイブ済みオブジェクトは保持されますが、オブジェクトのコピーは削除されます。

AWS CLI を使用したオブジェクトのリストア

以下の例では、分かりやすくするために環境変数を使用しています。 これらは必要な値に設定する必要があります。例えば、 $ENDPOINThttps://s3.us.cloud-object-storage.appdomain.cloudhttps://s3.eu-de.private.cloud-object-storage.appdomain.cloud、またはその他の必要な値に設定します。

  1. オブジェクト状況の確認: aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY ストレージ・クラスは、 ("StorageClass": "GLACIER") として表示されます。
  2. オブジェクトを復元します。 aws --endpoint-url $ENDPOINT s3api restore-object ---bucket $BUCKET --key $KEY --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Bulk"}}'
  3. 状況を確認します。 aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY

制限

アーカイブ・ポリシーは、PUT Bucket Lifecycle Configuration S3 API 操作のサブセットを使用して実装されます。

サポートされる機能は以下のとおりです。

  • オブジェクトがアーカイブ済み状態に遷移する将来の日付または日数を指定する。
  • オブジェクトの有効期限ルールを設定する。

過去の日付を指定するポリシーは、完了までに最大で数日かかる場合があります。

サポートされない機能には以下のものがあります。

  • バケット当たり複数の遷移ルール。
  • 接頭部またはオブジェクト・キーを使用して、アーカイブするオブジェクトをフィルタリングすること。
  • ストレージ・クラス間の層。

クラシック・インフラストラクチャー (非 IAM) ユーザーは、移行ストレージ・クラスを ACCELERATED に設定できません。

REST API および SDK の使用

バケットのライフサイクル構成の作成

PUT 操作のこの実装は、lifecycle 照会パラメーターを使用してバケットのライフサイクル設定を設定します。 この操作では、特定のバケットに対して単一のライフサイクル・ポリシー定義が可能です。 ポリシーは、パラメーター IDStatus、および Transition から構成されるルールとして定義されます。

遷移アクションは、バケットに書き込まれる将来のオブジェクトを、定義された期間が過ぎた後にアーカイブ済み状態にすることができます。 バケットのライフサイクル・ポリシーの変更は、バケットに書き込まれた新規オブジェクトにのみ適用されます

Cloud IAM ユーザーがバケットにライフサイクル・ポリシーを追加するには、最小限 Writer 役割を持っている必要があります。

クラシック・インフラストラクチャーのユーザーがバケットにライフサイクル・ポリシーを追加するには、所有者許可を持っていて、ストレージ・アカウントにバケットを作成できなければなりません。

この操作では、追加の操作固有の照会パラメーターは使用されません。

ヘッダー タイプ 説明
Content-MD5 ストリング 必須: base64 でエンコードされた、ペイロードの 128 ビット MD5 ハッシュ。ペイロードが転送中に変更されなかったことを確認するための保全性検査として使用されます。

要求の本体には、以下のスキーマの XML ブロックが含まれている必要があります。

エレメント タイプ 上位 制約
LifecycleConfiguration コンテナー Rule なし 限度 1。
Rule コンテナー ID, Status, Filter, Transition LifecycleConfiguration 限度 1。
ID ストリング なし Rule (a-zA-Z0-9) と以下の記号で構成されている必要があります。 ! _ . * ' ( ) -
Filter ストリング Prefix Rule Prefix 要素を含んでいる必要があります
Prefix ストリング なし Filter <Prefix/> に設定する必要がある
Transition Container Days, StorageClass Rule 1 つの遷移規則を制限し、合計で最大 1000 個の規則を制限します。
Days 負でない整数 なし Transition 0 以上の値でなければなりません。
Date 日付 なし Transistion ISO 8601 形式である必要があり、将来の日付でなければなりません。
StorageClass ストリング なし Transition GLACIERまたはACCELERATED

構文

PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
<LifecycleConfiguration>
	<Rule>
		<ID>{string}</ID>
		<Status>Enabled</Status>
		<Filter>
			<Prefix/>
		</Filter>
		<Transition>
			<Days>{integer}</Days>
			<StorageClass>{StorageClass}</StorageClass>
		</Transition>
	</Rule>
</LifecycleConfiguration>

サンプル要求

PUT /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<LifecycleConfiguration>
    <Rule>
        <ID>my-archive-policy</ID>
        <Filter>
			<Prefix/>
		</Filter>
        <Status>Enabled</Status>
        <Transition>
            <Days>20</Days>
            <StorageClass>ACCELERATED</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>

サンプル応答

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE', /* required */
  LifecycleConfiguration: {
    Rules: [ /* required */
      {
        Status: 'Enabled', /* required */
        ID: 'STRING_VALUE',
        Filter: '', /* required */
        Prefix: '',
        Transitions: [
          {
            Date: DATE, /* required if Days not specified */
            Days: 0, /* required if Date not specified */
            StorageClass: 'STRING_VALUE' /* required */
          },
        ]
      },
    ]
  }
};

s3.putBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.put_bucket_lifecycle_configuration(
    Bucket='string',
    LifecycleConfiguration={
        'Rules': [
            {
                'ID': 'string',
                'Status': 'Enabled',
                'Filter': '',
                'Prefix': '',
                'Transitions': [
                    {
                        'Date': datetime(2015, 1, 1),
                        'Days': 123,
                        'StorageClass': 'GLACIER'
                    },
                ]
            },
        ]
    }
)
public SetBucketLifecycleConfigurationRequest(String bucketName,
                                              BucketLifecycleConfiguration lifecycleConfiguration)

メソッドの要約

メソッド 説明
getBucketName() ライフサイクル構成が設定されるバケットの名前を取得します。
getLifecycleConfiguration() 指定されたバケットの新しいライフサイクル構成を取得します。
setBucketName(String bucketName) ライフサイクル構成が設定されるバケットの名前を設定します。
withBucketName(String bucketName) ライフサイクル構成が設定されるバケットの名前を設定し、追加のメソッド呼び出しをチェーニングできるようにこのオブジェクトを返します。

バケットのライフサイクル構成の取得

GET 操作のこの実装は、lifecycle 照会パラメーターを使用してバケットのライフサイクル設定を取得します。

Cloud IAM ユーザーがバケットのライフサイクルを取得するには、最小限 Reader 役割を持っている必要があります。

クラシック・インフラストラクチャーのユーザーがバケットのライフサイクル・ポリシーを取得するには、最小限、バケットに対する Read 許可を持っている必要があります。

この操作では、追加の操作固有のヘッダー、照会パラメーター、およびペイロードは使用されません。

構文

GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style

サンプル要求

GET /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string

サンプル応答

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
<LifecycleConfiguration>
    <Rule>
        <ID>my-archive-policy</ID>
        <Filter />
        <Status>Enabled</Status>
        <Transition>
            <Days>20</Days>
            <StorageClass>GLACIER</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>
var params = {
  Bucket: 'STRING_VALUE' /* required */
};
s3.getBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.get_bucket_lifecycle_configuration(Bucket='string')
public GetBucketLifecycleConfigurationRequest(String bucketName)

バケットのライフサイクル構成の削除

DELETE 操作のこの実装は、lifecycle 照会パラメーターを使用してバケットのすべてのライフサイクル設定を削除します。 ルールで定義された遷移は、新規オブジェクトに対しては行われなくなります。

注: 既存の遷移ルールは、ルールが削除される前に既にバケットに書き込まれたオブジェクトのために保持されます。

Cloud IAM ユーザーがバケットからライフサイクル・ポリシーを削除するには、最小限 Writer 役割を持っている必要があります。

クラシック・インフラストラクチャーのユーザーがバケットからライフサイクル・ポリシーを削除するには、バケットに対する「Owner」許可を持っている必要があります。

この操作では、追加の操作固有のヘッダー、照会パラメーター、およびペイロードは使用されません。

構文

DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style

サンプル要求

DELETE /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 18:50:00 GMT
Authorization: authorization string

サンプル応答

HTTP/1.1 204 No Content
Date: Wed, 7 Feb 2018 18:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE' /* required */
};
s3.deleteBucketLifecycle(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.delete_bucket_lifecycle(Bucket='string')
public DeleteBucketLifecycleConfigurationRequest(String bucketName)

アーカイブ済みオブジェクトの一時的なリストア

POST 操作のこの実装は、restore 照会パラメーターを使用して、アーカイブ済みオブジェクトの一時的なリストアを要求します。 ユーザーは、まずアーカイブ済みオブジェクトをリストアした後で、オブジェクトをダウンロードまたは変更する必要があります。 ユーザーは、オブジェクトをリストアするときに、オブジェクトの一時コピーが削除されるまでの期間を指定する必要があります。 オブジェクトは、バケットのストレージ・クラスを保持します。

リストアされたコピーがアクセス可能になるまでに、最大 12 時間の遅延が生じることがあります。 リストアされたコピーが使用可能かどうかを HEAD 要求で検査できます。

オブジェクトを永続的にリストアするには、ユーザーは、リストアされるオブジェクトを、アクティブなライフサイクル構成がないバケットにコピーする必要があります。

Cloud IAM ユーザーがオブジェクトをリストアするには、最小限 Writer 役割を持っている必要があります。

クラシック・インフラストラクチャーのユーザーがオブジェクトをリストアするには、最小限、バケットに対する Write 許可と、オブジェクトに対する Read 許可を持っている必要があります。

この操作では、追加の操作固有の照会パラメーターは使用されません。

ヘッダー タイプ 説明
Content-MD5 ストリング 必須: base64 でエンコードされた、ペイロードの 128 ビット MD5 ハッシュ。ペイロードが転送中に変更されなかったことを確認するための保全性検査として使用されます。

要求の本体には、以下のスキーマの XML ブロックが含まれている必要があります。

エレメント タイプ 上位 制約
RestoreRequest コンテナー Days, GlacierJobParameters なし なし
Days 整数 なし RestoreRequest 一時的にリストアされたオブジェクトの存続期間を指定します。 オブジェクトの復元されたコピーを存在させることができる最小日数は 1 です。 復元期間が経過すると, オブジェクトの一時コピーが除去されます。
GlacierJobParameters ストリング Tier RestoreRequest なし
Tier ストリング なし GlacierJobParameters オプション。ブランクのままにすると、デフォルトで、オブジェクトが書き込まれたときに設定されていたポリシーの Storage Tier に関連付けられている値になります。 この値をブランクのままにしない場合、バケットのライフサイクル・ポリシーの遷移ストレージ・クラスが GLACIER に設定されている場合は Bulk に設定する 必要 があり、遷移ストレージ・クラスが ACCELERATED に設定されている場合は Accelerated に設定する 必要 があります。

正常な応答では、オブジェクトがアーカイブ済み状態の場合は 202 が返され、オブジェクトが既にリストア済み状態の場合は 200 が返されます。 既にリストア済み状態のオブジェクトをリストアする新しい要求が受信されると、リストアされたオブジェクトの有効期限は Days 要素によって更新されます。

構文

POST https://{endpoint}/{bucket}/{object}?restore # path style
POST https://{bucket}.{endpoint}/{object}?restore # virtual host style
<RestoreRequest>
	<Days>{integer}</Days>
	<GlacierJobParameters>
		<Tier>Bulk</Tier>
	</GlacierJobParameters>
</RestoreRequest>

サンプル要求

POST /images/backup?restore HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 19:50:00 GMT
Authorization: {authorization string}
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<RestoreRequest>
	<Days>3</Days>
	<GlacierJobParameters>
		<Tier>Bulk</Tier>
	</GlacierJobParameters>
</RestoreRequest>

サンプル応答

HTTP/1.1 202 Accepted
Date: Wed, 7 Feb 2018 19:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE', /* required */
  Key: 'STRING_VALUE', /* required */
  ContentMD5: 'STRING_VALUE', /* required */
  RestoreRequest: {
   Days: 1, /* days until copy expires */
   GlacierJobParameters: {
     Tier: 'STRING_VALUE' /* required */
   },
  }
 };
 s3.restoreObject(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
});
response = client.restore_object(
    Bucket='string',
    Key='string',
    RestoreRequest={
        'Days': 123,
        'GlacierJobParameters': {
            'Tier': 'string'
        },
    }
)
public RestoreObjectRequest(String bucketName,
                            String key,
                            int expirationInDays)

メソッドの要約

メソッド 説明
clone() ハンドラー・コンテキストを除くすべてのフィールドについて、このオブジェクトのシャロー・クローンを作成します。
getBucketName() リストアするオブジェクトへの参照を含んでいるバケット名を返します。
getExpirationInDays() オブジェクトの作成から有効期限切れまでの期間を日数で返します。
setExpirationInDays(int expirationInDays) オブジェクトがバケットにアップロードされてから有効期限が切れるまでの期間を日数で設定します。

オブジェクトのヘッダーの取得

オブジェクトへのパスが指定された HEAD は、そのオブジェクトのヘッダーを取得します。 この操作では操作固有の照会パラメーターおよびペイロード要素は使用されません。

構文

HEAD https://{endpoint}/{bucket-name}/{object-name} # path style
HEAD https://{bucket-name}.{endpoint}/{object-name} # virtual host style

アーカイブ・オブジェクトのレスポンス・ヘッダ

ヘッダー タイプ 説明
x-amz-restore ストリング オブジェクトがリストア済みの場合またはリストアが進行中の場合に含まれます。 オブジェクトがリストア済みの場合、一時コピーの有効期限日付も返されます。
x-amz-storage-class ストリング アーカイブまたは一時的に復元された場合は、 GLACIER または ACCELERATED を返す。
x-ibm-archive-transition-time 日付 アーカイブ層へのオブジェクトの遷移がスケジュールされている日時を返します。
x-ibm-transition ストリング オブジェクトに遷移メタデータがある場合に含まれ、遷移の層および元の時刻を返します。
x-ibm-restored-copy-storage-class ストリング オブジェクトが RestoreInProgress 状態または Restored 状態の場合に含まれ、バケットのストレージ・クラスを返します。

サンプル要求

HEAD /images/backup HTTP/1.1
Authorization: {authorization-string}
x-amz-date: 20160825T183244Z
Host: s3.us.cloud-object-storage.appdomain.cloud

サンプル応答

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 19:51:00 GMT
X-Clv-Request-Id: da214d69-1999-4461-a130-81ba33c484a6
Accept-Ranges: bytes
Server: 3.x
X-Clv-S3-Version: 2.5
ETag: "37d4c94839ee181a2224d6242176c4b5"
Content-Type: text/plain; charset=UTF-8
Last-Modified: Thu, 25 Aug 2017 17:49:06 GMT
Content-Length: 11
x-ibm-transition: transition="ARCHIVE", date="Mon, 03 Dec 2018 22:28:38 GMT"
x-amz-restore: ongoing-request="false", expiry-date="Thu, 06 Dec 2018 18:28:38 GMT"
x-amz-storage-class: "GLACIER"
x-ibm-restored-copy-storage-class: "Standard"
response = client.head_object(
    Bucket='string',
    Key='string'
)
var params = {
  Bucket: 'STRING_VALUE', /* required */
  Key: 'STRING_VALUE', /* required */
};
s3.headObject(params, function(err,data) {
  if (err) console.log(err, err.stack); // an error occurred
  else
    console.log(data);           // successful response
});
public ObjectMetadata()

メソッドの要約

メソッド 説明
clone() この ObjectMetadata のクローンを返します。
getRestoreExpirationTime() アーカイブから一時的にリストアされたオブジェクトの有効期限が切れ、アクセスするには再リストアが必要になる時刻を返します。
getStorageClass() バケットの元のストレージ・クラスを返します。
getIBMTransition() 遷移ストレージ・クラスおよび遷移の時刻を返します。

次のステップ

コールド・ストレージに加え、 IBM Cloud は現在、さまざまなユーザー・ニーズに対応するため、いくつかの追加オブジェクト・ストレージ・クラスを提供しており、そのすべてにウェブベースのポータルやRESTful APIを通じてアクセスできる。 すべての ストレージ・クラス について詳しくは、 IBM Cloud Object Storageを参照してください。