IBM Cloud Docs
归档和访问冷数据

归档和访问冷数据

IBM Cloud® Object Storage“归档”和“加速归档”是 低成本 选项,用于很少访问的数据。 您可以通过将任何存储层(标准、保险库、冷保险库和 Flex)转换为长期脱机归档来存储数据,或者使用联机“冷保险库”选项。 借助新的“加速归档”功能,您可以快速访问休眠数据,并在不到两个小时的时间内进行复原。

此功能当前在 Object Storage 中不支持 Satellite。 了解更多信息。

存档和加速存档层的最低存储期限为 90 天。 在此之前删除的对象仍需支付 90 天的存储费用。

存档和加速存档的最小计费对象大小均为 128KBs。 小于此尺寸的对象仍可存档,但将按 128KB 对象尺寸费率计费。

写入 Vault 或 Cold Vault 的对象将按这些层级的全部最短存储期限计费,即使对象在最短期限之前已存档。

您可以使用与 IBM Cloud Object Storage 集成的 Web 控制台、REST API 和第三方工具来归档对象。

有关端点的更多信息,请参阅端点和存储位置

添加或管理存储区上的归档策略

创建或修改存储区的归档策略时,请考虑以下内容:

  • 可以随时将归档策略添加到新存储区或现有存储区。
  • 可以修改或禁用现有归档策略。
  • 新添加或修改的归档策略将应用于上传的新对象,但不会影响现有对象。

登录后在控制台中创建存储区,您可以使用图 1 中显示的字段来配置归档策略。

创建存档策略
创建存档策略 "

要立即归档上传到存储区的新对象,请在归档策略上输入 0 天。

归档仅在特定区域中可用。 有关更多详细信息,请参阅集成服务

复原归档对象

要访问归档对象,必须将其复原到原始存储层。 复原对象时,可以指定希望对象可用的天数。 在指定时间段结束时,将删除复原的副本。

“加速归档”的复原过程最多需要 2 个小时,而“归档”的复原过程最多需要 12 个小时。

归档对象子状态包括:

  • 已存档:处于“已存档”状态的对象是根据存储区上的归档策略,已从其联机存储层(标准、保险库、冷保险库和 Flex)移至脱机归档层的对象。
  • 正在复原:处于“正在复原”状态的对象是正在将“已归档”状态的副本生成到其原始联机存储层的对象。
  • 已复原:处于“已复原”状态的对象是已复原到其原始联机存储层的归档对象的副本,可使用指定的时间长度。 在该时间段结束时,将删除该对象副本,但仍保留相应的归档对象。

使用 AWS CLI 复原对象

以下示例使用环境变量以实现清晰度。 这些值必须设置为所需值,例如,$ENDPOINT 将设置为 https://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 查询参数来设置存储区的生命周期设置。 此操作支持对给定存储区定义单个生命周期策略。 策略定义为包含以下参数的一个规则:IDStatusTransition

转换操作支持未来写入存储区的对象在定义的时间段后转换为“已归档”状态。 对存储区的生命周期策略的更改仅应用于写入该存储区的新对象

Cloud IAM 用户必须至少具有Writer角色,才能向存储区添加生命周期策略。

经典基础架构用户必须具有“所有者”许可权,并且能够在存储帐户中创建存储区,才能向存储区添加生命周期策略。

此操作不会使用特定于操作的其他查询参数。

类型 描述
Content-MD5 string 必需:有效内容的 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 GLACIERACCELERATED

语法

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 string 必需:有效内容的 Base64 编码的 128 位 MD5 散列,用作完整性检查,可确保有效内容在传输中未变更。

请求主体必须包含具有以下模式的 XML 块:

元素 类型 子代 祖代 约束
RestoreRequest 容器 Days, GlacierJobParameters
Days 整数 RestoreRequest 指定临时复原对象的生命周期。 对象的已复原副本可以存在的最小天数为 1。 在经过复原周期之后,将除去对象的临时副本。
GlacierJobParameters 字符串 Tier RestoreRequest
Tier 字符串 GlacierJobParameters 可选,如果留空,那么将缺省为与写入对象时的策略存储层相关联的值。 如果此值不留空,那么 必须 将其设置为 Bulk (如果存储区生命周期策略的转换存储类设置为 GLACIER),必须 将其设置为 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 string 对象已复原或正在进行复原时,会包含此头。 如果对象已复原,那么还会返回临时副本的到期日期。
x-amz-storage-class string 如果已存档或临时恢复,则返回 GLACIERACCELERATED
x-ibm-archive-transition-time 日期 返回安排对象以转换到归档层的日期和时间。
x-ibm-transition string 对象具有转换元数据时,会包含此头,并返回转换的层和原始转换时间。
x-ibm-restored-copy-storage-class string 对象处于 RestoreInProgressRestored 状态时,会包含此头,并返回存储区的存储类。

样本请求

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上提供的所有 存储类 的更多信息。