使用過期規則刪除過期資料

有效期限規則會在定義的期間(從物件建立日期開始)之後刪除物件。

您可以使用與 IBM Cloud Object Storage 整合的 Web 主控台、REST API 及協力廠商工具,來設定物件的生命週期。

  • 有效期限規則可以新增至新的或現有儲存區。

  • 可以修改或停用現有的有效期限規則。

  • 新增或修改的「有效期限」規則會套用至儲存區中的所有新的及現有物件。

  • 新增或修改生命週期原則需要 Writer 角色。

  • 每個儲存區最多可以定義 1000 個生命週期規則(保存 + 有效期限)。

  • 容許最多 24 小時,讓「有效期限」規則中的所有變更生效。

  • 每個有效期限規則的範圍的限制方式是定義選用的字首過濾器,只套用至名稱符合字首的物件子集。

  • 沒有字首過濾器的有效期限規則將套用至儲存區中的所有物件。

  • 物件的有效期限(以天數為單位指定)是從物件建立時間開始計算,四捨五入到隔天的午夜 UTC。 例如,如果儲存區的有效期限規則讓一組物件在建立日期後的 10 天到期,則在 2019 年 4 月 15 日 5:10 UTC 建立的物件將在 2019 年 4 月 26 日 00:00 UTC 到期。

  • 每個儲存區的有效期限規則每 24 小時評估一次。 會將符合有效期限的任何物件(以物件的到期日為基礎)置入佇列以進行刪除。 刪除過期物件會從第二天開始,而且通常需要不到 24 小時。 刪除物件之後,就不會針對該物件的任何關聯儲存空間向您收取任何費用。

  • 已啟用版本化或已暫停的儲存區 中,一般 規則會保留現行版本,並建立刪除標記,而不是永久刪除資料。 若要清理啟用版本控制的儲存桶,您可以設定兩個過期規則。 新增第一條規則,為目前版本和非目前版本設定過期時間。 由於版本控制已啟用,因此此規則會為版本建立刪除標記。 新增第二條規則,選擇「清理過期的物件刪除標記」以刪除資料。 如果版本管理已暫停,您將無法在過期規則設定頁面中看到清理過期刪除標記的選項。 因此,首先需要啟用版本控制。 然後新增第一條規則,為目前版本和非目前版本設定到期時間。 由於版本控制已啟用,因此此規則會為版本建立刪除標記。 新增第二條規則,選擇「清理過期的物件刪除標記」以刪除資料。

  • 非現行版本的有效期限由其後置作業的前次修改時間 (四捨五入至世界標準時間午夜的第二天) 決定。

  • 如果從物件手動刪除版本,而物件的版本預期在第二天到期,則可能不會發生這些到期。

指定過去日期的原則可能需要幾天才能完成。

在使用 已版本化儲存區上的有效期限規則 時,如果不小心,可能會永久遺失資料。 在 版本化已暫停 且過期物件呈現空值版本的情況下,資料可能會永久遺失。 在此情況下,會改寫 null 刪除標記,永久地刪除物件。

除非不再強制執行保留原則,否則受限於儲存區 Immutable Object Storage 保留原則的物件將會延遲所有有效期限動作。

有效期限規則的屬性

每個有效期限規則都有下列屬性:

ID

在儲存區的生命週期配置內,規則的 ID 必須是唯一的。

有效期限

有效期限區塊包含控管自動刪除物件的詳細資料。 這可能是未來的特定日期,或寫入新物件之後的一段時間。

NoncurrentVersionExpiration

在此之後自動刪除物件非現行版本的天數。

字首

此選用字串將與儲存區中物件名稱的字首相符。 具有字首的規則只會套用至相符的物件。 您可以針對相同儲存區內的不同字首,對不同的到期動作使用多個規則。 例如,在相同的生命週期配置內,一個規則可以在 30 天之後刪除開頭為 logs/ 的所有物件,而第二個規則可以在 365 天之後刪除開頭為 video/ 的物件。

標籤

過濾器選項,允許過期規則套用到包含符合標籤的物件。 標籤篩選器是以指定關鍵字串和值字串的容器形式提供。 關鍵字串必須少於 128 個字元。 值字串必須少於 256 個字元。

