Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
So verhindern Sie Objektüberschreibungen durch bedingte Schreibvorgänge
Durch die Verwendung von bedingten Schreibvorgängen können Sie Ihren WRITE
-Anforderungen einen zusätzlichen Header hinzufügen, um die Vorbedingungen für Ihre Amazon-S3-Operation festzulegen. Um Objekte bedingt zu schreiben, fügen Sie den If-None-Match
-HTTP- oder If-Match
-Header hinzu.
Der If-None-Match
-Header verhindert das Überschreiben vorhandener Daten, indem er überprüft, ob sich nicht bereits ein Objekt mit demselben Schlüsselnamen in Ihrem Bucket befindet.
Alternativ können Sie den If-Match
Header hinzufügen, um das Entity-Tag (ETag) eines Objekts zu überprüfen, bevor Sie ein Objekt schreiben. Mit diesem Header vergleicht Amazon S3 den bereitgestellten ETag Wert mit dem ETag Wert des Objekts in S3. Wenn die ETag Werte nicht übereinstimmen, schlägt der Vorgang fehl.
Bucket-Eigentümer können Bucket-Richtlinien verwenden, um bedingte Schreibvorgänge für hochgeladene Objekte zu erzwingen. Weitere Informationen finden Sie unter Erzwingen bedingter Schreibvorgänge in Amazon-S3-Buckets.
Anmerkung
Um bedingte Schreibvorgänge verwenden zu können, müssen Sie die Anforderungen über HTTPS (TLS) stellen oder AWS Signature Version 4 verwenden, um die Anforderung zu signieren.
Themen
So verhindern Sie Objektüberschreibungen auf der Grundlage von Schlüsselnamen
Sie können den bedingten If-None-Match
-HTTP-Header verwenden, um anhand seines Schlüsselnamens zu überprüfen, ob ein Objekt bereits im angegebenen Bucket vorhanden ist, bevor Sie es erstellen. Wenn Sie ein Objekt in Amazon S3 hochladen, geben Sie den Schlüsselnamen an: eine eindeutige, zwischen Groß- und Kleinschreibung unterscheidende Kennung eines Objekts in einem Bucket. Ohne den If-None-Match
-HTTP-Header wird das Objekt überschrieben, wenn Sie ein Objekt mit einem identischen Schlüsselnamen in einen Bucket ohne Version hochladen oder wenn die Version gesperrt ist. In einem versionierten Bucket wird das zuletzt hochgeladene Objekt zur aktuellen Version des Objekts. Bedingte Schreibvorgänge mit dem If-None-Match
-HTTP-Header prüfen während des WRITE
-Vorgangs, ob ein Objekt vorhanden ist. Wenn im Bucket ein identischer Schlüsselname gefunden wird, schlägt der Vorgang fehl. Weitere Informationen über das Verwenden von Schlüsselnamen finden Sie unter Markieren von Amazon-S3-Objekten.
Um bedingte Schreibvorgänge mit dem If-None-Match
-HTTP-Header durchzuführen, benötigen Sie die entsprechende s3:PutObject
-Berechtigung. Dadurch kann der Aufrufer überprüfen, ob Objekte im Bucket vorhanden sind. Der If-None-Match
-Header erwartet den *-Wert (Sternchen).
Sie können den If-None-Match
Header wie folgt verwenden APIs:
Der folgende Beispielbefehl put-object
versucht, einen bedingten Schreibvorgang für ein Objekt mit dem Schlüsselnamen dir-1/my_images.tar.bz2
durchzuführen.
aws s3api put-object --bucket
amzn-s3-demo-bucket
--key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"
Weitere Informationen finden Sie unter put-object
Informationen zu dem AWS CLI finden Sie unter Was ist der AWS Command Line Interface? im AWS Command Line Interface Benutzerhandbuch.
So verhindern Sie Überschreibungen, wenn sich das Objekt geändert hat
Bei einem Objekt ETag handelt es sich um eine Zeichenfolge, die für das Objekt eindeutig ist und eine Änderung am Inhalt des Objekts widerspiegelt. Sie können den If-Match
Header verwenden, um den ETag Wert eines Objekts in einem Amazon S3 S3-Bucket mit einem Objekt zu vergleichen, das Sie während des WRITE
Vorgangs angeben. Wenn die ETag Werte nicht übereinstimmen, schlägt der Vorgang fehl. Weitere Hinweise zu finden ETags Sie unterVerwenden Sie Content- MD5 und the, um hochgeladene ETag Objekte zu verifizieren.
Um bedingte Schreibvorgänge mit einem If-Match
-HTTP-Header durchzuführen, benötigen Sie die Berechtigungen s3:GetObject
und s3:PutObject
. Auf diese Weise kann der Aufrufer den Zustand der Objekte im Bucket überprüfen ETag und deren Status verifizieren. Der If-Match
Header erwartet den ETag Wert als Zeichenfolge.
Sie können den If-Match
Header wie folgt verwenden APIs:
Der folgende put-object
Beispielbefehl versucht, einen bedingten Schreibvorgang mit dem angegebenen ETag Wert durchzuführen6805f2cfc46c0f04559748bb039d69ae
.
aws s3api put-object --bucket
amzn-s3-demo-bucket
--key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae
"
Weitere Informationen finden Sie unter put-object
Weitere Informationen zu finden Sie unter Was ist der AWS Command Line Interface? AWS CLI im AWS Command Line Interface Benutzerhandbuch.
Bedingtes Schreibverhalten
- Bedingte Schreibvorgänge mit dem
If-None-Match
-Header -
Bedingte Schreibvorgänge mit dem
If-None-Match
-Header werden anhand vorhandener Objekte in einem Bucket ausgewertet. Wenn im Bucket kein Objekt mit demselben Schlüsselnamen vorhanden ist, ist der Schreibvorgang erfolgreich, was zu einer200 OK
-Antwort führt. Wenn ein Objekt vorhanden ist, schlägt der Schreibvorgang fehl, was zu einer412 Precondition Failed
-Antwort führt.Bei Buckets mit aktivierter Versionsverwaltung ist der Schreibvorgang erfolgreich, wenn es keine aktuelle Objektversion mit demselben Namen gibt oder wenn es sich bei der aktuellen Objektversion um eine Löschmarkierung handelt. Andernfalls führt dies zu einem fehlgeschlagenen Schreibvorgang mit einer
412 Precondition Failed
-Antwort.Wenn mehrere bedingte Schreibvorgänge für denselben Objektnamen ausgeführt werden, ist der erste abgeschlossene Schreibvorgang erfolgreich. In Amazon S3 schlagen dann nachfolgende Schreibvorgänge mit einer
412 Precondition Failed
-Antwort fehl.Sie können auch bei gleichzeitigen Anforderungen eine
409 Conflict
-Antwort erhalten, wenn eine Löschanforderung für ein Objekt erfolgreich ist, bevor ein bedingter Schreibvorgang für dieses Objekt abgeschlossen ist. Wenn Sie bedingte Schreibvorgänge mitPutObject
verwenden, werden Uploads möglicherweise erneut versucht, nachdem ein409 Conflict
-Fehler aufgetreten ist. Wenn SieCompleteMultipartUpload
verwenden, muss der gesamte mehrteilige Upload mitCreateMultipartUpload
erneut initiiert werden, um das Objekt nach Erhalt eines409 Conflict
-Fehlers wieder hochzuladen. - Bedingte Schreibvorgänge mit dem
If-Match
-Header -
Der
If-Match
-Header wird anhand vorhandener Objekte in einem Bucket ausgewertet. Wenn es ein Objekt mit demselben Schlüsselnamen und derselben Übereinstimmung gibt ETag, ist der Schreibvorgang erfolgreich, was zu einer200 OK
Antwort führt. Wenn das ETag nicht übereinstimmt, schlägt der Schreibvorgang mit einer412 Precondition Failed
Antwort fehl.Sie können auch bei gleichzeitigen Anforderungen eine
409 Conflict
-Antwort erhalten.Sie erhalten eine
404 Not Found
-Antwort, wenn eine gleichzeitige Löschanforderung für ein Objekt erfolgreich ist, bevor ein bedingter Schreibvorgang für dieses Objekt abgeschlossen ist, da der Objektschlüssel nicht mehr existiert. Sie sollten das Objekt erneut hochladen, wenn Sie eine404 Not Found
-Antwort erhalten.Wenn es keine aktuelle Objektversion mit demselben Namen gibt oder wenn es sich bei der aktuellen Objektversion um eine Löschmarkierung handelt, schlägt der Vorgang mit einem
404 Not Found
-Fehler fehl.
Bedingte Schreibszenarien
Berücksichtigen Sie die folgenden Szenarien, in denen zwei Clients Operationen auf demselben Bucket ausführen.
Bedingte Schreibvorgänge bei mehrteiligen Uploads
Bedingte Schreibvorgänge berücksichtigen keine laufenden Anforderungen für mehrteilige Uploads, da es sich bei diesen um noch nicht vollständig geschriebene Objekte handelt. Sehen Sie sich das folgende Beispiel an, in dem Client 1 ein Objekt mithilfe eines mehrteiligen Uploads hochlädt. Während des mehrteiligen Uploads kann Client 2 dasselbe Objekt mit dem bedingten Schreibvorgang erfolgreich schreiben. Wenn Client 1 anschließend versucht, den mehrteiligen Upload mithilfe eines bedingten Schreibvorgangs abzuschließen, schlägt der Upload fehl.
Anmerkung
Dieses Szenario führt zu einer 412 Precondition Failed
-Antwort sowohl für If-None-Match
- als auch für If-Match
-Header.

