Versionierung von Objekten in IBM Cloud® Object Storage

Aktivieren Sie die Versionsverwaltung für IBM Cloud® Object Storage-Buckets, um Objektversionen zu speichern, versehentliche Löschungen rückgängig zu machen und frühere Versionen wiederherzustellen.

Bei der Versionssteuerung können mehrere Revisionen eines einzelnen Objekts in demselben Bucket vorhanden sein. Jede Version eines Objekts kann abgefragt, gelesen, aus einem archivierten Status wiederhergestellt oder gelöscht werden. Die Aktivierung der Versionssteuerung für ein Bucket kann den Datenverlust durch Benutzerfehler oder versehentliches Löschen mindern. Wenn ein Objekt überschrieben wird, wird eine neue Version erstellt und die vorherige Version des Objekts wird automatisch beibehalten. Daher können in einem für die Versionssteuerung aktivierten Bucket Objekte, die durch versehentliches Löschen oder Überschreiben gelöscht wurden, einfach wiederhergestellt werden, indem eine vorherige Version des Objekts wiederhergestellt wird. Wenn ein Objekt gelöscht wird, wird es durch eine Löschmarkierung ersetzt und die vorherige Version wird gespeichert (nichts wird dauerhaft gelöscht). Zum dauerhaften Löschen einzelner Versionen eines Objekts muss eine Löschanforderung eine _Versions-ID_angeben. Bei einer Abfrage GET eines Objekts wird die zuletzt gespeicherte Version abgerufen. Wenn die aktuelle Version ein Löschmarker ist, gibt IBM Cloud Object Storage einen Fehler 404 Not Found zurück.

Nachdem ein Bucket die Versionssteuerung aktiviert hat, sind alle Objekte im Bucket versionsgesteuert. Alle neuen Objekte (die nach der Aktivierung der Versionsverwaltung für einen Bucket erstellt werden) erhalten eine dauerhaft zugewiesene Versions-ID. Objekten, die vor der Aktivierung der Versionssteuerung (für das Bucket) erstellt wurden, wird eine Version von null zugeordnet. Wenn ein Objekt mit einer null-Versions-ID überschrieben oder gelöscht wird, wird ihm eine neue Versions-ID zugewiesen. Das Aussetzen der Versionierung hat keine Auswirkungen auf bereits vorhandene Objekte, verändert jedoch die Art und Weise, wie zukünftige Anfragen von IBM Cloud Object Storage verarbeitet werden. Nach der Aktivierung kann die Versionssteuerung nur ausgesetzt und nicht vollständig inaktiviert werden. Daher kann ein Bucket drei Status haben, die sich auf die Versionssteuerung beziehen: 1. Standard (nicht versionsgesteuert), 2 Aktiviert oder 3. Ausgesetzt.

Einführung in die Versionssteuerung

Erstellen Sie zunächst ein neues Bucket mit aktivierter Objektversionierung.

  1. Nachdem Sie zu Ihrer Object-Storage-Instanz navigiert sind, klicken Sie auf Bucket erstellen.
  2. Wählen Sie eine Region und Ausfallsicherheit aus, suchen Sie dann nach Objektversionierung und schalten Sie den Selektor auf Aktiviert um.

Freigabe der Versionierung
Freigabe der Versionierung

Erstellen Sie anschließend ein versionsgesteuertes Objekt.

  1. Navigieren Sie zu Ihrem neuen Bucket und laden Sie eine Datei hoch, indem Sie sie in das Browserfenster ziehen.
  2. Nachdem das Objekt erfolgreich hochgeladen wurde, laden Sie ein weiteres Objekt mit demselben Namen hoch. Anstatt überschrieben zu werden, wird der Datei eine UUID zugewiesen und sie wird als veraltete Version des Objekts gespeichert.
  3. Wählen Sie Versionen anzeigen aus, um alternative Versionen von Objekten anzuzeigen und mit ihnen zu interagieren.

Versionen anzeigen
Versionen anzeigen

die Funktion "Versionen anzeigen" muss eingeschaltet werden, bevor einzelne Versionen oder Löschmarkierungen sichtbar und zum Löschen ausgewählt werden können.

