Übertragung von S3-kompatiblem Speicher zu Cloud Storage

Storage Transfer Service unterstützt Übertragungen von cloudbasierten oder lokalen Objektspeichersystemen, die mit der Amazon S3 API kompatibel sind.

Storage Transfer Service greift auf Ihre Daten in S3-kompatiblem Speicher zu, indem Sie Übertragungs-Agents verwenden, die auf VMs in der Nähe der Datenquelle bereitgestellt werden. Diese Agents werden in einem Docker-Container ausgeführt und gehören zu einem Agent-Pool, also einer Sammlung von Agents, die dieselbe Konfiguration verwenden und Ihre Daten parallel verschieben.

Mit diesem Feature können Sie von einem lokalen oder Cloud-Objektspeicher zu Cloud Storage migrieren, Daten archivieren, um lokale Speicherkapazität freizugeben, Daten zur Geschäftskontinuität in Google Cloud zu replizieren oder Daten zur Analyse und Verarbeitung in Google Cloud zu übertragen. Für Kunden, die von AWS S3 zu Cloud Storage migrieren, bietet diese Funktion die Möglichkeit, Netzwerkrouten zu Google Cloud zu steuern, was zu deutlich geringeren Gebühren für ausgehende Datenübertragungen führt.

Hinweise

Führen Sie vor der Konfiguration der Übertragungen die folgenden Schritte aus:

Quellanmeldedaten abrufen

Für die Übertragung von S3-kompatiblen Speichern sind eine Zugriffsschlüssel-ID und ein geheimer Zugriffsschlüssel erforderlich.

Die Schritte zum Abrufen dieser Daten hängen vom Speicheranbieter ab.

Für das Konto, aus dem die ID und der Schlüssel generiert werden, ist eine der folgenden Berechtigungen erforderlich:

  • Leseberechtigung für Quellobjekte, wenn Sie Objekte an der Quelle nicht löschen möchten.
  • Vollständiger Zugriff auf Quellobjekte, wenn Sie Objekte im Rahmen der Übertragung in der Quelle löschen möchten.

Wenn Sie das Konto erstellt, die Berechtigungen hinzugefügt und die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel heruntergeladen haben, speichern Sie die ID und den Schlüssel an einem sicheren Ort.

Google Cloud-Berechtigungen konfigurieren

Bevor Sie eine Übertragung erstellen, müssen Sie Berechtigungen für die folgenden Entitäten konfigurieren:

Das Nutzerkonto, mit dem die Übertragung erstellt wird. Das ist das Konto, mit dem Sie in der Google Cloud Console angemeldet sind, oder das Konto, das bei der Authentifizierung in der gcloud CLI angegeben wird. Das Nutzerkonto kann ein reguläres Nutzerkonto oder ein nutzerverwaltetes Dienstkonto sein.
Das von Google verwaltete Dienstkonto, auch als Dienst-Agent bezeichnet, das vom Storage Transfer Service verwendet wird. Dieses Konto wird in der Regel anhand seiner E-Mail-Adresse identifiziert, die das Format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com hat.
Das Konto des Migrations-Agents, das Google Cloud-Berechtigungen für Migrations-Agents bereitstellt. Für die Authentifizierung von Transfer-Agent-Konten werden die Anmeldedaten des Nutzers verwendet, der sie installiert, oder die Anmeldedaten eines nutzerverwalteten Dienstkontos.

Eine Anleitung finden Sie unter Agentbasierte Berechtigungen für die Weiterleitung.

Übertragungsoptionen

Die folgenden Storage Transfer Service-Funktionen sind für Übertragungen von S3-kompatiblem Speicher zu Cloud Storage verfügbar:

