Setting Lifecycle Rules (SDK for Java)
Function
This API configures lifecycle rules for a bucket to periodically delete objects in the bucket or transition objects between storage classes. For more information, see Lifecycle Management.
- An object will be automatically deleted by the OBS server once it expires.
- The time set in the transition policy of an object must be earlier than its expiration time, and the time set in the transition policy of a noncurrent object version must be earlier than its expiration time.
- The configured expiration time and transition policy for a noncurrent object version can only take effect when versioning is enabled or suspended for the bucket where that object version is stored.
- The minimum storage duration is 30 days for Infrequent Access storage, and 90 days for Archive storage. After an object is transitioned to the Archive storage class, if it stays in this storage class for less than 90 days, you still need to pay for a full 90 days.
Restrictions
- There is no limit on the number of lifecycle rules in a bucket, but the total size of XML descriptions about all lifecycle rules in a bucket cannot exceed 20 KB.
- A maximum of 20 lifecycle rules can be configured for a parallel file system.
- To configure a lifecycle rule for a bucket, you must be the bucket owner or have the required permission (obs:bucket:PutLifecycleConfiguration in IAM or PutLifecycleConfiguration in a bucket policy). For details, see Introduction to OBS Access Control, IAM Custom Policies, and Creating a Custom Bucket Policy.
- Expired objects will be permanently deleted and cannot be recovered.
- Multi-AZ redundancy is not available for Archive storage. For this reason, buckets or objects with multi-AZ redundancy cannot be transitioned to the Archive storage class based on a lifecycle rule.
Method
obsClient.setBucketLifecycle(final SetBucketLifecycleRequest request)
Request Parameters
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
deleteRequest |
Yes |
Explanation: Request parameters for setting the lifecycle rule. For details, see Table 2. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
bucketName |
String |
Yes |
Explanation: Bucket name. Restrictions:
Default value: None |
lifecycleConfig |
Yes |
Explanation: Lifecycle rules for the bucket. For details, see Table 3. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
rules |
List<Rule> |
No |
Explanation: List of lifecycle rules. For details, see Table 4. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
id |
String |
No |
Explanation: Lifecycle rule ID. Value range: The value must contain 1 to 255 characters. Default value: None |
prefix |
String |
Yes |
Explanation: Object name prefix. It identifies the objects the rule applies to. You can leave this parameter blank to apply the rule to all objects in the bucket. Assume that you have the following objects: logs/day1, logs/day2, logs/day3, and ExampleObject.jpg. If you set prefix to ExampleObject.jpg, the rule applies to object ExampleObject.jpg only. If you set prefix to logs/, the rule applies to the three objects with name starting with logs/. If you leave prefix blank, the rule applies to all objects in the bucket. Value range: The value must contain 1 to 1,024 characters. Default value: None |
enabled |
boolean |
Yes |
Explanation: Whether to enable the rule. Value range: true: The rule is enabled. false: The rule is disabled. Default value: None |
expiration |
No |
Explanation: Expiration time of an object. For details, see Table 5. Default value: None |
|
noncurrentVersionExpiration |
No |
Explanation: Expiration time of noncurrent object versions. For details, see Table 6. Restrictions:
Default value: None |
|
transitions |
List<Transition> |
No |
Explanation: Policies for storage class transition, including transition time and the storage class after transition. For details, see Table 7. Restrictions: This parameter is only available for the current object version. Default value: None |
noncurrentVersionTransitions |
No |
Explanation: Policies for storage class transition of noncurrent versions, including transition time and the storage class after transition. For details, see Table 9. Restrictions:
Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
days |
Integer |
This parameter is mandatory if date is not configured. |
Explanation: Number of days (since the last update was made to the object) after which the lifecycle rule takes effect (the object will be deleted). Restrictions: This parameter is only available for the current object version. Value range: A positive integer, in days. Default value: None |
date |
Date |
This parameter is mandatory if days is not configured. |
Explanation: OBS deletes objects that were modified before the specified date. Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
days |
Integer |
Yes |
Explanation: Number of days an object is noncurrent before it expires. Restrictions: This parameter is only available for noncurrent object versions. Value range: A positive integer, in days. Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
days |
Integer |
This parameter is mandatory if date is not configured. |
Explanation: Number of days after its creation when the object is transitioned. Restrictions: This parameter is only available for the current object version. Value range: A positive integer, in days. Default value: None |
date |
Date |
This parameter is mandatory if days is not configured. |
Explanation: Date when the object will be transitioned. Default value: None |
storageClass |
Yes |
Explanation: Storage class the object is transitioned to. Restrictions:
Restrictions on storage class transitions:
Value range: See Table 8. Default value: None |
Constant |
Default Value |
Description |
---|---|---|
STANDARD |
STANDARD |
Standard storage class |
WARM |
WARM |
Infrequent Access storage class. |
COLD |
COLD |
Archive storage class. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
days |
Integer |
This parameter is mandatory if date is not configured. |
Explanation: Number of days after its creation when the object is transitioned. Restrictions: This parameter is only available for noncurrent object versions. Value range: A positive integer, in days. Default value: None |
storageClass |
Yes |
Explanation: Storage class the object is transitioned to. Restrictions:
Restrictions on storage class transitions:
Value range: See Table 8. Default value: None |
Transitions, Expiration, NoncurrentVersionTransitions, AbortIncompleteMultipartUpload, and NoncurrentVersionExpiration must not be all left blank.
Responses
Parameter |
Type |
Description |
---|---|---|
statusCode |
int |
Explanation: HTTP status code. Value range: A status code is a group of digits that can be 2xx (indicating successes) or 4xx or 5xx (indicating errors). It indicates the status of a response. For more information, see Status Code. Default value: None |
responseHeaders |
Map<String, Object> |
Explanation: HTTP response header list, composed of tuples. In a tuple, the String key indicates the name of the header, and the Object value indicates the value of the header. Default value: None |
Code Example: Setting an Object Transition Policy
This example configures a transition policy for latest and historical object versions in bucket examplebucket.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.LifecycleConfiguration; import com.obs.services.model.StorageClassEnum; public class SetBucketLifecycle001 { public static void main(String[] args) { // Obtain an AK/SK pair using environment variables or import the AK/SK pair in other ways. Using hard coding may result in leakage. // Obtain an AK/SK pair on the management console. String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // (Optional) If you are using a temporary AK/SK pair and a security token to access OBS, you are advised not to use hard coding, which may result in information leakage. // Obtain an AK/SK pair and a security token using environment variables or import them in other ways. // String securityToken = System.getenv("SECURITY_TOKEN"); // Enter the endpoint corresponding to the bucket. EU-Dublin is used here as an example. Replace it with the one in your actual situation. String endPoint = "https://obs.eu-west-101.myhuaweicloud.eu"; // Obtain an endpoint using environment variables or import it in other ways. //String endPoint = System.getenv("ENDPOINT"); // Create an ObsClient instance. // Use the permanent AK/SK pair to initialize the client. ObsClient obsClient = new ObsClient(ak, sk,endPoint); // Use the temporary AK/SK pair and security token to initialize the client. // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { //Set an object transition policy. LifecycleConfiguration config = new LifecycleConfiguration(); LifecycleConfiguration.Rule rule = config.new Rule(); rule.setEnabled(true); rule.setId("rule1"); rule.setPrefix("prefix"); LifecycleConfiguration.Transition transition = config.new Transition(); // Specify that objects whose names contain the specified prefix will be transitioned 30 days after creation. transition.setDays(30); // Specify the storage class that the object will be transitioned to. transition.setObjectStorageClass(StorageClassEnum.WARM); // Specify when the objects whose names contain the specified prefix will be transitioned. // transition.setDate(new SimpleDateFormat("yyyy-MM-dd").parse("2018-10-31")); rule.getTransitions().add(transition); LifecycleConfiguration.NoncurrentVersionTransition noncurrentVersionTransition = config.new NoncurrentVersionTransition(); // Specify that objects whose names contain the specified prefix will be transitioned 30 days after being historical versions. noncurrentVersionTransition.setDays(30); // Specify the storage class of the historical object version after transition. noncurrentVersionTransition.setObjectStorageClass(StorageClassEnum.COLD); rule.getNoncurrentVersionTransitions().add(noncurrentVersionTransition); // Set the expiration time of fragments. LifecycleConfiguration.AbortIncompleteMultipartUpload abortIncompleteMultipartUpload = config.new AbortIncompleteMultipartUpload(); abortIncompleteMultipartUpload.setDaysAfterInitiation(7); rule.setAbortIncompleteMultipartUpload(abortIncompleteMultipartUpload); config.addRule(rule); obsClient.setBucketLifecycle("examplebucket", config); System.out.println("setBucketLifecycle successfully"); } catch (ObsException e) { System.out.println("setBucketLifecycle failed"); // Request failed. Print the HTTP status code. System.out.println("HTTP Code:" + e.getResponseCode()); // Request failed. Print the server-side error code. System.out.println("Error Code:" + e.getErrorCode()); // Request failed. Print the error details. System.out.println("Error Message:" + e.getErrorMessage()); // Request failed. Print the request ID. System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("setBucketLifecycle failed"); // Print other error information. e.printStackTrace(); } } } |
Code Example: Setting the Object Expiration Time
This example configures the expiration time of latest and historical object versions in bucket examplebucket.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.LifecycleConfiguration; public class SetBucketLifecycle002 { public static void main(String[] args) { // Obtain an AK/SK pair using environment variables or import the AK/SK pair in other ways. Using hard coding may result in leakage. // Obtain an AK/SK pair on the management console. String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // (Optional) If you are using a temporary AK/SK pair and a security token to access OBS, you are advised not to use hard coding, which may result in information leakage. // Obtain an AK/SK pair and a security token using environment variables or import them in other ways. // String securityToken = System.getenv("SECURITY_TOKEN"); // Enter the endpoint corresponding to the bucket. EU-Dublin is used here as an example. Replace it with the one in your actual situation. String endPoint = "https://obs.eu-west-101.myhuaweicloud.eu"; // Obtain an endpoint using environment variables or import it in other ways. //String endPoint = System.getenv("ENDPOINT"); // Create an ObsClient instance. // Use the permanent AK/SK pair to initialize the client. ObsClient obsClient = new ObsClient(ak, sk,endPoint); // Use the temporary AK/SK pair and security token to initialize the client. // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // Set the object expiration time. LifecycleConfiguration config = new LifecycleConfiguration(); LifecycleConfiguration.Rule rule = config.new Rule(); rule.setEnabled(true); rule.setId("rule1"); rule.setPrefix("prefix"); LifecycleConfiguration.Expiration expiration = config.new Expiration(); // Specify that objects whose names contain the specified prefix will expire 60 days after creation. expiration.setDays(60); // Specify when the objects whose names contain the specified prefix will expire. // expiration.setDate(new SimpleDateFormat("yyyy-MM-dd").parse("2018-12-31")); rule.setExpiration(expiration); LifecycleConfiguration.NoncurrentVersionExpiration noncurrentVersionExpiration = config.new NoncurrentVersionExpiration(); // Specify that objects whose names contain the specified prefix will expire after changing into historical versions for 60 days. noncurrentVersionExpiration.setDays(60); rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration); config.addRule(rule); obsClient.setBucketLifecycle("examplebucket", config); System.out.println("setBucketLifecycle successfully"); } catch (ObsException e) { System.out.println("setBucketLifecycle failed"); // Request failed. Print the HTTP status code. System.out.println("HTTP Code:" + e.getResponseCode()); // Request failed. Print the server-side error code. System.out.println("Error Code:" + e.getErrorCode()); // Request failed. Print the error details. System.out.println("Error Message:" + e.getErrorMessage()); // Request failed. Print the request ID. System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("setBucketLifecycle failed"); // Print other error information. e.printStackTrace(); } } } |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.