Löschen von veralteten Daten mit Verfallsregeln
Eine Ablaufregel dient zum Löschen von Objekten nach einem definierten Zeitraum, der mit dem Erstellungsdatum des Objekts beginnt.
Sie können den Lebenszyklus für Objekte festlegen, indem Sie die Webkonsole, die REST-API und die Tools anderer Anbieter verwenden, die in IBM Cloud Object Storage integriert sind.
-
Eine Ablaufregel kann zu einem neuen oder vorhandenen Bucket hinzugefügt werden.
-
Eine vorhandene Ablaufregel kann geändert oder inaktiviert werden.
-
Eine neu hinzugefügte oder geänderte Ablaufregel gilt für alle neuen und vorhandenen Objekte in dem Bucket.
-
Zum Hinzufügen oder Ändern von Lebenszyklusrichtlinien ist die Rolle
Writererforderlich. -
Pro Bucket können bis zu 1000 Lebenszyklusregeln (Archivierung + Ablauf) definiert werden.
-
Es können bis zu 24 Stunden vergehen, bis Änderungen an den Ablaufregeln wirksam werden.
-
Der Geltungsbereich jeder Ablaufregel kann eingeschränkt werden, indem ein optionaler Präfixfilter definiert wird, der nur auf eine Untergruppe von Objekten mit Namen angewendet werden soll, die mit dem Präfix übereinstimmen.
-
Eine Ablaufregel ohne Präfixfilter gilt für alle Objekte in dem Bucket.
-
Der Ablaufzeitraum eines Objekts, der als Anzahl von Tagen angegeben wird, wird ausgehend von dem Zeitpunkt berechnet, zu dem das Objekt erstellt wurde, und wird auf Mitternacht des nächsten Tages in UTC (Coordinated Universal Time; koordinierte Weltzeit) abgerundet. Beispiel: Wenn Sie über eine Ablaufregel für ein Bucket verfügen, mit der das Ablaufen der Gültigkeit einer Gruppe von Objekten auf ein Datum zehn Tage nach deren Erstellungsdatum festgelegt wird, dann läuft die Gültigkeit eines Objekts, das am 15. April 2019 um 05:10 UTC erstellt wurde, am 26. April 2019 00:00 UTC ab.
-
Die Ablaufregeln für alle Buckets werden einmal alle 24 Stunden bewertet. Jedes Objekt, dessen Gültigkeit (auf Basis des Ablaufdatums des betreffenden Objekts) abgelaufen ist, wird zum Löschen in die Warteschlange eingestellt. Die Löschung abgelaufener Objekte beginnt am folgenden Tag und dauert normalerweise weniger als 24 Stunden. Der Speicher, der diesen Objekten zugeordnet wurde, wird Ihnen nach der Löschung der Objekte nicht mehr berechnet.
-
In aktivierten oder ausgesetzten Buckets für die Versionssteuerung wird ein regulärer
Regel behält die aktuelle Version bei und erstellt eine Löschmarkierung, anstatt Daten permanent zu löschen. Um einen Bucket mit aktivierter Versionierung zu bereinigen, können Sie zwei Verfallsregeln festlegen. Fügen Sie eine erste Regel hinzu, die eine Ablauffrist für die aktuelle Version und die nicht aktuelle Version festlegt. Da die Versionierung aktiviert ist, erstellt diese Regel eine Löschmarkierung für die Version. Fügen Sie eine zweite Regel mit der Auswahl "Abgelaufene Objekt-Löschmarkierungen bereinigen" hinzu, um die Daten zu löschen. Wenn die Versionierung ausgesetzt ist, wird auf der Konfigurationsseite der Ablaufregel die Option zum Bereinigen der abgelaufenen Löschmarkierungen nicht angezeigt. Daher muss die Versionierung zuerst aktiviert werden. Fügen Sie dann eine erste Regel hinzu, die ein Ablaufdatum für die aktuelle und die nicht aktuelle Version festlegt. Da die Versionierung aktiviert ist, erstellt diese Regel eine Löschmarkierung für die Version. Fügen Sie eine zweite Regel mit der Auswahl "Abgelaufene Objekt-Löschmarkierungen bereinigen" hinzu, um die Daten zu löschen. -
Die Ablaufzeit nicht aktueller Versionen wird durch die Zeit der letzten Änderung des Nachfolgers bestimmt, die auf den nächsten Tag um Mitternacht UTC gerundet wird.
-
Wenn Versionen manuell aus einem Objekt gelöscht werden, dessen Versionen voraussichtlich am nächsten Tag abgelaufen sind, treten diese Ablaufdaten möglicherweise nicht auf.
Richtlinien, die ein Datum in der Vergangenheit angeben, können bis zu einigen Tagen dauern.
Ohne Vorsicht können Daten dauerhaft verloren gehen, wenn Ablaufregeln für ein versionsgesteuertes Bucket verwendet werden. In Fällen, in denen die Versionssteuerung ausgesetzt ist und eine Nullversion für das abgelaufene Objekt vorhanden ist, können Daten dauerhaft verloren gehen. In diesem Fall wird eine null-Löschmarkierung überschrieben und das Objekt dauerhaft gelöscht.
Für Objekte, die der IOS-Aufbewahrungsrichtlinie (IOS = Immutable Object Storage; Speicher für unveränderliche Objekte) unterliegen, werden Ablaufaktionen verzögert, bis die Aufbewahrungsrichtlinie nicht mehr durchgesetzt wird.
Attribute für Ablaufregeln
Jede Ablaufregel verfügt über die folgenden Attribute:
ID
Die ID einer Regel muss innerhalb der Lebenszykluskonfiguration des Buckets eindeutig sein.
Ablauf
Der Ablaufblock enthält die Details, die das automatische Löschen von Objekten steuern. Hierbei kann es sich um ein bestimmtes Datum in der Zukunft oder um einen Zeitraum handeln, der beginnt, nachdem neue Objekte geschrieben wurden.
NoncurrentVersionExpiration
Die Anzahl der Tage, nach denen nicht aktuelle Versionen von Objekten automatisch gelöscht werden.
Präfix
Eine optionale Zeichenfolge, die mit dem Präfix des Objektnamens im Bucket abgeglichen wird. Eine Regel mit einem Präfix gilt nur für die Objekte, für die eine Übereinstimmung festgestellt wurde. Sie können mehrere Regeln für unterschiedliche
Ablaufaktionen für unterschiedliche Präfixe innerhalb desselben Buckets verwenden. Innerhalb derselben Lebenszykluskonfiguration kann eine Regel beispielsweise zum Löschen aller Objekte, die mit der Zeichenfolge logs/ beginnen,
nach 30 Tagen dienen. Eine zweite Regel kann zum Löschen von Objekten, die mit video/ beginnen, nach 365 Tagen dienen.
Tag
Eine Filteroption, die es ermöglicht, Ablaufregeln auf Objekte anzuwenden, die ein übereinstimmendes Tag enthalten. Der Tag-Filter wird als Container bereitgestellt, der eine Schlüssel- und eine Wertzeichenfolge angibt. Der Schlüsselstring muss weniger als 128 Zeichen umfassen. Die Zeichenkette muss weniger als 256 Zeichen umfassen.
ObjectSizeLessThan
Ein Filter, der Lebenszyklusaktionen auf Objekte beschränkt, die kleiner als eine bestimmte Größe sind. Dies muss ein ganzzahliger Wert größer als 0 sein.
ObjectSizeGreaterThan
Ein Filter, der Lebenszyklusaktionen auf Objekte beschränkt, die größer als eine bestimmte Größe sind. Dies muss ein ganzzahliger Wert größer als 0 sein.
Und
Verwenden Sie den Parameter "AND", um mehrere Filter auf Objekte anzuwenden, die alle angegebenen Bedingungen erfüllen sollten.
Status
Eine Regel kann entweder aktiviert oder inaktiviert werden. Eine Regel ist nur aktiv, wenn sie aktiviert wurde.
Beispiele für Lebenszykluskonfigurationen
In dieser Konfiguration läuft die Gültigkeit neuer Objekte nach 30 Tagen ab.
<LifecycleConfiguration>
<Rule>
<ID>delete-after-30-days</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
In dieser Konfiguration werden alle Objekte mit dem Präfix foo/ am 1. Juni 2020 gelöscht.
<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>
Diese Konfiguration verfällt alle nicht aktuellen Versionen von Objekten nach 100 Tagen.
<LifecycleConfiguration>
<Rule>
<ID>DeleteAfterBecomingNonCurrent</ID>
<Filter/>
<Status>Enabled</Status>
<NoncurrentVersionExpiration>
<NoncurrentDays>100</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
Sie können Übergangs- und Ablaufregeln auch kombinieren. In dieser Konfiguration werden alle Objekte 90 Tage nach ihrer Erstellung archiviert und es werden alle Objekte mit dem Präfix foo/ nach 180 Tagen gelöscht.
<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>
Diese Konfiguration löscht alle Objekte mit dem Tag-Schlüsselwert "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>
Diese Konfiguration löscht alle Objekte mit einer Objektgröße von weniger als 2kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeLessThanFilter</ID>
<Filter>
<ObjectSizeLessThan>2048</ObjectSizeLessThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Diese Konfiguration löscht alle Objekte mit einer Objektgröße von mehr als 1kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeGreaterThanFilter</ID>
<Filter>
<ObjectSizeGreaterThan>1024</ObjectSizeGreaterThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Diese Konfiguration löscht alle Objekte, die größer sind als 10mb, mit Tag-Schlüsselwert gleich "Environnment:Production" und Tag-Schlüsselwert gleich "Environnment: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>
Verwendung der Konsole
Wenn Sie ein neues Bucket erstellen, dann aktivieren Sie das Kontrollkästchen Ablaufregel hinzufügen. Klicken Sie als Nächstes auf Regel hinzufügen, um die neue Ablaufregel zu erstellen. Sie können während der Erstellung eines Buckets bis zu fünf Regeln hinzufügen. Weitere Regeln können später hinzugefügt werden.
Wählen Sie für einen vorhandenen Bucket im Navigationsmenü die Option Konfiguration und klicken Sie im Abschnitt Ablaufregel auf Regel hinzufügen.
API und SDKs verwenden
Sie können Ablaufregeln über die REST-API oder die IBM COS-SDKs programmgesteuert verwalten. Wählen Sie das Format für die Beispiele aus, indem Sie eine Kategorie in der Kontextumschaltung auswählen.
Ablaufregel zur Lebenszykluskonfiguration eines Buckets hinzufügen
Referenz zur REST-API
Bei dieser Implementierung der PUT-Operation wird der Abfrageparameter lifecycle verwendet, um die Lebenszykluseinstellungen für das Bucket festzulegen. Diese Operation ermöglicht die Verwendung einer einzigen Lebenszyklusrichtliniendefinition
für ein Bucket. Die Richtlinie wird als Regelgruppe definiert, die die folgenden Parameter umfasst: ID, Status, Filter und Expiration (Ablauf).
Cloud IAM-Benutzer müssen über die Rolle Writer verfügen, um eine Lebenszyklusrichtlinie aus einem Bucket hinzuzufügen.
Klassische Infrastruktur Benutzer müssen über die Berechtigung Owner für den Bucket verfügen, um eine Lebenszyklusrichtlinie aus einem Bucket hinzuzufügen.
| Überschrift | Typ | Beschreibung |
|---|---|---|
Content-MD5 |
Zeichenfolge | Der base64 verschlüsselte 128-Bit MD5 Hash der Nutzdaten, der als Integritätsprüfung verwendet wird, um sicherzustellen, dass die Nutzdaten während der Übertragung nicht verändert wurden. |
x-amz-checksum-crc32 |
Zeichenfolge | Dieser Header ist die Base64 kodierte, 32-Bit CRC32 Prüfsumme des Objekts. |
x-amz-checksum-crc32c |
Zeichenfolge | Dieser Header ist die Base64 kodierte, 32-Bit CRC32C Prüfsumme des Objekts. |
x-amz-checksum-crc64nvme |
Zeichenfolge | Dieser Header ist die Base64 kodierte, 64-Bit CRC64NVME Prüfsumme des Objekts. Die Prüfsumme CRC64NVME ist immer eine vollständige Objektprüfsumme. |
x-amz-checksum-sha1 |
Zeichenfolge | Dieser Header ist der Base64 verschlüsselte 160-Bit-Digest des Objekts SHA1. |
x-amz-checksum-sha256 |
Zeichenfolge | Dieser Header ist der Base64 kodierte, 256-Bit SHA256 Digest des Objekts. |
x-amz-sdk-checksum-algorithm |
Zeichenfolge | Gibt den Algorithmus an, der bei Verwendung des SDK zur Erstellung der Prüfsumme für das Objekt verwendet wird. |
Ein Content-MD5-Header oder ein checksum-Header (einschließlich x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1 oder x-amz-checksum-sha256)
ist als Integritätsprüfung für die Nutzdaten erforderlich.
Der Hauptteil der Anforderung muss einen XML-Block mit dem folgenden Schema enthalten:
| Element | Typ | Untergeordnete Elemente | Vorfahre | Einschränkung |
|---|---|---|---|---|
LifecycleConfiguration |
Container | Rule |
Keine | Grenzwert 1. |
Rule |
Container | ID, Status, Filter, Expiration |
LifecycleConfiguration |
Grenzwert 1000. |
ID |
Zeichenfolge | Keine | Rule |
Muss aus (a-z,A-Z,0-9) und den folgenden Symbolen bestehen: ! _ . * ' ( ) - |
Filter |
Zeichenfolge | Prefix |
Rule |
Muss ein Element Prefix enthalten |
Expiration |
Container |
Days oder Date |
Rule |
Grenzwert 1. |
Days |
Nicht negative Ganzzahl | Keine | Expiration |
Muss ein Wert größer als '0' sein. |
Date |
Datum | Keine | Expiration |
Muss im ISO 8601-Format angegeben werden. |
NoncurrentVersionExpiration |
Datum | NoncurrentDays |
Rule |
Grenzwert 1. |
NoncurrentDays |
Nicht negative Ganzzahl | Keine | NoncurrentVersionExpiration |
Muss ein Wert größer als '0' sein. |
ObjectSizeGreaterThan |
Nicht negative Ganzzahl | Keine | Filter,And |
Muss ein Wert größer als '0' sein. |
ObjectSizeLessThan |
Nicht negative Ganzzahl | Keine | Filter,And |
Muss ein Wert größer als '0' sein. |
Prefix |
Zeichenfolge | Keine | Filter,And |
Muss mit zwei oder mehr Filtern verwendet werden. |
And |
Container | Prefix,ObjectSizeGreaterThan, ObjectSizeLessThan, Tag |
Filter |
Kann ein oder mehrere Tag-Elemente enthalten. |
Tag |
Container | Key, Value |
Filter,And |
Es müssen sowohl ein Schlüssel als auch ein Filter definiert werden. |
Key |
Zeichenfolge | Keine | Tag |
Die Zeichenfolge muss weniger als 128 Zeichen umfassen. |
Value |
Zeichenfolge | Keine | Tag |
Die Zeichenfolge muss weniger als 256 Zeichen umfassen. |
Der Hauptteil der Anforderung muss einen XML-Block mit dem Schema enthalten, auf das in der Tabelle (siehe Beispiel 1) verwiesen wird:
<LifecycleConfiguration>
<Rule>
<ID>id1</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Syntax
PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
Beispielanforderung
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>
Codebeispiel zur Verwendung des Node.js-COS-SDK
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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
});
Codebeispiel zur Verwendung des Python-COS-SDK
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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))
Codebeispiel zur Verwendung des Java-COS-SDK
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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;
}
}
Lebenszykluskonfiguration eines Buckets (einschließlich Ablauf) überprüfen
Bei dieser Implementierung der GET-Operation wird der Abfrageparameter lifecycle verwendet, um die Lebenszykluseinstellungen für das Bucket zu überprüfen. Wenn keine Lebenszykluskonfiguration vorhanden ist, wird die
HTTP-Antwort 404 zurückgegeben.
Cloud IAM-Benutzer müssen über die Rolle Reader verfügen, um eine Lebenszyklusrichtlinie aus einem Bucket zu prüfen.
Klassische Infrastruktur Benutzer müssen über die Berechtigung Read für den Bereich verfügen, um eine Lebenszyklusrichtlinie aus einem Bereich zu prüfen.
Syntax
GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style
Beispielheaderanforderung
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
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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))
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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;
}
}
Lebenszykluskonfiguration eines Buckets (einschließlich Ablauf) löschen
Bei dieser Implementierung der DELETE-Operation wird der Abfrageparameter lifecycle verwendet, um die Lebenszykluseinstellungen für das Bucket zu überprüfen. Alle Lebenszyklusregeln, die dem Bucket zugeordnet sind,
werden gelöscht. Übergänge, die anhand der Regeln definiert wurden, werden für neue Objekte nicht mehr angewendet. Vorhandene Übergangsregeln werden für Objekte beibehalten, die bereits in das Bucket geschrieben wurden, bevor die Regeln
gelöscht wurden. Die Ablaufregeln sind nicht mehr vorhanden. Wenn keine Lebenszykluskonfiguration vorhanden ist, wird die HTTP-Antwort 404 zurückgegeben.
Cloud IAM-Benutzer müssen über die Rolle Writer verfügen, um eine Lebenszyklusrichtlinie aus einem Bucket zu entfernen.
Benutzer der klassischen Infrastruktur müssen mindestens über die Berechtigungen für Owner für das Bucket verfügen, um eine Lebenszyklusrichtlinie aus einem Bucket zu entfernen.
Syntax
DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style
Beispielheaderanforderung
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
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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
});
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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))
Zur Nutzung der IBM Cloud® Object Storage-SDKs ist lediglich ein Aufruf der entsprechenden Funktionen mit den korrekten Parametern und der richtigen Konfiguration erforderlich.
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 lebenszyklusregel
NoncurrentVersionExpiration ist eine praktische Methode zur automatischen Kontrolle der Versionsbildung und der Speicherkosten. Siehe die folgenden Beispiele.
Es ist nicht möglich, NoncurrentVersionTransition Regeln zu verwenden, um nur nicht aktuelle Versionen von Objekten in einer Lebenszykluskonfiguration zu archivieren, wie in Archivierung und Auslaufen versionierter Objekte beschrieben
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
}
}]
}
)
Nächste Schritte
Der Ablauf der Gültigkeit ist nur eines der zahlreichen Lebenszykluskonzepte, die für IBM Cloud Object Storage zur Verfügung stehen. Jedes der Konzepte, die wir in diesem Überblick behandelt haben, kann in den folgenden Abschnitten näher untersucht werden IBM Cloud Plattform.