Terminologie

Löschmarkierung: Ein 'unsichtbares' Objekt, das den Zugriff auf Versionen des gelöschten Objekts ermöglicht.

Versions-ID: Eine Unicode-kodierte, UTF-8-kodierte, URL-sichere, undurchsichtige Zeichenfolge, die eine eindeutige Version eines Objekts und zugehörige Metadaten angibt und dazu verwendet wird, Anfragen an diese bestimmte Version zu richten. Versions-IDs sind maximal 1.024 Byte lang.

'null': Eine spezielle Versions-ID, die Objekten zugeordnet wurde, die vorhanden waren, als die Versionssteuerung für ein Bucket aktiviert wurde.

Konsistenz und Datenintegrität

Während IBM Cloud Object Storage bei allen Daten-E/A-Vorgängen starke Konsistenz gewährleistet, ist die Bucket-Konfiguration letztendlich konsistent. Nach der erstmaligen Aktivierung der Versionssteuerung für ein Bucket kann es einige Augenblicke dauern, bis die Konfiguration über das System weitergegeben wird. Auch wenn die Versionsverwaltung scheinbar aktiviert ist, warten Sie nach der Aktivierung der Versionsverwaltung 5 Minuten, bevor Sie Anfragen stellen, die voraussichtlich Versionen erstellen oder Markierungen löschen.

IAM-Aktionen

Der Versionssteuerung sind neue IAM-Aktionen zugeordnet.

IAM-Aktionen im Zusammenhang mit der Versionierung
IAM-Aktion Rolle
cloud-object-storage.bucket.put_versioning Manager, Schreibberechtigter
cloud-object-storage.bucket.get_versioning Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.object.get_version Manager, Autor, Leser, Inhaltsleser, Objektleser
cloud-object-storage.object.head_version Manager, Autor, Leser, Inhaltsleser, Objektleser
cloud-object-storage.bucket.delete_version Manager, Schreibberechtigter
cloud-object-storage.object.get_versions Manager, Autor, Leser, Inhaltsleser, Objektleser
cloud-object-storage.object.copy_get_version Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.object.copy_part_get_version Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.object.restore_version Manager, Schreibberechtigter
cloud-object-storage.object.put_tagging_version Manager, Autor, Objekt-Autor
cloud-object-storage.object.get_tagging_version Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.object.delete_tagging_version Manager, Schreibberechtigter

Activity Tracker-Ereignisse

Die Versionsverwaltung löst neue Ereignisse aus.

  • cloud-object-storage.bucket-versioning.create
  • cloud-object-storage.bucket-versioning.read
  • cloud-object-storage.bucket-versioning.list

Managementereignisse für versionsgesteuerte Buckets enthalten ein Feld requestData.versioning.state, das angibt, ob die Versionssteuerung für ein Bucket aktiviert oder ausgesetzt ist.

Die grundlegenden Aktionen DELETE HEAD, GET, PUT, und, die auf Objekte angewendet werden oder Versionen von Objekten erstellen, enthalten ein Feld target.versionId. Das Feld target.versionId ist auch beim Abschluss eines mehrteiligen Uploads und beim Kopieren von Objekten oder Teilen vorhanden, wenn aufgrund dieser Aktionen eine neue Version erstellt wird.

Ein Feld responseData.deleteMarker.created ist vorhanden, wenn ein Objekt gelöscht und eine Löschmarkierung erstellt wird.

Nutzung und Abrechnung

Alle Versionen werden so gemessen, als wären sie gleiche Objekte. Das bedeutet: Wenn ein Bucket ein einzelnes Objekt mit fünf früheren Versionen enthält, ist das von der Resource Configuration API zurückgegebene Feld object_count 6, auch wenn es so aussieht, als befände sich nur ein einziges Objekt im Bucket. Ebenso tragen kumulierte Versionen zur Gesamtnutzung bei und sind fakturierbar. Zusätzlich zum Feld object_count, das von der API Read Bucket Metadata zurückgegeben wird, enthält der API-Antworthauptteil mehrere neue Felder, die der Versionssteuerung zugeordnet sind:

  • noncurrent_object_count: Anzahl der nicht aktuellen Objektversionen im Bucket im Format int64.
  • noncurrent_bytes_used: Gesamtgröße aller nicht aktuellen Objektversionen im Bucket im Format int64.
  • delete_marker_count: Gesamtzahl der Löschmarkierungen im Bucket im Format int64.

