Mentransfer dari penyimpanan yang kompatibel dengan S3 ke Cloud Storage

Storage Transfer Service mendukung transfer dari sistem penyimpanan objek cloud atau lokal yang kompatibel dengan Amazon S3 API.

Storage Transfer Service mengakses data Anda di penyimpanan yang kompatibel dengan S3 menggunakan agen transfer yang di-deploy di VM yang dekat dengan sumber data. Agen ini berjalan di container Docker dan termasuk dalam kumpulan agen, yang merupakan kumpulan agen yang menggunakan konfigurasi yang sama dan secara kolektif memindahkan data Anda secara paralel.

Fitur ini memungkinkan Anda bermigrasi dari penyimpanan objek lokal atau cloud ke Cloud Storage, mengarsipkan data untuk mengosongkan kapasitas penyimpanan lokal, mereplikasi data ke Google Cloud untuk kelangsungan bisnis, atau mentransfer data ke Google Cloud untuk analisis dan pemrosesan. Bagi pelanggan yang bermigrasi dari AWS S3 ke Cloud Storage, fitur ini memberikan opsi untuk mengontrol rute jaringan ke Google Cloud, sehingga biaya transfer data keluar menjadi jauh lebih rendah.

Sebelum memulai

Sebelum mengonfigurasi transfer, selesaikan langkah-langkah berikut:

Prasyarat

Sebelum mengonfigurasi transfer, pastikan Anda telah menyiapkan hal berikut:

Opsi transfer

Fitur Storage Transfer Service berikut tersedia untuk transfer dari penyimpanan yang kompatibel dengan S3 ke Cloud Storage:

Mentransfer file tertentu menggunakan manifes
Anda dapat meneruskan daftar file untuk ditindaklanjuti oleh Storage Transfer Service. Lihat Mentransfer file atau objek tertentu menggunakan manifes untuk mengetahui detailnya.
Menentukan kelas penyimpanan
Anda dapat menentukan kelas penyimpanan Cloud Storage yang akan digunakan untuk data Anda di bucket tujuan. Lihat opsi StorageClass untuk mengetahui detail REST, atau gunakan flag --custom-storage-class dengan Google Cloud CLI.

Perhatikan bahwa setelan kelas penyimpanan apa pun akan diabaikan jika bucket tujuan mengaktifkan Autoclass. Jika Autoclass diaktifkan, objek yang ditransfer ke bucket awalnya ditetapkan ke Standard Storage.

Penyimpanan metadata

Saat mentransfer file dari penyimpanan yang kompatibel dengan S3, Storage Transfer Service dapat mempertahankan atribut tertentu sebagai metadata kustom.

Lihat bagian Amazon S3 atau penyimpanan yang kompatibel dengan S3 ke Cloud Storage di Pemeliharaan metadata untuk mengetahui detail tentang metadata yang dapat dipertahankan, dan cara mengonfigurasi transfer Anda.

Logging dan pemantauan
Transfer dari penyimpanan yang kompatibel dengan S3 dapat dilihat di Cloud Logging dan Cloud Monitoring. Lihat Cloud Logging untuk Storage Transfer Service dan Memantau tugas transfer untuk mengetahui detailnya. Anda juga dapat mengonfigurasi notifikasi Pub/Sub.

Membuat kumpulan agen

Jangan sertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan dalam nama kumpulan agen atau awalan ID agen Anda. Nama resource dapat disebarkan ke nama resource Google Cloud lainnya dan dapat diekspos ke sistem internal Google di luar project Anda.

Untuk membuat kumpulan agen:

Konsol Google Cloud

  1. Di konsol Google Cloud , buka halaman Agent pools.

    Buka Agent pools

    Halaman Agent pools akan ditampilkan, yang mencantumkan kumpulan agen yang ada.

  2. Klik Create another pool.

  3. Beri nama pool Anda, dan jika perlu, deskripsikan.

  4. Anda dapat memilih untuk menetapkan batas bandwidth yang akan berlaku untuk pool secara keseluruhan. Bandwidth yang ditentukan dalam MB/dtk akan dibagi di antara semua agen dalam kumpulan. Lihat Mengelola bandwidth jaringan untuk mengetahui informasi selengkapnya.

  5. Klik Create.

REST API

Gunakan projects.agentPools.create:

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

Ganti kode berikut:

  • PROJECT_ID: Project ID tempat Anda membuat kumpulan agen.
  • AGENT_POOL_ID: ID kumpulan agen yang Anda buat.

