Mentransfer dari Amazon S3 ke Cloud Storage

Halaman ini menunjukkan cara membuat dan memulai tugas transfer dari Amazon S3 ke Cloud Storage.

Prasyarat

Sebelum mengonfigurasi transfer, pastikan Anda telah menyiapkan hal berikut:

Opsi egress

Storage Transfer Service menyediakan beberapa opsi untuk mentransfer data S3 Anda ke Cloud Storage.

Opsi egress Deskripsi
Tanpa agen default Opsi ini menggunakan transfer terkelola tanpa agen dari S3. Anda akan dikenai biaya egress oleh Amazon.

Ikuti petunjuk di halaman ini untuk menggunakan opsi ini.
Distribusi CloudFront Menggunakan distribusi Amazon CloudFront sebagai jalur egress. Transfer data melalui CloudFront dapat memperoleh manfaat dari biaya egress AWS yang lebih rendah dibandingkan dengan transfer langsung dari S3. Lihat harga CloudFront dan biaya egress S3 untuk mengetahui detailnya.

Ikuti petunjuk di Mentransfer dari S3 melalui CloudFront untuk menyiapkan distribusi dan membuat transfer.
Jaringan pribadi yang dikelola Google Transfer data Anda melalui jaringan yang dikelola Google. Anda tidak membayar biaya egress S3; sebagai gantinya, Anda membayar tarif per GiB ke Google Cloud, yang berpotensi mengurangi biaya transfer. Lihat halaman Harga untuk mengetahui detailnya. Anda mungkin masih dikenai biaya operasi dari AWS (misalnya, panggilan LIST atau GET); lihat harga mereka untuk mengetahui detailnya.

Semua transfer project melalui jaringan pribadi terkelola menggunakan bandwidth yang sama. Pada saat penggunaan tinggi, transfer Anda mungkin lambat. Transfer dengan file besar lebih terpengaruh daripada transfer dengan file kecil.

Opsi ini hanya tersedia untuk region AWS tertentu dan tidak didukung untuk region AWS GovCloud.

Lihat Transfer melalui jaringan pribadi yang dikelola Google untuk mengetahui detailnya.
Jaringan pribadi yang dikelola pelanggan Mentransfer data Anda melalui jaringan pribadi yang dikelola pelanggan. Gunakan Cross-Cloud Interconnect, Partner Interconnect yang ada, atau beli dan gunakan koneksi baru. Interconnect menyediakan koneksi fisik khusus antara Google Cloud dan Amazon S3 atau Azure.

Lihat Transfer dari AWS atau Azure melalui jaringan pribadi yang dikelola pelanggan untuk mengetahui detailnya.
Berbasis agen Berlaku untuk semua penyimpanan yang kompatibel dengan S3, termasuk Amazon S3. Dengan menginstal software agen di mesin yang memiliki akses ke bucket S3, Anda dapat mengontrol jalur dan bandwidth jaringan. Opsi ini memerlukan agen dan kumpulan agen.

Ikuti petunjuk di Mentransfer dari sumber yang kompatibel dengan S3 untuk menggunakan opsi ini.

Region yang didukung

Storage Transfer Service mendukung region Amazon S3 berikut:
af-south-1
ap-east-1
ap-east-2
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ap-southeast-5
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
Transfer menggunakan jaringan pribadi yang dikelola Google mendukung region AWS berikut:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Opsi transfer

Fitur Storage Transfer Service berikut tersedia untuk transfer dari 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.
Memfilter objek sumber menurut awalan, waktu terakhir diubah, atau kelas penyimpanan

Anda dapat memilih untuk menyertakan atau mengecualikan objek dari transfer berdasarkan nama file dan jalur, waktu terakhir diubah, atau kelas penyimpanan.

Secara default, objek di kelas penyimpanan standar dan non-arsip, termasuk Glacier Instant Retrieval (GLACIER_IR), akan ditransfer, dan objek Glacier Deep Archive (DEEP_ARCHIVE) akan ditransfer jika dipulihkan. Objek Glacier Flexible Retrieval (GLACIER) dilewati secara default.