Wie bereits erwähnt, kann die Versionssteuerung nur aktiviert oder ausgesetzt werden. Wenn aus irgendeinem Grund die Versionssteuerung vollständig inaktiviert werden soll, ist es erforderlich, den Inhalt des Buckets in ein neues Bucket zu migrieren, für das die Versionssteuerung nicht aktiviert ist.

Interaktionen

Die IBM Cloud Object Storage-Implementierung der S3-APIs für die Versionierung entspricht bis auf wenige Unterschiede den AWS S3-APIs für die Versionierung.

Versionsgesteuerte Objekte archivieren und als verfallen speichern

Lebenszykluskonfigurationen sind in einem für die Version aktivierten Bucket zulässig. Im Gegensatz zu Amazon S3unterliegen neue Versionen jedoch der Archivierungsregel auf dieselbe Weise wie reguläre Objekte. Objekte erhalten ein Übergangsdatum, wenn sie erstellt werden, und werden an ihrem individuellen Übergangsdatum archiviert, unabhängig davon, ob sie aktuelle oder nicht aktuelle Versionen sind. Das Überschreiben eines Objekts hat keinen Einfluss auf das Übergangsdatum der vorherigen Version, und der neuen (aktuellen) Version wird ein Übergangsdatum zugewiesen.

Es ist nicht möglich, NoncurrentVersionTransition-Regeln zu verwenden, um nur nicht aktuelle Versionen von Objekten in einer Lebenszykluskonfiguration zu archivieren.

Unveränderlicher Object Storage (WORM)

Die IBM Cloud Object Storage-Implementierung von Immutable Object Storage (d. h. Aufbewahrungsrichtlinien) ist in Buckets mit aktivierter Versionierung nicht zulässig. Versuche, eine Aufbewahrungsrichtlinie zu erstellen, schlagen fehl, ebenso wie Versuche, die Versionsverwaltung für einen Bucket mit einer Aufbewahrungsrichtlinie zu aktivieren.

Unterstützte S3-APIs

Die folgende Gruppe von REST-APIs kann mit der Versionssteuerung interagieren:

  • GET Object
  • HEAD Object
  • DELETE Object
  • GET Object ACL
  • PUT Object ACL
  • Upload Part Copy
  • Restore Object
  • DELETE Objects
  • List Object Versions
  • PUT Bucket Versioning
  • GET Bucket Versioning
  • PUT Object
  • POST Object
  • Copy Object
  • Complete Multipart Upload
  • PUT Object Tagging
  • GET Object Tagging
  • DELETE Object Tagging
  • PUT Bucket Lifecycle
  • GET Bucket Lifecycle
  • DELETE Bucket Lifecycle

REST-API-Beispiele

Die folgenden Beispiele werden zur Vereinfachung der Verwendung von cURL gezeigt. Umgebungsvariablen werden verwendet, um benutzerspezifische Elemente wie $BUCKET, $TOKEN und $REGION darzustellen. Beachten Sie, dass $REGION auch alle Netztypspezifikationen enthält. Das Senden einer Anforderung an ein Bucket in us-south über das private Netz erfordert, dass die Variable auf private.us-south gesetzt wird.

Versionssteuerung für Bucket aktivieren

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?versioning" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: 8qj8HSeDu3APPMQZVG06WQ==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<VersioningConfiguration>
            <Status>Enabled</Status>
          </VersioningConfiguration>'

Eine erfolgreiche Anforderung gibt eine 200-Antwort zurück.

Versionssteuerung für ein Bucket aussetzen

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?versioning" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: hxXDWuCDWB72Be0LG4XniQ==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<VersioningConfiguration>
            <Status>Suspended</Status>
          </VersioningConfiguration>'

