Objekte kopieren - Amazon Simple Storage Service

Willkommen im neuen Amazon-S3-Benutzerhandbuch! Das Amazon-S3-Benutzerhandbuch kombiniert Informationen und Anweisungen aus den drei eingestellten Handbüchern: Amazon-S3-Entwicklerhandbuch, Benutzerhandbuch der Amazon-S3-Konsole und Amazon S3 – Handbuch Erste Schritte.

Objekte kopieren

Die Kopieroperation erzeugt eine Kopie eines Objekts, das bereits in Amazon S3 gespeichert ist. Sie können eine Kopie Ihres Objekts mit einer Größe von bis zu 5 GB in einer einzigen atomaren Operation hochladen. Für das Kopieren von Objekten mit mehr als 5 GB müssen Sie jedoch die API für mehrteilige Uploads verwenden. Mit der copy-Operation können Sie:

  • Zusätzliche Kopien von Objekten erstellen

  • Objekte umbenennen, indem Sie sie kopieren und die Originalobjekte löschen

  • Objekte über Amazon S3-Standorte verschieben (z. B. us-west-1 und Europa)

  • Objektmetadaten ändern

    Jedes Amazon S3-Objekt hat Metadaten. Dies sind Name/Wert-Paare. Sie können Objekt-Metadaten beim Hochladen festlegen. Nachdem Sie das Objekt hochgeladen haben, können Sie Objekt-Metadaten nicht mehr ändern. Die einzige Methode, wie Sie Objekt-Metadaten ändern können, ist es, eine Kopie des Objekts anzulegen und die Metadaten festzulegen. In der Kopieroperation geben Sie dasselbe Objekt als Quelle und Ziel an.

Jedes Objekt hat Metadaten. Einige davon sind Systemmetadaten, andere sind benutzerdefiniert. Benutzer steuern einige der Systemmetadaten, wie beispielsweise die Speicherklassenkonfiguration, die für das Objekt verwendet wird, und die Konfiguration der serverseitigen Verschlüsselung. Wenn Sie ein Objekt kopieren, werden auch die Systemmetadaten und benutzerdefinierte Metadaten kopiert. Amazon S3 setzt die vom System gesteuerten Metadaten zurück. Wenn Sie beispielsweise ein Objekt kopieren, setzt Amazon S3 das Erstellungsdatum des kopierten Objekts zurück. Sie brauchen keine dieser Werte in Ihrer Kopieranforderung festlegen.

Wenn Sie ein Objekt kopieren, wollen Sie möglicherweise einige der Metadatenwerte aktualisieren. Wenn Ihr Quellobjekt beispielsweise für die Verwendung des Standardspeichers konfiguriert ist, könnten Sie entscheiden, für die Objektkopie RRS zu verwenden. Außerdem könnten Sie entscheiden, einige der benutzerdefinierten Metadatenwerte für das Quellobjekt zu aktualisieren. Wenn Sie entschieden haben, beim Kopieren vom Benutzer des Objekts konfigurierbare Metadaten zu aktualisieren (System oder benutzerdefiniert), müssen Sie explizit alle vom Benutzer konfigurierbaren Metadaten angeben, die im Quellobjekt Ihrer Anforderung vorhanden sind, selbst wenn Sie nur einen der Metadatenwerte ändern.

Weitere Informationen zu Objekt-Metadaten erhalten Sie unter Arbeiten mit Objekt-Metadaten.

Anmerkung

Beim Kopieren von Objekten können Sie Amazon S3 anweisen, das Zielobjekt mit einem AWS Key Management-Service (AWS KMS)-Kundenhauptschlüssel (CMK), einem von Amazon S3 verwalteten Verschlüsselungsschlüssel oder einem vom Kunden bereitgestellten Verschlüsselungsschlüssel zu speichern. Dementsprechend müssen Sie Verschlüsselungsinformationen in Ihrer Anforderung angeben. Handelt es sich bei der Quelle um ein Objekt, das in Amazon S3 unter Verwendung einer serverseitigen Verschlüsselung mit einem vom Kunden bereitgestellten Schlüssel verschlüsselt ist, müssen Sie Verschlüsselungsschlüsselinformationen in Ihrer Anforderung bereitstellen, sodass Amazon S3 das Objekt zum Kopieren verschlüsseln kann. Weitere Informationen finden Sie unter Datenschutz durch Verschlüsselung.