Untuk mengetahui informasi selengkapnya tentang awalan, lihat Memfilter objek sumber menurut awalan. Untuk mengetahui informasi selengkapnya tentang kelas penyimpanan, lihat Memfilter objek sumber berdasarkan kelas penyimpanan.

Filter berbasis waktu mencakup:

  • Waktu minimum yang berlalu, dan waktu maksimum yang berlalu, sejak perubahan terakhir. Keduanya menerima nilai dalam detik untuk memfilter objek yang diubah atau tidak diubah dalam jangka waktu tertentu.
  • Terakhir diubah sejak, dan terakhir diubah sebelum, yang keduanya menerima nilai dateTime.

Perhatikan bahwa filter berbasis waktu untuk transfer S3 mengandalkan definisi AWS tentang "waktu terakhir diubah", yaitu waktu objek memulai upload-nya. Karena objek tidak tersedia hingga upload selesai, Anda mungkin menemukan objek yang waktu terakhir diubahnya memenuhi kriteria filter, tetapi masih diupload. Objek ini tidak akan disertakan dalam tugas transfer Anda. Untuk menghindari masalah, sebaiknya lakukan hal berikut:

  • Alih-alih filter berbasis waktu, gunakan transfer berbasis peristiwa untuk mentransfer objek saat tersedia.
  • Untuk mencegah objek yang hilang dalam transfer berulang, periode lihat balik "waktu terakhir diubah" harus lebih besar dari jadwal berulang. Misalnya, untuk tugas yang berjalan setiap jam, periode lihat balik selama dua jam memberikan buffering.
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 S3, Storage Transfer Service dapat mempertahankan atribut tertentu sebagai metadata kustom.

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

Transfer berdasarkan peristiwa
Storage Transfer Service dapat memproses Notifikasi Peristiwa Amazon S3 yang dikirim ke Amazon SQS untuk otomatis mentransfer data yang telah ditambahkan atau diperbarui di lokasi sumber. Lihat Transfer berbasis peristiwa untuk mengetahui informasinya.
Logging dan pemantauan
Transfer dari 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.

Buat transfer

Storage Transfer Service menyediakan beberapa antarmuka untuk membuat transfer.

Jangan menyertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan dalam nama tugas transfer Anda. Nama resource dapat disebarkan ke nama resource Google Cloud lainnya dan dapat diekspos ke sistem internal Google di luar project Anda.