ObjectSizeLessThan

過濾器,可將生命週期動作限制為小於特定大小的物件。 這必須是大於 0 的整數值。

ObjectSizeGreaterThan

過濾器,可將生命週期動作限制為大於特定大小的物件。 這必須是大於 0 的整數值。

使用 AND 參數將多重篩選條件套用至應符合所有指定條件的物件。

狀態

可以啟用或停用規則。 只有在啟用時,規則才會作用。

生命週期配置範例

此配置讓所有新物件在 30 天後到期。

<LifecycleConfiguration>
	<Rule>
		<ID>delete-after-30-days</ID>
		<Filter />
		<Status>Enabled</Status>
		<Expiration>
			<Days>30</Days>
		</Expiration>
	</Rule>
</LifecycleConfiguration>

此配置會在 2020 年 6 月 1 日刪除字首為 foo/ 的所有物件。

<LifecycleConfiguration>
	<Rule>
        <ID>delete-on-a-date</ID>
    <Filter>
        <Prefix>foo/</Prefix>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Date>2020-06-01T00:00:00.000Z</Date>
        </Expiration>
	</Rule>
</LifecycleConfiguration>

此配置會在 100 天之後使任何非現行版本的物件到期。

<LifecycleConfiguration>
  <Rule>
    <ID>DeleteAfterBecomingNonCurrent</ID>
    <Filter/>
    <Status>Enabled</Status>
    <NoncurrentVersionExpiration>
      <NoncurrentDays>100</NoncurrentDays>
    </NoncurrentVersionExpiration>
  </Rule>
</LifecycleConfiguration>

您也可以結合轉移及有效期限規則。 此配置會在建立之後的 90 天保存所有物件,並在 180 天後刪除字首為 foo/ 的所有物件。

<LifecycleConfiguration>
    <Rule>
        <ID>archive-first</ID>
        <Filter />
        <Status>Enabled</Status>
    <Transition>
        <Days>90</Days>
        <StorageClass>GLACIER</StorageClass>
    </Transition>
    </Rule>
    <Rule>
        <ID>then-delete</ID>
    <Filter>
        <Prefix>foo/</Prefix>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Days>180</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

此設定會使標籤關鍵值為 environment:production 的任何物件過期。

<LifecycleConfiguration>
    <Rule>
        <ID>DeleteWithTagsFilter</ID>
    <Filter>
        <TagSet>
            <Tag>
                <Key>environment</Key>
                <Value>production</Value>
            </Tag>
        </TagSet>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Days>180</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

此設定會使任何物件大小小於 2kb 的物件過期。

<LifecycleConfiguration>
    <Rule>
        <ID>DeleteWithObjectSizeLessThanFilter</ID>
    <Filter>
        <ObjectSizeLessThan>2048</ObjectSizeLessThan>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Days>180</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

此設定會使任何物件大小大於 1kb 的物件過期。

<LifecycleConfiguration>
    <Rule>
        <ID>DeleteWithObjectSizeGreaterThanFilter</ID>
    <Filter>
        <ObjectSizeGreaterThan>1024</ObjectSizeGreaterThan>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Days>180</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

此設定會使任何大於 10mb 且標籤關鍵值等於 environnment:production 且標籤關鍵值等於 environment:development 的物件過期。

<LifecycleConfiguration>
    <Rule>
        <ID>DeleteWithMultipleFilter</ID>
    <Filter>
        <And>
        <TagSet>
            <Tag>
                <Key>environment</Key>
                <Value>production</Value>
            </Tag>
            <Tag>
                <Key>environment</Key>
                <Value>development</Value>
            </Tag>
        </TagSet>
        <ObjectSizeGreaterThan>10485760</ObjectSizeGreaterThan>
        </And>
    </Filter>
        <Status>Enabled</Status>
        <Expiration>
            <Days>180</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

使用主控台

建立新的儲存區時,請檢查新增有效期限規則方框。 接下來,按一下新增規則,以建立新的有效期限規則。 在儲存區建立期間,您可以新增最多五個規則,且之後可以新增額外的規則。

對於現有的水桶,從導覽功能表中選擇「組態」,然後按一下「過期規則」區段下的「新增規則」。

使用 API 及 SDK