Um mehr als ein Amazon S3-Objekt mit einer einzigen Anforderung zu kopieren, können Sie Amazon S3-Batchoperationen verwenden. Sie stellen S3-Batchoperationen eine Liste von Objekten zur Verfügung, für die Operationen ausgeführt werden sollen. S3-Batchoperationen rufen die entsprechende API auf, um die angegebene Operation durchzuführen. Ein einzelner Batchoperationenauftrag kann die angegebene Operation für Milliarden von Objekten ausführen, die Exabytes von Daten enthalten.

Die Funktion "S3-Batchoperationen" verfolgt den Fortschritt, versendet Benachrichtigungen und speichert einen detaillierten Abschlussbericht zu allen Aktionen. Sie profitieren von einer vollständig verwalteten, prüfbaren und serverlosen Umgebung. Sie können S3-Batchoperationen über die AWS-Managementkonsole, die AWS CLI, AWS SDKs oder REST API ausführen. Weitere Informationen finden Sie unter Grundlagen von S3-Batchoperationen.

Ein Objekt kopieren

Um ein Objekt zu kopieren, verwenden Sie die folgenden Beispiele.

In der S3-Konsole können Sie ein Objekt kopieren oder verschieben. Weitere Informationen finden Sie in den folgenden Verfahren.

Ein Objekt kopieren

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3.

  2. Navigieren Sie zum Amazon S3-Bucket oder -Ordner, der die Objekte enthält, die Sie kopieren möchten.

  3. Markieren Sie das Kontrollkästchen links neben den Namen der Objekte, die Sie kopieren möchten.

  4. Wählen Sie Actions (Aktionen) und wählen Sie aus der angezeigten Liste der Optionen die Option Copy (Kopieren) aus.

    Oder wählen Sie aus den Optionen oben rechts die Option Copy (Kopieren) aus.

  5. Wählen Sie den Zieltyp und das Zielkonto aus. Um den Zielpfad anzugeben, wählen Sie Browse S3 (S3 durchsuchen), navigieren Sie zum Ziel und markieren Sie das Kontrollkästchen links von dem Ziel. Wählen Sie unten rechts Choose destination (Ziel auswählen).

    Geben Sie alternativ den Zielpfad ein.

  6. Wenn Sie die Bucket-Versionierung nicht aktiviert haben, werden Sie möglicherweise aufgefordert, zu bestätigen, dass vorhandene Objekte mit demselben Namen überschrieben werden. Wenn dies in Ordnung ist, markieren Sie das Kontrollkästchen und fahren Sie fort. Wenn Sie alle Versionen von Objekten in diesem Bucket behalten möchten, wählen Sie Enable Bucket Versioning (Bucket-Versionierung aktivieren). Sie können auch die Eigenschaften der Standardverschlüsselung und der Objektsperre aktualisieren.

  7. Wählen Sie unten rechts Copy (Kopieren), und Amazon S3 verschiebt Ihre Objekte zum Ziel.

So verschieben Sie Objekte:

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3.

  2. Navigieren Sie zum Amazon S3-Bucket oder -Ordner, der die Objekte enthält, die Sie verschieben möchten.

  3. Markieren Sie das Kontrollkästchen links neben den Namen der Objekte, die Sie verschieben möchten.

  4. Wählen Sie Actions (Aktionen) und wählen Sie aus der angezeigten Optionsliste Move (Verschieben).

    Oder wählen Sie Move (Verschieben) aus den Optionen oben rechts.

  5. Um den Zielpfad anzugeben, wählen Sie Browse S3 (S3 durchsuchen), navigieren Sie zum Ziel und markieren Sie das Kontrollkästchen links von dem Ziel. Wählen Sie unten rechts Choose destination (Ziel auswählen).

    Geben Sie alternativ den Zielpfad ein.

  6. Wenn Sie die Bucket-Versionierung nicht aktiviert haben, werden Sie möglicherweise aufgefordert, zu bestätigen, dass vorhandene Objekte mit demselben Namen überschrieben werden. Wenn dies in Ordnung ist, markieren Sie das Kontrollkästchen und fahren Sie fort. Wenn Sie alle Versionen von Objekten in diesem Bucket behalten möchten, wählen Sie Enable Bucket Versioning (Bucket-Versionierung aktivieren). Sie können auch die Eigenschaften der Standardverschlüsselung und der Objektsperre aktualisieren.

  7. Wählen Sie unten rechts Move (Verschieben), und Amazon S3 verschiebt Ihre Objekte zum Ziel.