Eine erfolgreiche Anforderung gibt eine 200-Antwort zurück.

Versionen von Objekten in einem Bucket auflisten

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?versions" \
     -H 'Authorization: bearer $TOKEN'

Gibt einen XML-Antworthauptteil zurück:

<ListVersionsResult>
   <IsTruncated>boolean</IsTruncated>
   <KeyMarker>string</KeyMarker>
   <VersionIdMarker>string</VersionIdMarker>
   <NextKeyMarker>string</NextKeyMarker>
   <NextVersionIdMarker>string</NextVersionIdMarker>
   <Version>
      <ETag>string</ETag>
      <IsLatest>boolean</IsLatest>
      <Key>string</Key>
      <LastModified>timestamp</LastModified>
      <Owner>
         <DisplayName>string</DisplayName>
         <ID>string</ID>
      </Owner>
      <Size>integer</Size>
      <StorageClass>string</StorageClass>
      <VersionId>string</VersionId>
   </Version>
   ...
   <DeleteMarker>
      <IsLatest>boolean</IsLatest>
      <Key>string</Key>
      <LastModified>timestamp</LastModified>
      <Owner>
         <DisplayName>string</DisplayName>
         <ID>string</ID>
      </Owner>
      <VersionId>string</VersionId>
   </DeleteMarker>
   ...
   <Name>string</Name>
   <Prefix>string</Prefix>
   <Delimiter>string</Delimiter>
   <MaxKeys>integer</MaxKeys>
   <CommonPrefixes>
      <Prefix>string</Prefix>
   </CommonPrefixes>
   ...
   <EncodingType>string</EncodingType>
</ListVersionsResult>

delimiter: Ein Trennzeichen ist ein Zeichen, das Sie festlegen, um Schlüssel zu gruppieren. Alle Schlüssel, die dieselbe Zeichenfolge zwischen dem Präfix und dem ersten Vorkommen des Begrenzers enthalten, werden unter einem einzelnen Ergebniselement in CommonPrefixes gruppiert. Diese Gruppen werden als ein Ergebnis für die Begrenzung der maximalen Anzahl von Schlüsseln gezählt. Diese Schlüssel werden nicht an anderer Stelle in der Antwort zurückgegeben.

encoding-type: Fordert Object Storage auf, die Objektschlüssel in der Antwort URL-zu-kodieren. Objektschlüssel können beliebige Unicode-Zeichen enthalten; der XML 1.0-Parser kann jedoch bestimmte Zeichen nicht verarbeiten, beispielsweise Zeichen mit einem ASCII-Wert zwischen 0 und 10. Für Zeichen, die in XML 1.0 nicht unterstützt werden, können Sie diesen Parameter hinzufügen, um anzugeben, dass Object Storage die Schlüssel in der Antwort kodieren soll. Gültiger Wert: url.

key-marker: Gibt den Schlüssel an, mit dem bei der Auflistung von Objekten in einem Bucket begonnen werden soll.

max-keys: Legt die maximale Anzahl der in der Antwort zurückgegebenen Schlüssel fest. Standardmäßig gibt die API bis zu 1.000 Schlüsselnamen zurück. Die Antwort enthält möglicherweise weniger Schlüssel, aber niemals mehr.

prefix: Verwenden Sie diesen Parameter, um nur die Schlüssel auszuwählen, die mit dem angegebenen Präfix beginnen.

version-id-marker: Gibt die Objektversion an, bei der die Auflistung beginnen soll.

Versionen von Objekten in einem Bucket löschen

Ein regulärer Aufruf von ListObjects oder ListObjectsV2 gibt keine Versions-IDs zurück. Um die Versions-IDs zu erhalten, die für einen Löschvorgang benötigt werden, müssen Sie ListObjectVersions verwenden: eine GET-Anfrage mit dem Abfrageparameter ?versions. Dies gibt auch die Löschmarkierungen und ihre Versions-IDs zurück. Ohne diesen Schritt ist keiner der folgenden Löschvorgänge möglich.