Bestimmte Dateien mithilfe eines Manifests übertragen
Sie können eine Liste von Dateien an den Storage Transfer Service übergeben. Weitere Informationen finden Sie unter Bestimmte Dateien oder Objekte mithilfe eines Manifests übertragen.
Speicherklasse angeben
Sie können die Cloud Storage-Speicherklasse angeben, die für Ihre Daten im Ziel-Bucket verwendet werden soll. REST-Details finden Sie in den Optionen StorageClass. Sie können auch das Flag --custom-storage-class mit der Google Cloud CLI verwenden.

Alle Speicherklasseneinstellungen werden ignoriert, wenn für den Zielbucket Autoclass aktiviert ist. Wenn Autoclass aktiviert ist, werden Objekte, die in den Bucket übertragen werden, anfangs auf „Standard Storage“ gesetzt.

Metadaten beibehalten

Wenn Sie Dateien aus S3-kompatiblem Speicher übertragen, kann Storage Transfer Service optional bestimmte Attribute als benutzerdefinierte Metadaten beibehalten.

Weitere Informationen dazu, welche Metadaten aufbewahrt werden können und wie Sie die Übertragung konfigurieren, finden Sie im Abschnitt Von Amazon S3 oder S3-kompatiblem Speicher zu Cloud Storage des Artikels Metadatenaufbewahrung.

Logging und Monitoring
Übertragungen von S3-kompatiblem Speicher können in Cloud Logging und Cloud Monitoring eingesehen werden. Weitere Informationen finden Sie unter Cloud Logging für Storage Transfer Service und Übertragungsjobs überwachen. Sie können auch Pub/Sub-Benachrichtigungen konfigurieren.

Agent-Pool erstellen

Der Name des Kundenservicemitarbeiterpools oder das Präfix der Kundenservicemitarbeiter-ID darf keine vertraulichen Informationen wie personenidentifizierbare Informationen oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und für interne Google-Systeme außerhalb Ihres Projekts freigegeben werden.

So erstellen Sie einen Agent-Pool:

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Agent-Pools auf.

    Zu „Agent-Pools“

    Die Seite Agent-Pools wird angezeigt, auf der die vorhandenen Agent-Pools aufgeführt sind.

  2. Klicken Sie auf Weiteren Pool erstellen.

  3. Benennen Sie den Pool und beschreiben Sie ihn eventuell.

  4. Sie können ein Bandbreitenlimit festlegen, das für den gesamten Pool gilt. Die angegebene Bandbreite in MB/s wird zwischen allen Agents im Pool aufgeteilt. Weitere Informationen finden Sie unter Netzwerkbandbreite verwalten.

  5. Klicken Sie auf Erstellen.

REST API

Verwenden Sie projects.agentPools.create:

POST https://storagetransfer.googleapis.com/v1/projects/PROJECT_ID/agentPools?agent_pool_id=AGENT_POOL_ID

Wobei:

  • PROJECT_ID: die Projekt-ID ist, in der Sie den Agent-Pool erstellen.
  • AGENT_POOL_ID: die Agent-Pool-ID ist, die Sie erstellen.

Wenn ein Agent-Pool länger als 30 Minuten im Status Creating verbleibt, empfehlen wir, den Agent-Pool zu löschen und neu zu erstellen.

Der Widerruf der erforderlichen Storage Transfer Service-Berechtigungen aus einem Projekt, während sich ein Agent-Pool im Status Creating befindet, führt zu einem falschen Dienstverhalten.

gcloud CLI

Führen Sie [gcloud transfer agent-pools create][agent-pools-create] aus, um einen Agent-Pool mit dem gcloud-Befehlszeilentool zu erstellen.

gcloud transfer agent-pools create AGENT_POOL