Anmerkung
  • Diese Aktion erstellt eine Kopie aller angegebenen Objekte mit aktualisierten Einstellungen, aktualisiert das Datum der letzten Änderung am angegebenen Speicherort und fügt dem ursprünglichen Objekt eine Löschmarkierung hinzu.

  • Warten Sie beim Verschieben von Ordnern, bis die Verschiebungsaktion abgeschlossen ist, bevor Sie weitere Änderungen für die Ordner ausführen.

  • Objekte, die mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln (SSE-C) verschlüsselt wurden, können nicht mit der S3-Konsole kopiert werden. Um mit SSE-C verschlüsselte Objekte zu kopieren, verwenden Sie die AWS CLI, das AWS SDK oder die Amazon S3-REST-API.

  • Diese Aktion aktualisiert Metadaten für Bucket-Versionierung, Verschlüsselung, Objektsperre-Funktionen und archivierte Objekte.

Die Beispiele in diesem Abschnitt zeigen, wie Objekte mit bis zu 5 GB in einer einzigen Operation kopiert werden können. Für das Kopieren von Objekten mit mehr als 5 GB müssen Sie die API für mehrteilige Uploads verwenden. Weitere Informationen finden Sie unter Kopieren eines Objekts mit Multipart-Upload.

Java

Das folgende Beispiel kopiert ein Objekt mit AWS SDK for Java in Amazon S3. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CopyObjectRequest; import java.io.IOException; public class CopyObjectSingleOperation { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String sourceKey = "*** Source object key *** "; String destinationKey = "*** Destination object key ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Copy the object into a new object in the same bucket. CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, sourceKey, bucketName, destinationKey); s3Client.copyObject(copyObjRequest); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

Das folgende C#-Beispiel verwendet High-Level-AWS SDK for .NET, um Objekte bis zu einer Größe von 5 GB in einer einzigen Operation zu kopieren. Für Objekte mit mehr als 5 GB müssen Sie das in Kopieren eines Objekts mit Multipart-Upload beschriebene Kopierbeispiel für mehrteilige Uploads verwenden.

In diesem Beispiel wird eine Kopie eines Objekts bis zu einer Größe von 5 GB erstellt. Weitere Informationen zur Kompatibilität des Beispiels mit einer bestimmten Version von AWS SDK for .NET sowie Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels, finden Sie unter Ausführen der .NET-Codebeispiele für Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CopyObjectTest { private const string sourceBucket = "*** provide the name of the bucket with source object ***"; private const string destinationBucket = "*** provide the name of the bucket to copy the object to ***"; private const string objectKey = "*** provide the name of object to copy ***"; private const string destObjectKey = "*** provide the destination object key name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); Console.WriteLine("Copying an object"); CopyingObjectAsync().Wait(); } private static async Task CopyingObjectAsync() { try { CopyObjectRequest request = new CopyObjectRequest { SourceBucket = sourceBucket, SourceKey = objectKey, DestinationBucket = destinationBucket, DestinationKey = destObjectKey }; CopyObjectResponse response = await s3Client.CopyObjectAsync(request); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }
PHP

Dieses Thema führt Sie durch die Verwendung der AWS SDK for PHP-Klassen aus Version 3 für das Kopieren eines einzelnen Objekts sowie mehrerer Objekte in Amazon S3 aus einem Bucket in einen anderen oder innerhalb desselben Buckets.

Dieser Abschnitt setzt voraus, dass Sie den Anweisungen für Verwenden des AWS SDK for PHP und Ausführen von PHP-Beispielen folgen und das AWS SDK for PHP ordnungsgemäß installiert ist.

Das folgende PHP-Beispiel verdeutlicht die Verwendung der copyObject()-Methode zum Kopieren eines einzelnen Objekts in Amazon S3 sowie die Verwendung eines Aufrufstapels von CopyObject mit der getcommand()-Methode, um mehrere Kopien eines Objekts zu erstellen.

1

Erstellen Sie mit dem Klassenkonstruktor Aws\S3\S3Client eine Instance eines Amazon S3-Clients.

2

Um mehrere Kopien eines Objekts zu erstellen, führen Sie einen Aufrufstapel für die Methode getCommand() des Amazon S3-Clients aus, die von der Klasse Aws\CommandInterface geerbt wird. Sie stellen den CopyObject-Befehl als erstes Argument, sowie ein Array mit dem Quell-Bucket, dem Quellschlüsselnamen, dem Ziel-Bucket und dem Zielschlüsselnamen als zweites Argument bereit.

require 'vendor/autoload.php'; use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Copy an object. $s3->copyObject([ 'Bucket' => $targetBucket, 'Key' => "{$sourceKeyname}-copy", 'CopySource' => "{$sourceBucket}/{$sourceKeyname}", ]); // Perform a batch of CopyObject operations. $batch = array(); for ($i = 1; $i <= 3; $i++) { $batch[] = $s3->getCommand('CopyObject', [ 'Bucket' => $targetBucket, 'Key' => "{targetKeyname}-{$i}", 'CopySource' => "{$sourceBucket}/{$sourceKeyname}", ]); } try { $results = CommandPool::batch($s3, $batch); foreach($results as $result) { if ($result instanceof ResultInterface) { // Result handling here } if ($result instanceof AwsException) { // AwsException handling here } } } catch (\Exception $e) { // General error handling here }
Ruby

Die folgenden Aufgaben führen Sie durch die Verwendung der Ruby-Klassen für das Kopieren eines Objekts in Amazon S3 aus einem Bucket in einen anderen oder innerhalb desselben Buckets.

1

Verwenden Sie das modularisierte Amazon S3-Gem für Version 3 des AWS SDK for Ruby, fordern Sie 'aws-sdk-s3' an und geben Sie Ihre AWS-Anmeldeinformationen an. Weitere Informationen zur Bereitstellung Ihrer Anmeldeinformationen finden Sie in Anfragen unter Verwendung von Anmeldeinformationen von AWS-Konten oder von IAM-Benutzern.

2

Stellen Sie müssen die Anforderungsinformationen bereit, wie beispielsweise den Bucket-Namen, den Quellschlüsselnamen, den Ziel-Bucket-Namen und den Zielschlüssel.

Das folgende Ruby-Codebeispiel demonstriert die oben beschriebenen Aufgaben unter Verwendung der #copy_object-Methode zum Kopieren eines Objekts aus einem Bucket in einen anderen.

require 'aws-sdk-s3' # Copies an object from one Amazon S3 bucket to another. # # Prerequisites: # # - Two S3 buckets (a source bucket and a target bucket). # - An object in the source bucket to be copied. # # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param source_bucket_name [String] The source bucket's name. # @param source_key [String] The name of the object # in the source bucket to be copied. # @param target_bucket_name [String] The target bucket's name. # @param target_key [String] The name of the copied object. # @return [Boolean] true if the object was copied; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-east-1') # exit 1 unless object_copied?( # s3_client, # 'doc-example-bucket1', # 'my-source-file.txt', # 'doc-example-bucket2', # 'my-target-file.txt' # ) def object_copied?( s3_client, source_bucket_name, source_key, target_bucket_name, target_key) return true if s3_client.copy_object( bucket: target_bucket_name, copy_source: source_bucket_name + '/' + source_key, key: target_key ) rescue StandardError => e puts "Error while copying object: #{e.message}" end

Dieses Beispiel beschreibt, wie ein Objekt mit REST kopiert wird. Weitere Informationen über die REST-API finden Sie unter PUT Object (Copy).

Dieses Beispiel kopiert das flotsam-Objekt aus dem pacific-Bucket in das jetsam-Objekt des atlantic-Buckets, wobei seine Metadaten beibehalten werden.

PUT /jetsam HTTP/1.1 Host: atlantic.s3.amazonaws.com x-amz-copy-source: /pacific/flotsam Authorization: AWS AKIAIOSFODNN7EXAMPLE:ENoSbxYByFA0UGLZUqJN5EUnLDg= Date: Wed, 20 Feb 2008 22:12:21 +0000

Die Signatur wurde aus den folgenden Informationen generiert.

PUT\r\n \r\n \r\n Wed, 20 Feb 2008 22:12:21 +0000\r\n x-amz-copy-source:/pacific/flotsam\r\n /atlantic/jetsam

Amazon S3 gibt die folgende Antwort zurück, die das ETag des Objekts angibt, und wann es zuletzt geändert wurde.

HTTP/1.1 200 OK x-amz-id-2: Vyaxt7qEbzv34BnSu5hctyyNSlHTYZFMWK4FtzO+iX8JQNyaLdTshL0KxatbaOZt x-amz-request-id: 6B13C3C5B34AF333 Date: Wed, 20 Feb 2008 22:13:01 +0000 Content-Type: application/xml Transfer-Encoding: chunked Connection: close Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <LastModified>2008-02-20T22:13:01</LastModified> <ETag>"7e9c608af58950deeb370c98608ed097"</ETag> </CopyObjectResult>