curl Beispiel:

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?versions" \
  -H 'Authorization: bearer $TOKEN'

Beispiel für die IBM Cloud-CLI:

ibmcloud cos object-versions --bucket $BUCKET

Python-Beispiel:

pythonresponse = cosClient.list_object_versions(Bucket=BUCKET)
for version in response.get('Versions', []):
    print(version['Key'], version['VersionId'])
for marker in response.get('DeleteMarkers', []):
    print(marker['Key'], marker['VersionId'], '(delete marker)')

CLI- und SDK-Beispiele für das Löschen einer bestimmten Version.

Beispiel für die IBM Cloud-CLI:

ibmcloud cos object-delete --bucket $BUCKET --key $OBJECT_KEY --version-id $VERSION_ID

Python-Beispiel:

pythoncosClient.delete_object(
    Bucket=BUCKET,
    Key='my-object.txt',
    VersionId='L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo'
)
Node.js:
javascriptawait cos.deleteObject({
  Bucket: 'my-versioning-bucket',
  Key: 'my-object.txt',
  VersionId: 'L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo'
}).promise();

Beim Löschen aktueller Versionen über die Benutzeroberfläche müssen zuerst die nicht aktuellen Objekte gelöscht werden.

Entfernen einer Löschmarkierung

Das Entfernen einer Löschmarkierung entspricht dem Arbeitsablauf bei der Wiederherstellung eines versehentlich gelöschten Objekts: Sie erhalten die Versions-ID der Löschmarkierung von ListObjectVersions und löschen sie dann anhand dieser Versions-ID.

ID der ungültigen Version löschen

Vorversionen von Objekten erhalten eine Versions-ID von Null, und um diese Version zu löschen, übergeben Sie versionId=null in der Anfrage.

curl Beispiel:

curl -X "DELETE" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/$OBJECT_KEY?versionId=null" \
  -H 'Authorization: bearer $TOKEN'

Python-Beispiel:

cosClient.delete_object(
    Bucket=BUCKET,
    Key='my-object.txt',
    VersionId='null'
)

Operationen für bestimmte Versionen von Objekten

Mehrere APIs verwenden einen neuen Abfrageparameter (?versionId=<VersionId>), der angibt, welche Version des Objekts Sie anfordern. Dieser Parameter wird auf dieselbe Weise zum Lesen, Löschen, Überprüfen von Metadaten und Tags und Wiederherstellen archivierter Objekte verwendet. Um beispielsweise eine Version eines Objekts foo mit der Versions-ID L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo zu lesen, könnte die Anforderung wie folgt aussehen:

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/foo?versionId=L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo" \
     -H 'Authorization: bearer $TOKEN'

Das Löschen dieses Objekts erfolgt auf dieselbe Weise.

curl -X "DELETE" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/foo?versionId=L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo" \
     -H 'Authorization: bearer $TOKEN'

Für Anforderungen, die bereits einen Abfrageparameter verwenden, kann der Parameter versionId am Ende hinzugefügt werden.

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/foo?tagging&versionId=L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo" \
     -H 'Authorization: bearer $TOKEN'

Das serverseitige Kopieren von Objektversionen wird unterstützt, verwendet jedoch eine geringfügig andere Syntax. Der Abfrageparameter wird nicht zur URL URL selbst hinzugefügt, sondern an den x-amz-copy-source Header angehängt. Dies ist dieselbe Syntax wie die Erstellung eines Teils für einen mehrteiligen Teil aus einem Quellenobjekt.

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/<new-object-key>"
 -H "Authorization: bearer $TOKEN"
 -H "x-amz-copy-source: /<source-bucket>/<object-key>?versionId=L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo"

CLI-Beispiele

Sie können die Befehlszeilenschnittstelle IBM Cloud mit dem cos-Plug-in verwenden, um die Versionssteuerung für ein Bucket zu aktivieren.

cos bucket-versioning-put --bucket $BUCKET --versioning-configuration file://vers.json

In diesem Fall ist vers.json ein einfaches Dokument:

{
    "Status": "Enabled"
}

