만료 규칙으로 오래된 데이터 삭제하기
만기 규칙은 정의된 기간(오브젝트 작성 날짜부터 시작하여)이 지나면 오브젝트를 삭제합니다.
웹 콘솔, REST API 및 IBM Cloud Object Storage와 통합된 서드파티 도구를 사용하여 오브젝트의 라이프사이클을 설정할 수 있습니다.
-
새 버킷 또는 기존 버킷에 만기 규칙을 추가할 수 있습니다.
-
기존 만기 규칙을 수정하거나 사용 안함으로 설정할 수 있습니다.
-
새로 추가되거나 수정된 만기 규칙은 버킷의 모든 새 오브젝트 및 기존 오브젝트에 적용됩니다.
-
라이프사이클 정책을 추가하거나 수정하려면
Writer역할이 필요합니다. -
버킷당 최대 1000개의 라이프사이클 규칙(아카이브+만기)을 정의할 수 있습니다.
-
만기 규칙의 변경사항이 적용될 때까지 최대 24시간이 허용됩니다.
-
각 만기 규칙의 범위는 이름이 접두부와 일치하는 오브젝트의 서브세트에만 적용하도록 선택적 접두부 필터를 정의하여 제한할 수 있습니다.
-
접두부 필터가 없는 만기 규칙은 버킷의 모든 오브젝트에 적용됩니다.
-
일 수로 지정된 오브젝트의 만기 기간은 오브젝트가 작성된 시간부터 계산되며 다음 날 자정(UTC)으로 반올림됩니다. 예를 들어, 작성 날짜로부터 10일 후에 오브젝트 세트가 만료되는 버킷의 만기 규칙이 있는 경우 2019년 4월 15일 5시 10분(UTC)에 작성된 오브젝트는 2019년 4월 26일 자정(UTC)에 만료됩니다.
-
각 버킷의 만기 규칙은 24시간마다 한 번씩 평가됩니다. 만기가 되는 오브젝트(오브젝트의 만기 날짜 기준)는 삭제를 위해 큐에 대기합니다. 만료된 오브젝트 삭제는 다음 날 시작되며 대개 24시간 미만이 걸립니다. 오브젝트가 삭제되면 오브젝트에 연관된 스토리지에 대해 비용이 청구되지 않습니다.
-
버전화 사용 또는 일시중단된 버킷 에서 일반
규칙은 현재 버전을 유지하고 데이터를 영구적으로 삭제하지 않고 삭제 마커를 작성합니다. 버전 관리가 활성화된 버킷을 정리하려면 두 가지 만료 규칙을 설정할 수 있습니다. 현재 버전과 비현재 버전에 대한 만료일을 설정하는 첫 번째 규칙을 추가합니다. 버전 관리가 사용 설정되어 있으므로 이 규칙은 버전에 대한 삭제 마커를 만듭니다. "만료된 개체 삭제 마커 정리"를 선택하여 데이터를 삭제하는 두 번째 규칙을 추가합니다. 버전 관리가 일시 중단된 경우 만료 규칙 구성 페이지에서 만료된 삭제 마커를 정리하는 옵션이 표시되지 않습니다. 따라서 먼저 버전 관리를 사용 설정해야 합니다. 그런 다음 현재 버전과 비현재 버전에 대한 만료일을 설정하는 첫 번째 규칙을 추가합니다. 버전 관리가 사용 설정되어 있으므로 이 규칙은 버전에 대한 삭제 마커를 만듭니다. "만료된 개체 삭제 마커 정리"를 선택하여 데이터를 삭제하는 두 번째 규칙을 추가합니다. -
현재 버전이 아닌 버전의 만기 시간은 후속 버전의 마지막 수정 시간에 의해 결정되며 UTC 자정에 다음 날로 반올림됩니다.
-
다음 날 만기될 것으로 예상되는 버전이 있는 오브젝트에서 버전이 수동으로 삭제되는 경우 해당 만기가 발생하지 않을 수 있습니다.
과거의 날짜를 지정하는 정책은 완료하는 데 최대 며칠이 걸릴 수 있습니다.
버전화된 버킷에서 만기 규칙 을 사용하면 데이터가 영구적으로 유실될 수 있습니다. 버전화가 일시중단 되고 만기된 오브젝트에 대해 널 버전이 있는 경우 데이터가 영구적으로 유실될 수 있습니다. 이 경우 null 삭제 마커를 겹쳐쓰고 오브젝트를
영구적으로 삭제합니다.
버킷의 불변 오브젝트 스토리지 보존 정책이 적용되는 오브젝트에서는 보존 정책이 더 이상 시행되지 않을 때까지 만기 조치가 지연됩니다.
만기 규칙의 속성
각 만기 규칙에는 다음 속성이 있습니다.
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>
이 구성은 Object Size Less Than 2kb 인 모든 객체의 만료일을 설정합니다.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeLessThanFilter</ID>
<Filter>
<ObjectSizeLessThan>2048</ObjectSizeLessThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
이 구성은 Object Size Greater Than 1kb 인 모든 객체의 만료일을 설정합니다.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeGreaterThanFilter</ID>
<Filter>
<ObjectSizeGreaterThan>1024</ObjectSizeGreaterThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
10mb 이 설정은 환경:프로덕션과 환경:개발에 해당하는 태그 키 값을 가진 태그 키 값이 environnment:production과 tag key value equals 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>
콘솔 사용
새 버킷을 작성할 때 만기 규칙 추가 상자를 선택하십시오. 그런 다음 규칙 추가 클릭하여 새 만기 규칙을 작성하십시오. 버킷 작성 중에 최대 5개의 규칙을 추가할 수 있으며 나중에 규칙을 추가할 수 있습니다.
기존 버킷의 경우 탐색 메뉴에서 구성을 선택하고 만료 규칙 섹션에서 규칙 추가를 클릭합니다.
API 및 SDK 사용
REST API 또는 IBM COS SDK를 사용하여 프로그래밍 방식으로 만기 규칙을 관리할 수 있습니다. 컨텍스트 교환기에서 카테고리를 선택하여 예제의 형식을 선택하십시오.
버킷의 라이프사이클 구성에 만기 규칙 추가
REST API 참조
이 PUT 오퍼레이션 구현은 lifecycle 조회 매개변수를 사용하여 버킷의 라이프사이클 설정을 지정합니다. 이 오퍼레이션은 버킷에 대한 단일 라이프사이클 정책 정의를 허용합니다. 정책은 다음 매개변수로 구성된 규칙 세트로 정의됩니다. ID, Status, Filter 및 Expiration.
Cloud IAM 사용자가 버킷에서 수명 주기 정책을 추가하려면 Writer 역할이 있어야 합니다.
클래식 인프라 사용자는 버킷에서 수명 주기 정책을 추가하려면 버킷에 대한 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 |
컨테이너 | Key, Value |
Filter,And |
키와 필터를 모두 정의해야 합니다. |
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>
```{: caption="예
3. 객체 수명 주기 구성을 만들기 위한 헤더 샘플을 요청하세요." caption-side="bottom"}
{: http}
**NodeJS COS SDK에서 사용하기 위한 코드 샘플**
{: javascript}
IBM Cloud® Object Storage SDK를 사용하기 위해서는 올바른 매개변수 및 적절한 구성과 함께 적합한 함수를 호출해야 합니다.
{: javascript}
```js {: codeblock javascript}
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 응답이 리턴됩니다.
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
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;
}
}
```{: caption="예
3. 수명 주기 구성 삭제를 보여주는 코드 샘플입니다." caption-side="bottom"}
### NoncurrentVersionExpiration 수명 주기 규칙 {: #expiry-api-noncurrent-version}
NoncurrentVersionExpiration 는 버전 누적 및 저장 비용을 자동으로 제어할 수 있는 실용적인 방법입니다. 다음 예시를 참조하세요.
[버전이 있는 개체 보관 및 만료에](/docs/cloud-object-storage?topic=cloud-object-storage-versioning#versioning-archive) 설명된 대로 수명 주기 구성에서 현재 버전이 아닌 개체만 보관하는 `NoncurrentVersionTransition` 규칙은 사용할 수 없습니다
{: note}
```curl {: codeblock curl caption="예제 4. 수명 주기 구성의 NoncurrentVersionExpiration 을 보여주는 CURL 코드 샘플입니다." caption-side="bottom"}
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 플랫폼.