使用過期規則刪除過期資料
有效期限規則會在定義的期間(從物件建立日期開始)之後刪除物件。
您可以使用與 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 查詢參數來設定儲存區的生命週期設定。 此作業容許儲存區的單一生命週期原則定義。 該原則定義為包含下列參數的一組規則:ID、Status、Filter 及 Expiration。
雲端 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-z、A-Z、0-9) 和下列符號組成: ! _ . * ' ( ) - |
Filter |
字串 | Prefix |
Rule |
必須包含 Prefix 元素 |
Expiration |
Container |
Days 或 Date |
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 平台。