您可以使用 REST API 或 IBM COS SDK,以程式設計方式來管理有效期限規則。 在環境定義切換器中選取種類,以選取範例的格式。

將有效期限規則新增至儲存區的生命週期配置

REST API 參考資料

PUT 作業的這項實作會使用 lifecycle 查詢參數來設定儲存區的生命週期設定。 此作業容許儲存區的單一生命週期原則定義。 該原則定義為包含下列參數的一組規則:IDStatusFilterExpiration

雲端 IAM 使用者必須擁有 Writer 角色,才能從水桶新增生命週期政策。

Classic Infrastructure 使用者必須在儲存桶上擁有 Owner 權限,才能從儲存桶新增生命週期政策。

選用標頭
標頭 類型 說明
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, Expiration LifecycleConfiguration 限制 1000。
ID 字串 Rule 必須由 (a-zA-Z0-9) 和下列符號組成: ! _ . * ' ( ) -
Filter 字串 Prefix Rule 必須包含 Prefix 元素
Expiration Container DaysDate Rule 限制 1。
Days 非負整數 Expiration 必須是大於 0 的值。
Date 日期 Expiration 必須為「ISO 8601 格式」。
NoncurrentVersionExpiration 日期 NoncurrentDays Rule 限制 1。
NoncurrentDays 非負整數 NoncurrentVersionExpiration 必須是大於 0 的值。
ObjectSizeGreaterThan 非負整數 Filter,And 必須是大於 0 的值。
ObjectSizeLessThan 非負整數 Filter,And 必須是大於 0 的值。
Prefix 字串 Filter,And 必須搭配兩個或以上的濾網使用。
And 容器 Prefix,ObjectSizeGreaterThan, ObjectSizeLessThan, Tag Filter 可包含一個或多個 Tag 元素。
Tag 容器 Key, Value Filter,And 必須定義 Key 和 Filter。
Key 字串 Tag 字串必須少於 128 個字元。
Value 字串 Tag 字串必須少於 256 個字元。

要求的內文必須包含具有表格中所處理綱目的 XML 區塊(請參閱範例 1)。

<LifecycleConfiguration>
	<Rule>
		<ID>id1</ID>
		<Filter />
		<Status>Enabled</Status>
		<Expiration>
			<Days>60</Days>
		</Expiration>
	</Rule>
</LifecycleConfiguration>

語法

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

要求範例

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: M625BaNwd/OytcM7O5gIaQ==
Content-Length: 305

<LifecycleConfiguration>
	<Rule>
		<ID>id1</ID>
		<Filter />
		<Status>Enabled</Status>
		<Expiration>
			<Days>60</Days>
		</Expiration>
	</Rule>
</LifecycleConfiguration>

與 NodeJS COS SDK 搭配使用的程式碼範例

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
    endpoint: ep,
    apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
    ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
    serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);
var date = new Date('June 16, 2019 00:00:00');

var params = {
  Bucket: 'STRING_VALUE', /* required */
  LifecycleConfiguration: {
    Rules: [ /* required */
      {
        Status: 'Enabled', /* required */
        ID: 'OPTIONAL_STRING_VALUE',
        Filter: {}, /* required */
        Expiration:
        {
          Date: date
        }
      },
    ]
  }
};

s3.putBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

與 Python COS SDK 搭配使用的程式碼範例

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

import sys
import ibm_boto3
from ibm_botocore.client import Config

api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"

cos = ibm_boto3.client('s3',
                         ibm_api_key_id=api_key,
                         ibm_service_instance_id=service_instance_id,
                         ibm_auth_endpoint=auth_endpoint,
                         config=Config(signature_version='oauth'),
                         endpoint_url=service_endpoint)

response = cos.put_bucket_lifecycle_configuration(
    Bucket='string',
    LifecycleConfiguration={
        'Rules': [
            {
                'Status': 'Enabled',
                'Filter': {},
                'Expiration':
                {
                    'Days': 123
                },
            },
        ]
    }
)

print("Bucket lifecyle: {0}".format(response))

與 Java COS SDK 搭配使用的程式碼範例

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