Folgende Optionen sind verfügbar:

  • AGENT_POOL ist eine eindeutige, permanente Kennzeichnung für diesen Pool.

  • --no-async blockiert andere Aufgaben in Ihrem Terminal, bis der Pool erstellt wurde. Wenn nicht enthalten, wird die Poolerstellung asynchron ausgeführt.

  • --bandwidth-limit legt fest, wie viel von Ihrer Bandbreite in MB/s den Agents dieses Pools zur Verfügung gestellt werden soll. Ein Bandbreitenlimit gilt für alle Agents in einem Pool und kann verhindern, dass die Übertragungsarbeitslast des Pools andere Vorgänge unterbricht, die die Bandbreite ebenfalls nutzen. Geben Sie beispielsweise „50” ein, um ein Bandbreitenlimit von 50 MB/s festzulegen. Wenn Sie dieses Flag nicht angeben, verwenden die Agents dieses Pools die gesamte verfügbare Bandbreite.

  • --display-name ist ein änderbarer Name, mit dem Sie diesen Pool identifizieren können. Sie können Details angeben, die möglicherweise nicht in den eindeutigen vollständigen Ressourcennamen des Pools passen.

Übertragungs-Agents installieren

Übertragungs-Agents sind Software-Agents, die Übertragungsaktivitäten von Ihrer Quelle über Storage Transfer Service koordinieren. Sie müssen auf einem System installiert sein, das Zugriff auf Ihre Quelldaten hat.

gcloud-CLI

Wenn Sie Agents für die Verwendung mit einer S3-kompatiblen Quelle mit der Befehlszeile gcloud installieren möchten, verwenden Sie den Befehl transfer agents install.

Sie müssen Anmeldedaten entweder als Umgebungsvariablen als Werte von AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY oder als Standardanmeldedaten in den Konfigurationsdateien Ihres Systems speichern.

export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME

Verwenden Sie die Option --creds-file, um Agents mit einem Dienstkontoschlüssel auszuführen:

gcloud transfer agents install --pool=POOL_NAME \
  --creds-file=/relative/path/to/service-account-key.json

Übertragungsjob erstellen

Google Cloud Console

So erstellen Sie eine Übertragung von einer S3-kompatiblen Quelle in einen Cloud Storage-Bucket:

  1. Rufen Sie in der Google Cloud Console die Seite Storage Transfer Service auf.

    Storage Transfer Service aufrufen

  2. Klicken Sie auf Übertragung erstellen. Die Seite Übertragungsjob erstellen wird angezeigt.

  3. Wählen Sie als Quelltyp S3-kompatibler Objektspeicher aus. Das Ziel muss Google Cloud Storage sein.

    Klicken Sie auf Next step (Nächster Schritt).