Gleichzeitiges Löschen bei mehrteiligen Uploads
Wenn eine Löschanforderung erfolgreich ist, bevor eine bedingte Schreibanforderung abgeschlossen werden kann, gibt Amazon S3 eine 409 Conflict
- oder 404 Not Found
-Antwort für den Schreibvorgang zurück. Das liegt daran, dass die zuvor initiierte Löschanforderung Vorrang vor dem bedingten Schreibvorgang hat. In solchen Fällen müssen Sie einen neuen mehrteiligen Upload initiieren.
Anmerkung
Dieses Szenario führt zu einer 409 Conflict
-Antwort für einen If-None-Match
-Header und einer 404 Not Found
-Antwort für einen If-Match
-Header.

Anmerkung
Wir empfehlen, eine Lebenszyklusregel zu konfigurieren, durch die unvollständige mehrteilige Uploads nach einer bestimmten Anzahl von Tagen mit der Aktion AbortIncompleteMultipartUpload
gelöscht werden, um Ihre Speicherkosten gering zu halten. Weitere Informationen zum Erstellen einer Lebenszyklusregel zum Löschen unvollständiger mehrteiliger Uploads finden Sie unter Konfigurieren einer Bucket-Lebenszykluskonfiguration zum Löschen unvollständiger mehrteiliger Uploads.