Konsol Google Cloud

  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. Di bagian Source type, pilih Amazon S3.

  4. Sebagai Jenis tujuan, pilih Google Cloud Storage.

  5. Pilih Mode penjadwalan. Transfer batch dijalankan satu kali atau terjadwal. Transfer berbasis peristiwa terus memantau sumber dan mentransfer data saat data ditambahkan atau diubah.

    Untuk mengonfigurasi transfer berbasis peristiwa, ikuti petunjuk di Transfer berbasis peristiwa.

  6. Klik Next step.

  7. Di kolom Bucket or folder name, masukkan nama bucket sumber.

    Nama bucket adalah nama seperti yang muncul di AWS Management Console.

  8. Jika Anda menggunakan distribusi CloudFront untuk mentransfer dari S3, masukkan nama domain distribusi di kolom CloudFront domain. Contoh, https://dy1h2n3l4ob56.cloudfront.net. Lihat Mentransfer dari S3 melalui CloudFront untuk mengonfigurasi distribusi CloudFront.

  9. Pilih metode autentikasi Amazon Web Services (AWS) Anda. Lihat Mengonfigurasi akses ke sumber: Amazon S3 untuk mengetahui detailnya.

    • Secret resource: Pilih opsi ini untuk menggunakan kredensial Amazon yang disimpan di Secret Manager. Pilih secret dari daftar, atau masukkan secara manual dalam format projects/PROJECT_NUMBER/secrets/SECRET_NAME.

    • Access key: Masukkan kunci akses Anda di kolom Access key ID dan rahasia yang terkait dengan kunci akses Anda di kolom Secret access key.

    • AWS IAM role for identity federation: Masukkan ARN Anda di kolom AWS IAM role ARN, dengan sintaksis berikut:

      • Region AWS standar:

        arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
      • Region AWS GovCloud:

        arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME

      Ganti kode berikut:

      • AWS_ACCOUNT: ID akun AWS tanpa tanda hubung.
      • AWS_ROLE_NAME: Nama peran AWS. Jika organisasi Anda menggunakan jalur untuk mengatur peran, sertakan jalur dengan nama peran. Misalnya, developers/transfer_user.

      Untuk mengetahui informasi selengkapnya tentang ARN, lihat ARN IAM.

  10. Jika ini adalah transfer berbasis peristiwa, masukkan ARN antrean Amazon SQS, yang menggunakan format berikut:

    • Region AWS standar:

      arn:aws:sqs:us-east-1:1234567890:event-queue
    • Region AWS GovCloud:

      arn:aws-us-gov:sqs:us-gov-east-1:1234567890:event-queue
  11. Jika perlu, pilih untuk memfilter objek menurut awalan, menurut tanggal terakhir diubah, atau menurut kelas penyimpanan. Jika Anda menentukan folder sebagai lokasi sumber, filter awalan akan relatif terhadap folder tersebut. Misalnya, jika sumber Anda adalah my-test-bucket/path/, filter sertakan file akan menyertakan semua file yang diawali dengan my-test-bucket/path/file.

  12. Klik Next step.

  13. 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 Ikon ember Create new bucket.

  14. Klik Next step.

  15. Pilih opsi penjadwalan Anda:

    Catatan: Storage Transfer Service menampilkan jadwal tugas transfer dalam zona waktu lokal Anda, tetapi menyimpan waktu tersebut dalam Universal Time Coordinated (UTC). Jika Anda terpengaruh oleh Waktu Musim Panas (DST), Anda mungkin mengalami perubahan jadwal tugas transfer saat DST dimulai atau berakhir.

    1. Dari menu drop-down Run once, pilih salah satu opsi berikut:

      • Run once: Menjalankan satu transfer, dimulai pada waktu yang Anda pilih.
      • Jalankan setiap hari: Menjalankan transfer setiap hari, mulai pada waktu yang Anda pilih.

        Anda dapat memasukkan Tanggal akhir opsional, atau mengosongkan Tanggal akhir untuk menjalankan transfer secara terus-menerus.

      • Jalankan setiap minggu: Menjalankan transfer setiap minggu, dimulai pada waktu yang Anda pilih.
      • Run with custom frequency: Menjalankan transfer pada frekuensi yang Anda pilih. Anda dapat memilih untuk mengulangi transfer pada interval reguler Jam, Hari, atau Minggu.

        Anda dapat memasukkan Tanggal akhir opsional, atau mengosongkan Tanggal akhir untuk menjalankan transfer secara terus-menerus.

      • Run on demand: Tidak akan memicu operasi saat tugas transfer ini dibuat. Anda harus memulai tugas secara manual.
    2. Dari menu drop-down Mulai sekarang, pilih salah satu opsi berikut:

      • Starting now: Memulai transfer setelah Anda mengklik Create.
      • Starting on: Memulai transfer pada tanggal dan waktu yang Anda pilih. Klik Kalender untuk menampilkan kalender guna memilih tanggal mulai.
  16. Klik Next step.

  17. Pilih setelan untuk tugas transfer.

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

    2. Secara opsional, berikan manifes untuk menentukan objek yang tepat untuk ditransfer.

    3. Di bagian Metadata options, pilih kelas penyimpanan dan perilaku waktu pembuatan yang diinginkan. Lihat Penyimpanan metadata untuk mengetahui detailnya.

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

      • Never: Tidak menimpa file tujuan jika file sumber memiliki nama yang sama. File sumber dilewati.
      • Jika berbeda: Menimpa file tujuan jika file sumber dengan nama yang sama memiliki nilai Etag atau checksum yang berbeda.
      • Always: Selalu menimpa file tujuan jika file sumber memiliki nama yang sama, meskipun file tersebut identik.
    5. Di bagian Kapan harus menghapus, pilih salah satu opsi berikut:

      • Never: Jangan pernah menghapus file dari sumber atau tujuan.
      • Hapus file dari sumber setelah file ditransfer: Hapus file dari sumber setelah file ditransfer ke tujuan. Jika file sumber tidak ditransfer, misalnya karena sudah ada di tujuan, file sumber tidak akan dihapus.

        Penting: Jika Anda tidak memiliki cadangan lokal, opsi ini adalah tindakan yang tidak dapat diurungkan.

      • Hapus file dari tujuan jika file tersebut juga tidak ada di sumber: Jika file di bucket Cloud Storage tujuan juga tidak ada di sumber, hapus file dari bucket Cloud Storage.

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

    6. Pilih opsi pemilihan rute jaringan:

      • Gunakan jaringan publik: Transfer data melalui rute peering internet publik standar antara Amazon S3 dan Google Cloud. Semua perintah API, header autentikasi, dan aliran data objek dienkripsi secara end-to-end dalam pengiriman menggunakan HTTPS dengan Transport Layer Security (TLS 1.3).
      • Gunakan jaringan pribadi terkelola: Data mengalir melalui perutean pribadi yang aman dan disediakan secara otomatis oleh Google, sehingga mengurangi biaya egress internet AWS dan mengabaikan endpoint internet publik tanpa memerlukan penyiapan interkoneksi fisik. Opsi ini hanya tersedia untuk region AWS tertentu dan tidak didukung untuk region AWS GovCloud. Lihat Transfer melalui jaringan pribadi yang dikelola Google.
      • Memanfaatkan jaringan pribadi Anda sendiri: Data melintasi infrastruktur konektivitas hybrid Anda yang telah dikonfigurasi sebelumnya (seperti Cloud Interconnect, Cloud VPN, atau AWS Direct Connect) melalui alamat IP pribadi. Lihat Mentransfer melalui jaringan pribadi yang dikelola pelanggan.
    7. Di bagian Logging options, pilih Enable logging in Cloud Logging jika Anda ingin membuat data terperinci tentang tindakan yang dilakukan pada setiap file yang ditransfer. Biaya Cloud Logging berlaku. Lihat Mencatat tindakan transfer ke dalam log untuk mengetahui detailnya.

    8. Atau, pilih Get transfer operation status updates via Cloud Pub/Sub notifications), pilih topik Pub/Sub Anda, dan pilih peristiwa yang memicu notifikasi. Lihat notifikasi Pub/Sub untuk mengetahui detailnya.

    9. Di bagian Choose service account type, pilih identitas yang akan digunakan:

      • Agen layanan Storage Transfer Service: Agen layanan default yang dikelola Google akan otomatis diberi akses ke bucket sumber dan tujuan.
      • Agen layanan terkelola pengguna: Gunakan akun layanan kustom yang telah Anda buat. Sebelum memilih opsi ini, pastikan akun layanan Anda telah diberi akses ke bucket sumber, bucket tujuan, dan Pub/Sub. Lihat Menggunakan agen layanan yang dikelola pengguna.
  18. Klik Create untuk membuat tugas transfer.