Jika kumpulan agen terjebak dalam status Creating selama lebih dari 30 menit, sebaiknya hapus kumpulan agen dan buat lagi.

Mencabut izin Storage Transfer Service yang diperlukan dari project saat kumpulan agen berada dalam status Creating akan menyebabkan perilaku layanan yang salah.

gcloud CLI

Untuk membuat kumpulan agen dengan alat command line gcloud, jalankan gcloud transfer agent-pools create.

gcloud transfer agent-pools create AGENT_POOL

Dengan opsi berikut:

  • AGENT_POOL adalah ID unik dan permanen untuk pool ini.

  • --no-async memblokir tugas lain di terminal Anda hingga pool dibuat. Jika tidak disertakan, pembuatan pool akan berjalan secara asinkron.

  • --bandwidth-limit menentukan jumlah bandwidth dalam MB/dtk yang akan disediakan untuk agen kumpulan ini. Batas bandwidth berlaku untuk semua agen dalam sebuah pool dan dapat membantu mencegah workload transfer pool mengganggu operasi lain yang menggunakan bandwidth Anda. Misalnya, masukkan '50' untuk menetapkan batas bandwidth sebesar 50 MB/dtk. Jika flag ini tidak ditentukan, agen kumpulan ini akan menggunakan semua bandwidth yang tersedia untuk mereka.

  • --display-name adalah nama yang dapat diubah untuk membantu Anda mengidentifikasi pool ini. Anda dapat menyertakan detail yang mungkin tidak sesuai dengan nama resource lengkap yang unik dari pool.

Menginstal agen transfer

Agen transfer adalah agen software yang mengoordinasikan aktivitas transfer dari sumber Anda melalui Storage Transfer Service. Alat ini harus diinstal di sistem yang memiliki akses ke data sumber Anda.

gcloud CLI

Untuk menginstal agen yang akan digunakan dengan sumber yang kompatibel dengan S3 menggunakan gcloud CLI, gunakan perintah transfer agents install.

Anda harus memberikan kredensial akses baik sebagai variabel lingkungan sebagai nilai AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY, atau disimpan sebagai kredensial default dalam file konfigurasi sistem Anda.

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

Untuk menjalankan agen menggunakan kunci akun layanan, gunakan opsi --creds-file:

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

Membuat tugas transfer

Konsol Google Cloud

Ikuti langkah-langkah berikut untuk membuat transfer dari sumber yang kompatibel dengan S3 ke bucket Cloud Storage.

  1. Buka halaman Storage Transfer Service di konsol Google Cloud .

    Buka Storage Transfer Service

  2. Klik Buat tugas transfer. Halaman Create a transfer job akan ditampilkan.

  3. Pilih penyimpanan objek yang kompatibel dengan S3 sebagai Source type. Tujuannya harus Google Cloud Storage.

    Klik Next step.