package com.ibm.cloud;

    import java.sql.Timestamp;
    import java.util.List;
    import java.util.Arrays;

    import com.ibm.cloud.objectstorage.ClientConfiguration;
    import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
    import com.ibm.cloud.objectstorage.auth.AWSCredentials;
    import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
    import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
    import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
    import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
    import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
    import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
    import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;

    public class App
    {
        private static AmazonS3 _cosClient;

        /**
         * @param args
         */
        public static void main(String[] args)
        {
            SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
            String bucketName = "<sample-bucket-name>";
            String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
            String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
            String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";
            String storageClass = "us-south";
            String location = "us";

            _cosClient = createClient(api_key, service_instance_id, endpoint_url, location);

            // Define a rule for expiring items in a bucket
            int days_to_delete = 10;
            BucketLifecycleConfiguration.Rule rule = new BucketLifecycleConfiguration.Rule()
                    .withId("Delete rule")
                    .withExpirationInDays(days_to_delete)
                    .withStatus(BucketLifecycleConfiguration.ENABLED);
                    rule.setFilter(new LifecycleFilter());

            // Add the rule to a new BucketLifecycleConfiguration.
            BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()
                    .withRules(Arrays.asList(rule));

            // Use the client to set the LifecycleConfiguration on the bucket.
            _cosClient.setBucketLifecycleConfiguration(bucketName, configuration);
        }

        /**
         * @param bucketName
         * @param clientNum
         * @param api_key
         * @param service_instance_id
         * @param endpoint_url
         * @param location
         * @return AmazonS3
         */
        public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
        {
            AWSCredentials credentials;
            credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);

            ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
            clientConfig.setUseTcpKeepAlive(true);

            AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
                    .withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
                    .withClientConfiguration(clientConfig).build();
            return cosClient;
        }
    }

檢查儲存區的生命週期配置,包括有效期限

GET 作業的這項實作會使用 lifecycle 查詢參數來檢查儲存區的生命週期設定。 如果沒有生命週期配置,則會傳回 HTTP 404 回應。

雲端 IAM 使用者必須擁有 Reader 角色,才能從儲存桶檢視生命週期政策。

Classic Infrastructure 使用者必須在儲存桶上擁有 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
Content-Type: text/plain
Content-MD5: M625BaNwd/OytcM7O5gIaQ==
Content-Length: 305

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
    endpoint: ep,
    apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
    ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
    serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);

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
});
import sys
import ibm_boto3
from ibm_botocore.client import Config

api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"

cos = ibm_boto3.resource('s3',
                         ibm_api_key_id=api_key,
                         ibm_service_instance_id=service_instance_id,
                         ibm_auth_endpoint=auth_endpoint,
                         config=Config(signature_version='oauth'),
                         endpoint_url=service_endpoint)

response = cos.Bucket('<name-of-bucket>').get_bucket_lifecycle_configuration(
    Bucket='string'
)

print("Bucket lifecyle: {0}".format(response))

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

package com.ibm.cloud;

    import java.sql.Timestamp;
    import java.util.List;
    import java.util.Arrays;

    import com.ibm.cloud.objectstorage.ClientConfiguration;
    import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
    import com.ibm.cloud.objectstorage.auth.AWSCredentials;
    import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
    import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
    import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
    import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
    import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
    import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
    import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;

    public class App
    {
        private static AmazonS3 _cosClient;

        /**
         * @param args
         */
        public static void main(String[] args)
        {
            SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
            String bucketName = "<sample-bucket-name>";
            String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
            String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
            String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";

            String storageClass = "us-south";
            String location = "us";

            _cosClient = createClient(api_key, service_instance_id, endpoint_url, location);

            // Use the client to read the configuration
            BucketLifecycleConfiguration config = _cosClient.getBucketLifecycleConfiguration(bucketName);

            System.out.println(config.toString());
        }

        /**
         * @param bucketName
         * @param clientNum
         * @param api_key
         * @param service_instance_id
         * @param endpoint_url
         * @param location
         * @return AmazonS3
         */
        public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
        {
            AWSCredentials credentials;
            credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);

            ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
            clientConfig.setUseTcpKeepAlive(true);

            AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
                    .withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
                    .withClientConfiguration(clientConfig).build();
            return cosClient;
        }

    }

刪除儲存區的生命週期配置,包括有效期限