gcloud CLI

Untuk membuat tugas transfer baru, gunakan perintah gcloud transfer jobs create. Membuat tugas baru akan memulai transfer yang ditentukan, kecuali jika jadwal atau --do-not-run ditentukan.

gcloud CLI tidak mendukung transfer melalui CloudFront atau Jaringan pribadi terkelola.

gcloud transfer jobs create \
  s3://S3_BUCKET_NAME gs://STORAGE_BUCKET_NAME \
  --source-creds-file="relative_path/to/creds.json"

Ganti kode berikut:

  • S3_BUCKET_NAME adalah sumber data untuk transfer ini. Anda dapat menyertakan jalur secara opsional: s3://S3_BUCKET_NAME/S3_FOLDER_PATH

  • STORAGE_BUCKET_NAME adalah bucket Cloud Storage yang akan ditransfer. Untuk mentransfer ke direktori tertentu, tentukan gs://STORAGE_BUCKET_NAME/STORAGE_FOLDER_PATH/, termasuk garis miring di akhir.

  • --source-creds-file menentukan jalur relatif ke file lokal di komputer Anda yang menyertakan kredensial AWS untuk sumber transfer.

    Bergantung pada metode autentikasi Anda, format file JSON sebagai berikut:

    • Kunci akses AWS:
    {
        "accessKeyId": "AWS_ACCESS_KEY_ID",
        "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    • Identitas gabungan (ARN peran IAM AWS):
    {
        "roleArn": "arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"
    }

Opsi tambahannya mencakup:

  • --do-not-run mencegah Storage Transfer Service menjalankan tugas setelah perintah dikirimkan. Untuk menjalankan tugas, perbarui tugas untuk menambahkan jadwal, atau gunakan jobs run untuk memulainya secara manual.

  • --manifest-file menentukan jalur ke file CSV di Cloud Storage yang berisi daftar file yang akan ditransfer dari sumber Anda. Untuk pemformatan file manifes, lihat Mentransfer file atau objek tertentu menggunakan manifes.

  • Informasi lowongan: Anda dapat menentukan --name dan --description.

  • Jadwal: Tentukan --schedule-starts, --schedule-repeats-every, dan --schedule-repeats-until, atau --do-not-run.

  • Kondisi objek: Gunakan kondisi untuk menentukan objek mana yang akan ditransfer. Ini termasuk --include-prefixes, --exclude-prefixes, --match-glob, kondisi berbasis waktu di --include-modified-[before | after]-[absolute | relative], dan --include-storage-classes. Jika Anda menentukan folder dengan sumber, filter awalan akan relatif terhadap folder tersebut. Lihat Memfilter objek sumber menurut awalan dan Memfilter objek sumber menurut kelas penyimpanan untuk mengetahui informasi selengkapnya.

  • Opsi transfer: Tentukan apakah akan menimpa file tujuan (--overwrite-when=different atau always) dan apakah akan menghapus file tertentu selama atau setelah transfer (--delete-from=destination-if-unique atau source-after-transfer); tentukan nilai metadata yang akan dipertahankan (--preserve-metadata); dan secara opsional tetapkan kelas penyimpanan pada objek yang ditransfer (--custom-storage-class).

  • Notifikasi: Konfigurasikan notifikasi Pub/Sub untuk transfer dengan --notification-pubsub-topic, --notification-event-types, dan --notification-payload-format.

  • Cloud Logging: Aktifkan Cloud Logging dengan --log-actions dan --log-action-states. Baca Cloud Logging untuk Storage Transfer Service untuk mengetahui detailnya.

Untuk melihat semua opsi, jalankan gcloud transfer jobs create --help atau lihat dokumentasi referensi gcloud.

REST

Contoh berikut menunjukkan cara menggunakan Storage Transfer Service melalui REST API.

Saat Anda mengonfigurasi atau mengedit tugas transfer menggunakan Storage Transfer Service API, waktu harus dalam UTC. Untuk mengetahui informasi selengkapnya tentang cara menentukan jadwal tugas transfer, lihat Jadwal.

Saat membuat tugas transfer, jangan sertakan awalan s3:// untuk bucketName dalam nama sumber bucket Amazon S3.

Untuk melakukan autentikasi menggunakan identitas gabungan, bukan kunci akses, tentukan:

"roleArn": "arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"

bukan objek awsAccessKey. Lihat Melakukan autentikasi menggunakan identitas gabungan.

Transfer tanpa agen

Contoh berikut membuat tugas transfer menggunakan konfigurasi standar tanpa agen. Lihat referensi transferJobs.create untuk mengetahui detail selengkapnya.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

Distribusi CloudFront

Jika Anda mentransfer dari S3 melalui distribusi CloudFront, tentukan nama domain distribusi sebagai nilai kolom transferSpec.awsS3DataSource.cloudfrontDomain:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

Lihat Mentransfer dari S3 melalui CloudFront untuk mengetahui detail selengkapnya.

Jaringan pribadi terkelola

Untuk mentransfer dari S3 menggunakan jaringan pribadi yang dikelola Google, tentukan kolom transferSpec.awsS3DataSource.managedPrivateNetwork:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "managedPrivateNetwork": true,
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

Lihat Transfer melalui jaringan pribadi yang dikelola Google untuk mengetahui detail selengkapnya.

Library klien

Contoh berikut menunjukkan cara menggunakan Storage Transfer Service secara terprogram dengan Go, Java, Node.js, dan Python.

Saat Anda mengonfigurasi atau mengedit tugas transfer secara terprogram, waktu harus dalam UTC. Untuk mengetahui informasi selengkapnya tentang cara menentukan jadwal tugas transfer, lihat Jadwal.

Untuk mengetahui informasi selengkapnya tentang library klien Storage Transfer Service, lihat Mulai menggunakan library klien Storage Transfer Service.

Mentransfer dari Amazon S3 ke Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari Amazon S3 ke bucket Cloud Storage.

Saat membuat tugas transfer, jangan sertakan awalan s3:// untuk bucketName dalam nama sumber bucket Amazon S3.

Library klien Storage Transfer Service tidak mendukung transfer melalui CloudFront atau Jaringan pribadi terkelola.

Go

import (
	"context"
	"fmt"
	"io"
	"os"
	"time"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
)

func transferFromAws(w io.Writer, projectID string, awsSourceBucket string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID
	// projectID := "my-project-id"

	// The name of the Aws bucket to transfer objects from
	// awsSourceBucket := "my-source-bucket"

	// The name of the GCS bucket to transfer objects to
	// gcsSinkBucket := "my-sink-bucket"

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

	// A description of this job
	jobDescription := "Transfers objects from an AWS bucket to a GCS bucket"

	// The time to start the transfer
	startTime := time.Now().UTC()

	// The AWS access key credential, should be accessed via environment variable for security
	awsAccessKeyID := os.Getenv("AWS_ACCESS_KEY_ID")

	// The AWS secret key credential, should be accessed via environment variable for security
	awsSecretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AwsS3DataSource{
					AwsS3DataSource: &storagetransferpb.AwsS3Data{
						BucketName: awsSourceBucket,
						AwsAccessKey: &storagetransferpb.AwsAccessKey{
							AccessKeyId:     awsAccessKeyID,
							SecretAccessKey: awsSecretKey,
						}},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			Schedule: &storagetransferpb.Schedule{
				ScheduleStartDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				ScheduleEndDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				StartTimeOfDay: &timeofday.TimeOfDay{
					Hours:   int32(startTime.Hour()),
					Minutes: int32(startTime.Minute()),
					Seconds: int32(startTime.Second()),
				},
			},
			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", awsSourceBucket, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Mencari contoh yang lebih lama? Lihat Panduan Migrasi Storage Transfer Service.


import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsAccessKey;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsS3Data;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.Schedule;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferFromAws {

  // Creates a one-off transfer job from Amazon S3 to Google Cloud Storage.
  public static void transferFromAws(
      String projectId,
      String jobDescription,
      String awsSourceBucket,
      String gcsSinkBucket,
      long startDateTime)
      throws IOException {

    // Your Google Cloud Project ID
    // String projectId = "your-project-id";

    // A short description of this job
    // String jobDescription = "Sample transfer job from S3 to GCS.";

    // The name of the source AWS bucket to transfer data from
    // String awsSourceBucket = "yourAwsSourceBucket";

    // The name of the GCS bucket to transfer data to
    // String gcsSinkBucket = "your-gcs-bucket";

    // What day and time in UTC to start the transfer, expressed as an epoch date timestamp.
    // If this is in the past relative to when the job is created, it will run the next day.
    // long startDateTime =
    //     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2000-01-01 00:00:00").getTime();

    // The ID used to access your AWS account. Should be accessed via environment variable.
    String awsAccessKeyId = System.getenv("AWS_ACCESS_KEY_ID");

    // The Secret Key used to access your AWS account. Should be accessed via environment variable.
    String awsSecretAccessKey = System.getenv("AWS_SECRET_ACCESS_KEY");

    // Set up source and sink
    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAwsS3DataSource(
                AwsS3Data.newBuilder()
                    .setBucketName(awsSourceBucket)
                    .setAwsAccessKey(
                        AwsAccessKey.newBuilder()
                            .setAccessKeyId(awsAccessKeyId)
                            .setSecretAccessKey(awsSecretAccessKey)))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket))
            .build();

    // Parse epoch timestamp into the model classes
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.setTimeInMillis(startDateTime);
    // Note that this is a Date from the model class package, not a java.util.Date
    Date startDate =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay startTime =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();
    Schedule schedule =
        Schedule.newBuilder()
            .setScheduleStartDate(startDate)
            .setScheduleEndDate(startDate)
            .setStartTimeOfDay(startTime)
            .build();

    // Set up the transfer job
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(transferSpec)
            .setSchedule(schedule)
            .setStatus(Status.ENABLED)
            .build();

    // Create a Transfer Service client
    StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();

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

    System.out.println("Created transfer job from AWS to GCS:");
    System.out.println(response.toString());
  }
}

Node.js


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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

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

// AWS S3 source bucket name
// awsSourceBucket = 'my-s3-source-bucket'

// AWS Access Key ID
// awsAccessKeyId = 'AKIA...'

// AWS Secret Access Key
// awsSecretAccessKey = 'HEAoMK2.../...ku8'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

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

/**
 * Creates a one-time transfer job from Amazon S3 to Google Cloud Storage.
 */
async function transferFromS3() {
  // Setting the start date and the end date as the same time creates a
  // one-time transfer
  const now = new Date();
  const oneTimeSchedule = {
    day: now.getDate(),
    month: now.getMonth() + 1,
    year: now.getFullYear(),
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: oneTimeSchedule,
        scheduleEndDate: oneTimeSchedule,
      },
      transferSpec: {
        awsS3DataSource: {
          bucketName: awsSourceBucket,
          awsAccessKey: {
            accessKeyId: awsAccessKeyId,
            secretAccessKey: awsSecretAccessKey,
          },
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

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

transferFromS3();

Python

Mencari contoh yang lebih lama? Lihat Panduan Migrasi Storage Transfer Service.

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_aws_transfer(
    project_id: str,
    description: str,
    source_bucket: str,
    aws_access_key_id: str,
    aws_secret_access_key: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Amazon S3 to Google Cloud
    Storage."""

    client = storage_transfer.StorageTransferServiceClient()

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

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

    # AWS S3 source bucket name
    # source_bucket = 'my-s3-source-bucket'

    # AWS Access Key ID
    # aws_access_key_id = 'AKIA...'

    # AWS Secret Access Key
    # aws_secret_access_key = 'HEAoMK2.../...ku8'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    now = datetime.utcnow()
    # Setting the start date and the end date as
    # the same time creates a one-time transfer
    one_time_schedule = {"day": now.day, "month": now.month, "year": now.year}

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": one_time_schedule,
                    "schedule_end_date": one_time_schedule,
                },
                "transfer_spec": {
                    "aws_s3_data_source": {
                        "bucket_name": source_bucket,
                        "aws_access_key": {
                            "access_key_id": aws_access_key_id,
                            "secret_access_key": aws_secret_access_key,
                        },
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

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