Mengonfigurasi sumber

  1. Tentukan informasi yang diperlukan untuk transfer ini:

    1. Pilih kumpulan agen yang Anda konfigurasi untuk transfer ini.

    2. Masukkan Nama bucket yang terkait dengan endpoint. Misalnya, jika data Anda berada di:

      https://example.com/bucket_a

      Masukkan: bucket_a

    3. Masukkan Endpoint. Jangan sertakan protokol (http:// atau https://) atau nama bucket. Contoh:

      example.com

  2. Tentukan atribut opsional untuk transfer ini:

    1. Masukkan Signing region yang akan digunakan untuk penandatanganan permintaan.

    2. Pilih Proses penandatanganan untuk permintaan ini.

    3. Pilih Gaya alamat. Hal ini menentukan apakah nama bucket disediakan dalam gaya jalur (misalnya, https://example.com/bucket-name/key-name) atau gaya yang dihosting secara virtual (misalnya, https://bucket-name.example.com/key-name). Baca Hosting virtual bucket dalam dokumentasi Amazon untuk mengetahui informasi selengkapnya.

    4. Pilih Protokol jaringan.

    5. Pilih versi API listingan yang akan digunakan. Lihat dokumentasi ListObjectsV2 dan ListObjects untuk mengetahui informasi selengkapnya.

  3. Klik Next step.

Mengonfigurasi sink Anda

  1. Di kolom Bucket or folder, masukkan bucket tujuan dan (opsional) nama folder, atau klik Browse untuk memilih bucket dari daftar bucket yang ada di project Anda saat ini. Untuk membuat bucket baru, klik Create new bucket.

  2. Klik Next step.

Memilih setelan transfer

  1. Di kolom Description, masukkan deskripsi transfer. Sebagai praktik terbaik, masukkan deskripsi yang bermakna dan unik agar Anda dapat membedakan tugas.

  2. Di bagian Metadata options, pilih untuk menggunakan opsi default, atau klik View and select options untuk menentukan nilai bagi semua metadata yang didukung. Lihat Penyimpanan metadata untuk mengetahui detailnya.

  3. Di bagian When to overwrite, pilih salah satu opsi berikut:

    • Jika berbeda: Menimpa file tujuan jika file sumber dengan nama yang sama memiliki nilai Etag atau checksum yang berbeda.

    • Selalu: Selalu menimpa file tujuan jika file sumber memiliki nama yang sama, meskipun file tersebut identik.

  4. Di bagian Kapan harus menghapus, pilih salah satu opsi berikut:

    • Jangan pernah: Jangan pernah menghapus file dari sumber atau tujuan.

    • Hapus file dari sumber setelah file ditransfer: Menghapus file dari sumber setelah file ditransfer ke tujuan. Jika file sumber tidak ditransfer, misalnya karena sudah ada di tujuan, file sumber tidak akan dihapus.

    • Delete files from destination if they're not also at source: Jika file di bucket Cloud Storage tujuan tidak ada di sumber, hapus file dari bucket Cloud Storage.

      Opsi ini memastikan bahwa bucket Cloud Storage tujuan sama persis dengan sumber Anda.

  5. Di bagian Notification options, pilih topik Pub/Sub dan peristiwa yang akan diberi tahu. Lihat notifikasi Pub/Sub untuk mengetahui detail selengkapnya.

  6. Klik Next step.

Menjadwalkan transfer

Anda dapat menjadwalkan transfer untuk dijalankan satu kali saja, atau mengonfigurasi transfer berulang.

Klik Create untuk membuat tugas transfer.

gcloud CLI

Sebelum menggunakan gcloud CLI untuk membuat transfer, ikuti petunjuk di Mengonfigurasi akses ke sink Cloud Storage.

Untuk menggunakan gcloud CLI guna membuat transfer dari sumber yang kompatibel dengan S3 ke bucket Cloud Storage, gunakan perintah berikut.

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

Flag berikut diperlukan:

  • --source-agent-pool adalah nama kumpulan agen yang akan digunakan untuk transfer ini.

  • --source-endpoint menentukan endpoint sistem penyimpanan Anda. Contoh, s3.us-east.example.com. Hubungi penyedia Anda untuk mengetahui format yang benar. Jangan sertakan protokol (misalnya, https://) atau nama bucket.

Flag lainnya bersifat opsional:

  • --source-signing-region menentukan region untuk permintaan penandatanganan. Hapus flag ini jika penyedia penyimpanan Anda tidak memerlukan region penandatanganan.
  • --source-auth-method menentukan metode autentikasi yang akan digunakan. Nilai yang valid adalah AWS_SIGNATURE_V2 atau AWS_SIGNATURE_V4. Lihat dokumentasi SigV4 dan SigV2 Amazon untuk mengetahui informasi selengkapnya.
  • --source-request-model menentukan gaya pengalamatan yang akan digunakan. Nilai yang valid adalah PATH_STYLE atau VIRTUAL_HOSTED_STYLE. Gaya jalur menggunakan format https://s3.REGION.example.com/BUCKET_NAME/KEY_NAME. Gaya host virtual menggunakan format `https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME.
  • --source-network-protocol menentukan protokol jaringan yang harus digunakan agen untuk tugas ini. Nilai yang valid adalah HTTP atau HTTPS.
  • --source-list-api menentukan versi API listingan S3 untuk menampilkan objek dari bucket. Nilai yang valid adalah LIST_OBJECTS atau LIST_OBJECTS_V2. Lihat dokumentasi ListObjectsV2 dan ListObjects Amazon untuk mengetahui informasi selengkapnya.

Untuk opsi tugas transfer tambahan, jalankan gcloud transfer jobs create --help atau lihat dokumentasi referensi gcloud.

REST API

Sebelum menggunakan REST API untuk membuat transfer, ikuti petunjuk di Mengonfigurasi akses ke sink Cloud Storage.

Untuk membuat transfer dari sumber yang kompatibel dengan S3 menggunakan REST API, buat objek JSON yang mirip dengan contoh berikut.

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
    }
  }
}