DELETE 作業的這項實作會使用 lifecycle 查詢參數來檢查儲存區的生命週期設定。 將會刪除與儲存區相關聯的所有生命週期規則。 對於新物件,不會再發生規則所定義的轉移。 不過,刪除規則之前,對於已寫入儲存區的物件,將會維護現有轉移規則。 「有效期限規則」將不再存在。 如果沒有生命週期配置,則會傳回 HTTP 404 回應。

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 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-Length: 305

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
    endpoint: ep,
    apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
    ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
    serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);

var params = {
  Bucket: 'STRING_VALUE' /* required */
};

s3.deleteBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

import sys
import ibm_boto3
from ibm_botocore.client import Config

api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"

cos = ibm_boto3.resource('s3',
                         ibm_api_key_id=api_key,
                         ibm_service_instance_id=service_instance_id,
                         ibm_auth_endpoint=auth_endpoint,
                         config=Config(signature_version='oauth'),
                         endpoint_url=service_endpoint)

response = cos.Bucket('<name-of-bucket>').delete_bucket_lifecycle_configuration(
    Bucket='string'
)

print("Bucket lifecyle: {0}".format(response))

使用 IBM Cloud® Object Storage SDK 只需要呼叫具有正確參數及適當配置的適當函數。

package com.ibm.cloud;

    import java.sql.Timestamp;
    import java.util.List;
    import java.util.Arrays;

    import com.ibm.cloud.objectstorage.ClientConfiguration;
    import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
    import com.ibm.cloud.objectstorage.auth.AWSCredentials;
    import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
    import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
    import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
    import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
    import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
    import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
    import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
    import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
    import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;

    public class App
    {
        private static AmazonS3 _cosClient;

        /**
         * @param args
         */
        public static void main(String[] args)
        {
            SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
            String bucketName = "<sample-bucket-name>";
            String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
            String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
            String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";

            String storageClass = "us-south";
            String location = "us";

            _cosClient = createClient(api_key, service_instance_id, endpoint_url, location);

            // Delete the configuration.
            _cosClient.deleteBucketLifecycleConfiguration(bucketName);

            // Verify that the configuration has been deleted by attempting to retrieve it.
            config = _cosClient.getBucketLifecycleConfiguration(bucketName);
            String s = (config == null) ? "Configuration has been deleted." : "Configuration still exists.";
            System.out.println(s);
        }

        /**
         * @param bucketName
         * @param clientNum
         * @param api_key
         * @param service_instance_id
         * @param endpoint_url
         * @param location
         * @return AmazonS3
         */
        public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
        {
            AWSCredentials credentials;
            credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);

            ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
            clientConfig.setUseTcpKeepAlive(true);

            AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
                    .withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
                    .withClientConfiguration(clientConfig).build();
            return cosClient;
        }

    }

NoncurrentVersionExpiration 生命週期規則

NoncurrentVersionExpiration 是自動控制版本累積和儲存成本的實用方法。 請參閱下列範例。

無法使用 NoncurrentVersionTransition 規則在生命週期組態中只歸檔非目前版本的物件,如歸檔和過期版本化物件 中所述

    curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?lifecycle" \
    -H 'Authorization: bearer $TOKEN' \
    -H 'Content-Type: text/xml' \
    -d '<?xml version="1.0" encoding="UTF-8"?>
    <LifecycleConfiguration>
    <Rule>
        <ID>expire-old-versions</ID>
        <Status>Enabled</Status>
        <Filter></Filter>
        <NoncurrentVersionExpiration>
        <NoncurrentDays>30</NoncurrentDays>
        </NoncurrentVersionExpiration>
    </Rule>
    </LifecycleConfiguration>'
    cosClient.put_bucket_lifecycle_configuration(
        Bucket=BUCKET,
        LifecycleConfiguration={
            'Rules': [{
                'ID': 'expire-old-versions',
                'Status': 'Enabled',
                'Filter': {},
                'NoncurrentVersionExpiration': {
                    'NoncurrentDays': 30
                }
            }]
        }
    )

後續步驟

有效期限只是 IBM Cloud Object Storage 可用的數個生命週期概念之一。 我們在此概述中涵蓋的每個概念都可以在 IBM Cloud 平台