保存及存取原始資料

IBM Cloud® Object Storage "Archive" 和 "Accelerated Archive" 是很少存取之資料的 低成本 選項。 您可以藉由將資料從所有儲存空間層級(Standard、Vault、Cold Vault 及 Flex)轉移至長期離線保存檔來儲存資料,或使用線上 Cold Vault 選項。 使用新的「加速保存」功能,您可以快速存取休眠資料,還原可在不到兩小時內進行。

此特性目前在 Object Storage for Satellite中不受支援。 進一步瞭解。

歸檔和加速歸檔層級的最短儲存期限為 90 天。 在此之前刪除的物件仍會產生 90 天的儲存費用。

存檔和加速存檔的最小計費物件大小均為 128KBs。 小於此尺寸的物件仍可存檔,但將按 128KB 物件尺寸費率計費。

寫入 Vault 或 Cold Vault 的物件將按這些層級的完整最短儲存期限計費,即使物件在最短期限前已歸檔。

您可以使用 Web 主控台、REST API 以及與 IBM Cloud Object Storage 整合的協力廠商工具來保存物件。

如需端點的相關資訊,請參閱端點及儲存空間位置

新增或管理儲存區的保存原則

建立或修改儲存區的保存原則時,請考量下列事項:

  • 保存原則可以隨時新增至新的或現有儲存區。
  • 可以修改或停用現有的保存原則。
  • 剛新增或修改的保存原則適用於已上傳的新物件,且不會影響現有物件。

登入主控台後,在主控台中建立一個儲存桶,並設定您的歸檔政策。

若要立即保存已上傳至儲存區的新物件,請在保存原則上輸入 0 天。

保存檔僅適用於特定地區。 如需詳細資料,請參閱整合式服務

還原保存物件

為了能夠存取保存物件,您必須將它還原至原始儲存空間層級。 還原物件時,您可以指定希望物件可供使用的天數。 在指定的期間結束時,即會刪除還原的副本。

「加速保存」的還原程序最多需要 2 小時,而「保存」的還原程序最多需要 12 小時。

保存物件子狀態如下:

  • 已保存:根據儲存區上的保存原則,已將處於已保存狀態的物件從其線上儲存空間層級(Standard、Vault、Cold Vault 及 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 字串 base64 編碼 128 位元 MD5 有效負載的哈希值,用作完整性檢查,以確保有效負載在傳輸過程中沒有被更改。
x-amz-checksum-crc32 字串 這個標頭是 Base64 編碼、32 位元 CRC32 物件的校驗和。
x-amz-checksum-crc32c 字串 這個標頭是 Base64 編碼、32 位元 CRC32C 物件的校驗和。
x-amz-checksum-crc64nvme 字串 這個標頭是 Base64 編碼、64 位元 CRC64NVME 物件的校驗和。 CRC64NVME 的校驗和永遠是完整物件的校驗和。
x-amz-checksum-sha1 字串 這個標頭是 Base64 編碼、160 位元的 SHA1 物件摘要。
x-amz-checksum-sha256 字串 這個標頭是 Base64 編碼、256 位元 SHA256 的物件摘要。
x-amz-sdk-checksum-algorithm 字串 表示使用 SDK 時,用來為物件建立校驗和的演算法。

Content-MD5 標頭或 checksum 標頭 (包括 x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1, 或 x-amz-checksum-sha256) 必須作為有效負載的完整性檢查。

要求的內文必須包含具有下列綱目的 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 字串 base64 編碼 128 位元 MD5 有效負載的哈希值,用作完整性檢查,以確保有效負載在傳輸過程中沒有被更改。
x-amz-checksum-crc32 字串 這個標頭是 Base64 編碼、32 位元 CRC32 物件的校驗和。
x-amz-checksum-crc32c 字串 這個標頭是 Base64 編碼、32 位元 CRC32C 物件的校驗和。
x-amz-checksum-crc64nvme 字串 這個標頭是 Base64 編碼、64 位元 CRC64NVME 物件的校驗和。 CRC64NVME 的校驗和永遠是完整物件的校驗和。
x-amz-checksum-sha1 字串 這個標頭是 Base64 編碼、160 位元的 SHA1 物件摘要。
x-amz-checksum-sha256 字串 這個標頭是 Base64 編碼、256 位元 SHA256 的物件摘要。
x-amz-sdk-checksum-algorithm 字串 表示使用 SDK 時,用來為物件建立校驗和的演算法。

要求的內文必須包含具有下列綱目的 XML 區塊:

元素 類型 子項 上代 限制
RestoreRequest 容器 Days, GlacierJobParameters
Days 整數 RestoreRequest 指定暫時還原物件的生命期限。 物件的已還原副本可以存在的最少天數為 1。 在還原期間已過之後,將會移除物件的暫時副本。
GlacierJobParameters 字串 Tier RestoreRequest
Tier 字串 GlacierJobParameters 選用,如果保留空白,則會預設為與寫入物件時就地的原則儲存體層級相關聯的值。 如果此值不是保留空白,則當儲存區生命週期原則的轉移儲存類別設為 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 字串 如果已歸檔或暫時還原,則返回 GLACIERACCELERATED
x-ibm-archive-transition-time 日期 傳回物件排定要轉移至保存層級的日期和時間。
x-ibm-transition 字串 如果物件具有轉移 meta 資料,並傳回轉移的層級及原始時間,則會包含此項目。
x-ibm-restored-copy-storage-class 字串 如果物件處於 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() 傳回已從 ARCHIVE 暫時還原的物件將到期,而且需要重新還原才能存取的時間。
getStorageClass() 傳回儲存區的原始儲存空間類別。
getIBMTransition() 傳回轉移儲存空間類別及轉移時間。

後續步驟

除了冷儲存之外,IBM Cloud 目前還針對不同的使用者需求提供數種額外的物件儲存類別,所有這些類別都可透過網頁式入口網站和 RESTful API 進行存取。 進一步瞭解 IBM Cloud Object Storage中提供的所有 儲存類別