Lihat referensi API AwsS3CompatibleData untuk mengetahui deskripsi kolom.

Library klien

Sebelum menggunakan library klien untuk membuat transfer, ikuti petunjuk di Mengonfigurasi akses ke sink Cloud Storage.

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Storage Transfer Service, lihat library klien Storage Transfer Service. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Storage Transfer Service.

Untuk melakukan autentikasi ke Storage Transfer Service, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Storage Transfer Service, lihat library klien Storage Transfer Service. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Storage Transfer Service.

Untuk melakukan autentikasi ke Storage Transfer Service, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Storage Transfer Service, lihat library klien Storage Transfer Service. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Storage Transfer Service.

Untuk melakukan autentikasi ke Storage Transfer Service, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


// 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Storage Transfer Service, lihat library klien Storage Transfer Service. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Storage Transfer Service.

Untuk melakukan autentikasi ke Storage Transfer Service, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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}")

Pertanyaan umum (FAQ)

Bagaimana jika penyedia yang kompatibel dengan S3 menggunakan sertifikat SSL kustom?

Jika penyedia yang kompatibel dengan S3 menggunakan sertifikat SSL yang tidak diterbitkan oleh certificate authority publik, transfer Anda mungkin gagal dengan error TLS. Untuk mengatasinya, pasang root certificate penyedia ke container agen transfer di /etc/ssl/certs/CERT_FILE menggunakan flag Docker -v.

Contoh:

sudo docker run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
-v PATH/TO/KEY.JSON:/etc/gcloud/key.json:ro \
-v /path/to/your/CERT_FILE:/etc/ssl/certs/CERT_FILE \
-e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/etc/gcloud/key.json \
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Apakah ada biaya untuk mentransfer dari penyimpanan yang kompatibel dengan S3?

Transfer dari penyimpanan yang kompatibel dengan S3 tidak dikenai biaya "Transfer Storage Transfer Service yang memerlukan agen". Lihat Harga untuk mengetahui biaya lain yang mungkin dikenakan. Anda mungkin juga akan dikenai biaya transfer data keluar dan biaya operasional dari penyedia cloud sumber.

Apakah Cloud Logging didukung untuk transfer penyimpanan yang kompatibel dengan S3?

Ya, Anda dapat mengaktifkan Cloud Logging untuk transfer dengan mengikuti petunjuk di Cloud Logging untuk Storage Transfer Service.

Apakah transfer menggunakan manifes didukung?

Ya, file manifes didukung untuk transfer yang kompatibel dengan S3.

Jika saya menambahkan objek ke bucket sumber setelah tugas dimulai, apakah objek tersebut akan ditransfer?

Storage Transfer Service melakukan operasi daftar pada bucket sumber untuk menghitung perbedaan dari tujuan. Jika operasi daftar telah selesai saat objek baru ditambahkan, objek tersebut akan dilewati hingga transfer berikutnya.

Apakah Storage Transfer Service melakukan pencocokan checksum pada sumber yang kompatibel dengan S3?

Storage Transfer Service mengandalkan data checksum yang ditampilkan oleh sumber. Untuk penyimpanan yang kompatibel dengan S3, Storage Transfer Service mengharapkan Etag objek menjadi hash MD5 objek.

Namun, objek apa pun yang ditransfer ke penyimpanan yang kompatibel dengan S3 menggunakan upload multibagian S3 tidak memiliki ETag MD5. Dalam hal ini, Storage Transfer Service menggunakan ukuran file untuk memvalidasi objek yang ditransfer.

Berapa throughput yang dapat dicapai untuk transfer dari penyimpanan yang kompatibel dengan S3?

Throughput transfer Anda dapat diskalakan dengan menambahkan lebih banyak agen transfer. Sebaiknya gunakan 3 agen untuk fault tolerance dan untuk mengisi pipa <10 Gbps. Untuk menskalakan lebih banyak, tambahkan lebih banyak agen. Agen dapat ditambahkan dan dihapus saat transfer sedang dalam proses.

Di mana agen transfer harus di-deploy untuk mentransfer data dari Amazon S3 ke Cloud Storage?

Anda dapat menginstal agen di Amazon EC2 atau EKS dalam region yang sama dengan bucket Anda. Anda juga dapat menjalankan agen di Google Cloud di region terdekat.