Quelle konfigurieren

  1. Geben Sie die erforderlichen Informationen für diese Übertragung an:

    1. Wählen Sie den Agent-Pool aus, den Sie für diese Übertragung konfiguriert haben.

    2. Geben Sie den Bucket-Namen relativ zum Endpunkt ein. Ihre Daten befinden sich beispielsweise unter:

      https://example.com/bucket_a

      Eingeben: bucket_a

    3. Geben Sie den Endpunkt ein. Geben Sie weder das Protokoll (http:// oder https://) noch den Bucket-Namen an. Beispiel:

      example.com

  2. Geben Sie optionale Attribute für diese Übertragung an:

    1. Geben Sie die Signaturregion für das Signieren von Anfragen ein.

    2. Wählen Sie den Signaturprozess für diese Anfrage aus.

    3. Wählen Sie den Adressierungsstil aus. Dadurch wird bestimmt, ob der Bucket-Name im Pfadstil angegeben wird (z. B. https://example.com/bucket-name/key-name) oder im virtuellen gehosteten Stil (z. B. https://bucket-name.example.com/key-name. Weitere Informationen finden Sie in der Amazon-Dokumentation unter Virtuelles Hosting von Buckets.

    4. Wählen Sie das Netzwerkprotokoll aus.

    5. Wählen Sie die zu verwendende API-Eintragsversion aus. Weitere Informationen finden Sie in der Dokumentation zu ListObjectsV2 und ListObjects.

  3. Klicken Sie auf Next step (Nächster Schritt).

Senke konfigurieren

  1. Geben Sie im Feld Bucket oder Ordner den Ziel-Bucket und optional den Ordnernamen ein. Sie können auch auf Durchsuchen klicken, um einen Bucket aus einer Liste der vorhandenen Buckets im aktuellen Projekt auszuwählen. Klicken Sie zum Erstellen eines neuen Buckets auf  Neuen Bucket erstellen.

  2. Klicken Sie auf Next step (Nächster Schritt).

Übertragungseinstellungen auswählen

  1. Geben Sie im Feld Beschreibung eine Beschreibung der Übertragung ein. Geben Sie als Best Practice eine aussagekräftige Beschreibung ein, damit Sie die Jobs unterscheiden können.

  2. Wählen Sie unter Metadatenoptionen die Standardoptionen aus oder klicken Sie auf Optionen auswählen und auswählen, um Werte für alle unterstützten Metadaten anzugeben. Weitere Informationen finden Sie unter Metadatenaufbewahrung.

  3. Wählen Sie unter Wann überschreiben? eine der folgenden Optionen aus:

    • Falls unterschiedlich: Überschreibt Zieldateien, wenn die Quelldatei mit demselben Namen unterschiedliche ETags oder Prüfsummenwerte hat.

    • Immer: Zieldateien werden immer geschrieben, wenn die Quelldatei denselben Namen hat, auch wenn sie identisch sind.

  4. Wählen Sie unter Löschzeitpunkt eine der folgenden Optionen aus:

    • Nie: Dateien werden niemals aus der Quelle oder dem Ziel gelöscht.

    • Datei nach der Übertragung aus der Quelle löschen: Dateien werden aus der Quelle gelöscht, nachdem sie an das Ziel übertragen wurden.

    • Dateien aus dem Ziel löschen, wenn sie nicht auch in der Quelle sind: Wenn sich Dateien im Cloud Storage-Ziel-Bucket nicht auch in der Quelle befinden, löschen Sie die Dateien aus dem Cloud Storage-Bucket.

      Mit dieser Option wird sichergestellt, dass der Cloud Storage-Ziel-Bucket genau mit Ihrer Quelle übereinstimmt.

  5. Wählen Sie unter Benachrichtigungsoptionen Ihr Pub/Sub-Thema und die Ereignisse aus, die Sie benachrichtigen möchten. Weitere Informationen finden Sie unter Pub/Sub-Benachrichtigungen.

  6. Klicken Sie auf Next step (Nächster Schritt).

Übertragung planen

Sie können Ihre Übertragung für die einmalige Ausführung planen oder eine wiederkehrende Übertragung konfigurieren.

Klicken Sie auf Erstellen, um die Übertragung zu erstellen.

gcloud-CLI

Bevor Sie mit der gcloud CLI eine Übertragung erstellen, folgen Sie der Anleitung unter Zugriff auf eine Cloud Storage-Senke konfigurieren.

Verwenden Sie den folgenden Befehl, um mit der gcloud-Befehlszeile eine Übertragung von einer S3-kompatiblen Quelle in einen Cloud Storage-Bucket zu erstellen:

gcloud transfer jobs create s3://SOURCE_BUCKET_NAME gs://SINK_BUCKET_NAME \
  --source-agent-pool=POOL_NAME \
  --source-endpoint=ENDPOINT \
  --source-signing-region=REGION \
  --source-auth-method=AWS_SIGNATURE_V2 | AWS_SIGNATURE_V4 \
  --source-request-model=PATH_STYLE | VIRTUAL_HOSTED_STYLE \
  --source-network-protocol=HTTP | HTTPS \
  --source-list-api=LIST_OBJECTS | LIST_OBJECTS_V2

Die folgenden Flags sind erforderlich:

  • --source-agent-pool ist der Name des Agent-Pools, der für diese Übertragung verwendet werden soll.

  • --source-endpoint gibt den Endpunkt des Speichersystems an. Beispiel: s3.us-east.example.com Wenden Sie sich an Ihren Anbieter, um das richtige Format zu finden. Lassen Sie dabei das Protokoll weg (z.B. https://) oder den Bucket-Namen.

Die verbleibenden Flags sind optional:

  • --source-signing-region gibt eine Region für Signieranfragen an. Lassen Sie dieses Flag weg, wenn Ihr Speicheranbieter keine Signaturregion benötigt.
  • --source-auth-method gibt die zu verwendende Authentifizierungsmethode an. Gültige Werte sind AWS_SIGNATURE_V2 oder AWS_SIGNATURE_V4. Weitere Informationen finden Sie in der Dokumentation zu SigV4 und SigV2 von Amazon.
  • --source-request-model gibt den zu verwendenden Adressierungsstil an. Gültige Werte sind PATH_STYLE oder VIRTUAL_HOSTED_STYLE. Der Pfadstil hat das Format https://s3.REGION.example.com/BUCKET_NAME/KEY_NAME. Der virtuelle Hosting-Stil verwendet das Format `https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME.
  • --source-network-protocol gibt das Netzwerkprotokoll an, das Agents für diesen Job verwenden sollen. Gültige Werte sind HTTP und HTTPS.
  • --source-list-api gibt die Version der S3 Listing API für die Rückgabe von Objekten aus dem Bucket an. Gültige Werte sind LIST_OBJECTS oder LIST_OBJECTS_V2. Weitere Informationen finden Sie in der Amazon-Dokumentation zu ListObjectsV2 und ListObjects.

Weitere Optionen für Übertragungsjobs finden Sie in der Datei gcloud transfer jobs create --help oder in der Referenzdokumentation zu gcloud.

REST API

Bevor Sie mit der REST API eine Übertragung erstellen, folgen Sie der Anleitung unter Zugriff auf eine Cloud Storage-Senke konfigurieren.

Erstellen Sie ein JSON-Objekt ähnlich dem folgenden Beispiel, um eine Übertragung von einer S3-kompatiblen Quelle mithilfe der REST API zu erstellen.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "awsS3CompatibleData": {
      "region":"us-east-1",
      "s3Metadata":{
        "protocol": "NETWORK_PROTOCOL_HTTPS",
        "requestModel": "REQUEST_MODEL_VIRTUAL_HOSTED_STYLE",
        "authMethod": "AUTH_METHOD_AWS_SIGNATURE_V4"
      },
      "endpoint": "example.com",
      "bucketName": "BUCKET_NAME",
      "path": "PATH",
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME",
      "path": "SINK_PATH"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Feldbeschreibungen finden Sie in der API-Referenz AwsS3CompatibleData.

Clientbibliotheken

Bevor Sie mit den Clientbibliotheken eine Übertragung erstellen, folgen Sie der Anleitung unter Zugriff auf einen Cloud Storage-Sink konfigurieren.

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Storage Transfer Service finden Sie unter Storage Transfer Service-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Storage Transfer Service Go API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Storage Transfer Service zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferFromS3CompatibleSource(w io.Writer, projectID string, sourceAgentPoolName string, sourceBucketName string, sourcePath string, gcsSinkBucket string, gcsPath string) (*storagetransferpb.TransferJob, error) {
	// Your project id.
	// projectId := "my-project-id"

	// The agent pool associated with the S3 compatible data source. If not provided, defaults to the default agent.
	// sourceAgentPoolName := "projects/my-project/agentPools/transfer_service_default"

	// The S3 compatible bucket name to transfer data from.
	//sourceBucketName = "my-bucket-name"

	// The S3 compatible path (object prefix) to transfer data from.
	//sourcePath = "path/to/data"

	// The ID of the GCS bucket to transfer data to.
	//gcsSinkBucket = "my-sink-bucket"

	// The GCS path (object prefix) to transfer data to.
	//gcsPath = "path/to/data"

	// The S3 region of the source bucket.
	region := "us-east-1"

	// The S3 compatible endpoint.
	endpoint := "us-east-1.example.com"

	// The S3 compatible network protocol.
	protocol := storagetransferpb.S3CompatibleMetadata_NETWORK_PROTOCOL_HTTPS

	// The S3 compatible request model.
	requestModel := storagetransferpb.S3CompatibleMetadata_REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

	// The S3 Compatible auth method.
	authMethod := storagetransferpb.S3CompatibleMetadata_AUTH_METHOD_AWS_SIGNATURE_V4

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				SourceAgentPoolName: sourceAgentPoolName,
				DataSource: &storagetransferpb.TransferSpec_AwsS3CompatibleDataSource{
					AwsS3CompatibleDataSource: &storagetransferpb.AwsS3CompatibleData{
						BucketName: sourceBucketName,
						Path:       sourcePath,
						Endpoint:   endpoint,
						Region:     region,
						DataProvider: &storagetransferpb.AwsS3CompatibleData_S3Metadata{
							S3Metadata: &storagetransferpb.S3CompatibleMetadata{
								AuthMethod:   authMethod,
								RequestModel: requestModel,
								Protocol:     protocol,
							},
						},
					}},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{
						BucketName: gcsSinkBucket,
						Path:       gcsPath,
					},
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}

	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", sourceBucketName, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Storage Transfer Service finden Sie unter Storage Transfer Service-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Storage Transfer Service Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Storage Transfer Service zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.AuthMethod;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.NetworkProtocol;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.RequestModel;

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferTypes;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;

public class TransferFromS3CompatibleSource {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.

    // Your project id
    String projectId = "my-project-id";

    // The agent pool associated with the S3 compatible data source. If not provided, defaults to
    // the default agent
    String sourceAgentPoolName = "projects/my-project-id/agentPools/transfer_service_default";

    // The S3 compatible bucket name to transfer data from
    String sourceBucketName = "my-bucket-name";

    // The S3 compatible path (object prefix) to transfer data from
    String sourcePath = "path/to/data";

    // The ID of the GCS bucket to transfer data to
    String gcsSinkBucket = "my-sink-bucket";

    // The GCS path (object prefix) to transfer data to
    String gcsPath = "path/to/data";

    // The S3 region of the source bucket
    String region = "us-east-1";

    // The S3 compatible endpoint
    String endpoint = "us-east-1.example.com";

    // The S3 compatible network protocol
    NetworkProtocol protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

    // The S3 compatible request model
    RequestModel requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

    // The S3 Compatible auth method
    AuthMethod authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

    transferFromS3CompatibleSource(
        projectId,
        sourceAgentPoolName,
        sourceBucketName,
        sourcePath,
        region,
        endpoint,
        protocol,
        requestModel,
        authMethod,
        gcsSinkBucket,
        gcsPath);
  }

  public static void transferFromS3CompatibleSource(
      String projectId,
      String sourceAgentPoolName,
      String sourceBucketName,
      String sourcePath,
      String region,
      String endpoint,
      NetworkProtocol protocol,
      RequestModel requestModel,
      AuthMethod authMethod,
      String gcsSinkBucket,
      String gcsPath)
      throws IOException {
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setSourceAgentPoolName(sourceAgentPoolName)
                    .setAwsS3CompatibleDataSource(
                        TransferTypes.AwsS3CompatibleData.newBuilder()
                            .setRegion(region)
                            .setEndpoint(endpoint)
                            .setBucketName(sourceBucketName)
                            .setPath(sourcePath)
                            .setS3Metadata(
                                TransferTypes.S3CompatibleMetadata.newBuilder()
                                    .setProtocol(protocol)
                                    .setRequestModel(requestModel)
                                    .setAuthMethod(authMethod)
                                    .build())
                            .build())
                    .setGcsDataSink(
                        GcsData.newBuilder().setBucketName(gcsSinkBucket).setPath(gcsPath).build()))
            .setStatus(TransferJob.Status.ENABLED)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources,
    // or use "try-with-close" statement to do this automatically.
    try (StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create()) {

      // Create the transfer job
      TransferJob response =
          storageTransfer.createTransferJob(
              TransferProto.CreateTransferJobRequest.newBuilder()
                  .setTransferJob(transferJob)
                  .build());

      System.out.println(
          "Created a transfer job from "
              + sourceBucketName
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Storage Transfer Service finden Sie unter Storage Transfer Service-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Storage Transfer Service Node.js API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Storage Transfer Service zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


// Imports the Google Cloud client library
const storageTransfer = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// Useful enums for AWS S3-Compatible Transfers
// const {AuthMethod, NetworkProtocol, RequestModel} = storageTransfer.protos.google.storagetransfer.v1.S3CompatibleMetadata;

// Your project id
// const projectId = 'my-project';

// The agent pool associated with the S3-compatible data source. Defaults to the default agent
// const sourceAgentPoolName = 'projects/my-project/agentPools/transfer_service_default';

// The S3-compatible bucket name to transfer data from
// const sourceBucketName = "my-bucket-name";

// The S3-compatible path (object prefix) to transfer data from
// const sourcePath = "path/to/data/";

// The ID of the GCS bucket to transfer data to
// const gcsSinkBucket = "my-sink-bucket";

// The GCS path (object prefix) to transfer data to
// const gcsPath = "path/to/data/";

// The S3 region of the source bucket
// const region = 'us-east-1';

// The S3-compatible endpoint
// const endpoint = "us-east-1.example.com";

// The S3-compatible network protocol
// const protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

// The S3-compatible request model
// const requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

// The S3-compatible auth method
// const authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

// Creates a client
const client = new storageTransfer.StorageTransferServiceClient();

/**
 * Creates a transfer from an AWS S3-compatible source to GCS
 */
async function transferFromS3CompatibleSource() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      transferSpec: {
        sourceAgentPoolName,
        awsS3CompatibleDataSource: {
          region,
          s3Metadata: {
            authMethod,
            protocol,
            requestModel,
          },
          endpoint,
          bucketName: sourceBucketName,
          path: sourcePath,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
          path: gcsPath,
        },
      },
      status: 'ENABLED',
    },
  });

  await client.runTransferJob({
    jobName: transferJob.name,
    projectId,
  });

  console.log(
    `Created and ran a transfer job from '${sourceBucketName}' to '${gcsSinkBucket}' with name ${transferJob.name}`
  );
}

transferFromS3CompatibleSource();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Storage Transfer Service finden Sie unter Storage Transfer Service-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Storage Transfer Service Python API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Storage Transfer Service zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import storage_transfer

AuthMethod = storage_transfer.S3CompatibleMetadata.AuthMethod
NetworkProtocol = storage_transfer.S3CompatibleMetadata.NetworkProtocol
RequestModel = storage_transfer.S3CompatibleMetadata.RequestModel


def transfer_from_S3_compat_to_gcs(
    project_id: str,
    description: str,
    source_agent_pool_name: str,
    source_bucket_name: str,
    source_path: str,
    gcs_sink_bucket: str,
    gcs_path: str,
    region: str,
    endpoint: str,
    protocol: NetworkProtocol,
    request_model: RequestModel,
    auth_method: AuthMethod,
) -> None:
    """Creates a transfer from an AWS S3-compatible source to GCS"""

    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # The agent pool associated with the S3-compatible data source.
    # Defaults to 'projects/{project_id}/agentPools/transfer_service_default'
    # source_agent_pool_name = 'projects/my-project/agentPools/my-agent'

    # The S3 compatible bucket name to transfer data from
    # source_bucket_name = "my-bucket-name"

    # The S3 compatible path (object prefix) to transfer data from
    # source_path = "path/to/data/"

    # The ID of the GCS bucket to transfer data to
    # gcs_sink_bucket = "my-sink-bucket"

    # The GCS path (object prefix) to transfer data to
    # gcs_path = "path/to/data/"

    # The S3 region of the source bucket
    # region = 'us-east-1'

    # The S3-compatible endpoint
    # endpoint = "us-east-1.example.com"

    # The S3-compatible network protocol
    # protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS

    # The S3-compatible request model
    # request_model = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

    # The S3-compatible auth method
    # auth_method = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "source_agent_pool_name": source_agent_pool_name,
                    "aws_s3_compatible_data_source": {
                        "region": region,
                        "s3_metadata": {
                            "auth_method": auth_method,
                            "protocol": protocol,
                            "request_model": request_model,
                        },
                        "endpoint": endpoint,
                        "bucket_name": source_bucket_name,
                        "path": source_path,
                    },
                    "gcs_data_sink": {
                        "bucket_name": gcs_sink_bucket,
                        "path": gcs_path,
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

Häufig gestellte Fragen

Entstehen Kosten für die Übertragung von S3-kompatiblem Speicher?

Für Übertragungen von S3-kompatiblem Speicher wird keine Gebühr für „Storage Transfer Service-Übertragungen, die Agents erfordern“ berechnet. Alle weiteren anfallenden Gebühren finden Sie unter Preise. Der Quell-Cloud-Anbieter kann Kosten für ausgehende Datenübertragung und Vorgänge in Rechnung stellen.

Wird die Cloud-Protokollierung für S3-kompatible Speicherübertragungen unterstützt?

Ja. Sie können Cloud Logging für Ihre Übertragungen aktivieren. Folgen Sie dazu der Anleitung unter Cloud Logging für Storage Transfer Service.

Werden Übertragungen mit einem Manifest unterstützt?

Ja, Manifestdateien werden für S3-kompatible Übertragungen unterstützt.

Wird das Objekt übertragen, wenn ich dem Quell-Bucket nach dem Start des Jobs ein Objekt hinzufüge?

Storage Transfer Service führt einen Listenvorgang für den Quell-Bucket aus, um den Differenzwert vom Ziel zu berechnen. Wenn der Listenvorgang bereits abgeschlossen ist, wenn das neue Objekt hinzugefügt wird, wird dieses Objekt bis zur nächsten Übertragung übersprungen.

Führt Storage Transfer Service einen Prüfsummenabgleich für S3-kompatible Quellen aus?

Der Storage Transfer Service verwendet die Prüfsummendaten, die von der Quelle zurückgegeben werden. Bei S3-kompatiblem Speicher erwartet der Storage Transfer Service, dass das ETag des Objekts der MD5-Hash des Objekts ist.

Objekte, die mithilfe des mehrteiligen S3-Uploads in einen S3-kompatiblen Speicher übertragen wurden, haben jedoch keine MD5-ETags. In diesem Fall verwendet der Storage Transfer Service die Dateigröße, um das übertragene Objekt zu validieren.

Welcher Durchsatz kann für Übertragungen von S3-kompatiblem Speicher erreicht werden?

Der Übertragungsdurchsatz kann durch Hinzufügen weiterer Übertragungs-Agents skaliert werden. Wir empfehlen die Verwendung von drei Agents für Fehlertoleranz und das Füllen einer Pipe von < 10 Gbit/s. Fügen Sie weitere Agents hinzu, um weitere Instanzen zu skalieren. Agents können während der Übertragung hinzugefügt und entfernt werden.

Wo sollten Übertragungs-Agents bereitgestellt werden, um Daten von Amazon S3 nach Cloud Storage zu übertragen?

Sie können Agents in Amazon EC2 oder EKS in derselben Region wie Ihren Bucket installieren. Sie können Agents auch in Google Cloud in der nächsten Region ausführen.