SDK-Beispiele

Die folgenden Beispiele verwenden die IBM Cloud Object Storage-SDKs für Python und Node.js, wobei die Implementierung der Objektversionierung vollständig kompatibel mit jeder S3-compatiblen Bibliothek oder jedem S3-compatible n Tool sein sollte, das die Festlegung benutzerdefinierter Endpunkte ermöglicht. Für die Verwendung von Tools von Drittanbietern sind HMAC-Anmeldedaten erforderlich, um AWS- V4-Signaturen zu berechnen. Weitere Informationen zu HMAC-Berechtigungsnachweisen finden Sie in der Dokumentation.

Python

Die Aktivierung der Versionsverwaltung mithilfe des IBM Cloud Object Storage-SDKs für Python kann entweder über die High-Level-Ressourcen- oder die Low-Level-Client-Syntax erfolgen.

Ressource verwenden:

#!/usr/bin/env python3
import ibm_boto3
from ibm_botocore.config import Config
from ibm_botocore.exceptions import ClientError
#Define constants
API_KEY = os.environ.get('IBMCLOUD_API_KEY')
SERVICE_INSTANCE = os.environ.get('SERVICE_INSTANCE_ID')
ENDPOINT = os.environ.get('ENDPOINT')
BUCKET = "my-versioning-bucket" # The bucket that will enable versioning.
#Create resource client with configuration info pulled from environment variables.
cos = ibm_boto3.resource("s3",
                         ibm_api_key_id=API_KEY,
                         ibm_service_instance_id=SERVICE_INSTANCE,
                         config=Config(signature_version="oauth"),
                         endpoint_url=ENDPOINT
                         )
versioning = cos.BucketVersioning(BUCKET)
versioning.enable()

Die Versionssteuerung für das Bucket kann dann mit versioning.suspend() ausgesetzt werden.

Bei Verwendung derselben cos-Ressource können alle Versionen von Objekten wie folgt aufgelistet werden:

versions = s3.Bucket(BUCKET).object_versions.filter(Prefix=key)
for version in versions:
    obj = version.get()
    print(obj.get('VersionId'), obj.get('ContentLength'), obj.get('LastModified'))

Verwendung eines Clients:

#!/usr/bin/env python3
import ibm_boto3
from ibm_botocore.config import Config
from ibm_botocore.exceptions import ClientError
#Define constants
API_KEY = os.environ.get('IBMCLOUD_API_KEY')
SERVICE_INSTANCE = os.environ.get('SERVICE_INSTANCE_ID')
ENDPOINT = os.environ.get('ENDPOINT')
BUCKET = "my-versioning-bucket" # The bucket that will enable versioning.
#Create resource client with configuration info pulled from environment variables.
cosClient = ibm_boto3.client("s3",
                         ibm_api_key_id=API_KEY,
                         ibm_service_instance_id=SERVICE_INSTANCE,
                         config=Config(signature_version="oauth"),
                         endpoint_url=ENDPOINT
                         )
response = cosClient.put_bucket_versioning(
    Bucket=BUCKET,
    VersioningConfiguration={
        'Status': 'Enabled'
    }
)

Auflisten der Versionen eines Objekts mit demselben Client:

resp = cosClient.list_object_versions(Prefix='some-prefix', Bucket=BUCKET)

Löschen Sie die Versionen eines Objekts, die denselben Mandanten verwenden:

Die APIs von Python sind sehr flexibel, und es gibt viele verschiedene Möglichkeiten, die gleiche Aufgabe zu erfüllen.

Node.js

Aktivieren der Versionsverwaltung mit dem IBM Cloud Object Storage- SDK for Node.js:

const IBM = require('ibm-cos-sdk');
var config = {
    endpoint: '<endpoint>',
    apiKeyId: '<api-key>',
    serviceInstanceId: '<resource-instance-id>',
};
var cos = new IBM.S3(config);
var params = {
    Bucket: 'my-versioning-bucket', /* required */
    VersioningConfiguration: { /* required */
    Status: 'Enabled'
   },
};
s3.putBucketVersioning(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
});