Membuat transfer

Halaman ini menunjukkan cara membuat dan memulai tugas transfer.

Untuk mengetahui apakah sumber dan tujuan Anda (juga dikenal sebagai sink) didukung oleh Storage Transfer Service, lihat Sumber dan sink yang didukung.

Agen dan kumpulan agen

Bergantung pada sumber dan tujuan, Anda mungkin perlu membuat dan mengonfigurasi kumpulan agen serta menginstal agen di komputer dengan akses ke sumber atau tujuan.

  • Transfer dari Amazon S3, Microsoft Azure, daftar URL, atau Cloud Storage ke Cloud Storage tidak memerlukan agen dan kumpulan agen.

  • Transfer yang sumber dan/atau tujuannya adalah sistem file, atau dari penyimpanan yang kompatibel dengan S3, memerlukan agen dan kumpulan agen. Lihat Mengelola kumpulan agen untuk mengetahui petunjuknya.

Sebelum memulai

Sebelum mengonfigurasi transfer, pastikan Anda telah mengonfigurasi akses:

Jika Anda menggunakan perintah gcloud, instal gcloud CLI.

Buat transfer

Jangan sertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan dalam nama tugas transfer Anda. Nama resource dapat di-propagasi 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 Buat tugas transfer akan ditampilkan.

  3. Pilih sumber:

    Cloud Storage

    Akun pengguna Anda harus memiliki izin storage.buckets.get untuk memilih bucket sumber dan tujuan. Atau, Anda dapat mengetik nama bucket secara langsung. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah akses.

    1. Di bagian Source type, pilih Cloud Storage.

    2. Pilih Jenis tujuan.

    3. Jika tujuan Anda adalah Cloud Storage, pilih Mode penjadwalan. Transfer batch dijalankan secara satu kali atau terjadwal. Transfer berbasis peristiwa terus-menerus memantau sumber dan mentransfer data saat ditambahkan atau diubah.

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

    4. Klik Next step.

    5. Pilih bucket dan (opsional) folder di bucket tersebut dengan melakukan salah satu tindakan berikut:

      • Masukkan nama dan jalur bucket Cloud Storage yang ada di kolom Bucket atau folder tanpa awalan gs://. Contohnya, my-test-bucket/path/to/files Untuk menentukan bucket Cloud Storage dari project lain, ketik nama secara persis ke dalam kolom Bucket name.

      • Pilih daftar bucket yang ada di project Anda dengan mengklik Jelajahi, lalu memilih bucket.

        Saat mengklik Jelajahi, Anda dapat memilih bucket di project lain dengan mengklik Project ID, lalu memilih Project ID dan bucket baru.

      • Untuk membuat bucket baru, klik Buat bucket baru.

    6. Jika ini adalah transfer berbasis peristiwa, masukkan nama langganan Pub/Sub, yang menggunakan format berikut:

      projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
      
    7. Secara opsional, pilih untuk memfilter objek menurut awalan atau menurut tanggal terakhir diubah. 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.
    8. Klik Next step.

    Amazon S3

    Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

    Penyimpanan yang kompatibel dengan S3

    Lihat Mentransfer dari penyimpanan yang kompatibel dengan S3 ke Cloud Storage.

    Microsoft Azure Blob Storage

    1. Di bagian Jenis sumber, pilih Azure Blob Storage atau Data Lake Storage Gen2.

    2. Klik Next step.

    3. Tentukan nilai berikut:

      1. Nama akun penyimpanan — nama akun Microsoft Azure Storage sumber.

        Nama akun penyimpanan ditampilkan di portal Microsoft Azure Storage di bagian Semua layanan > Penyimpanan > Akun penyimpanan.

      2. Nama penampung — nama penampung Microsoft Azure Storage.

        Nama penampung ditampilkan di portal Microsoft Azure Storage di bagian Storage explorer > Blob containers.

      3. Tanda tangan akses bersama (SAS) — token SAS Microsoft Azure Storage yang dibuat dari kebijakan akses tersimpan. Untuk informasi selengkapnya, lihat Memberikan akses terbatas ke resource Azure Storage menggunakan tanda tangan akses bersama (SAS).

        Waktu habis masa berlaku default untuk token SAS adalah 8 jam. Saat membuat token SAS, pastikan untuk menetapkan waktu habis masa berlaku yang wajar yang memungkinkan Anda menyelesaikan transfer dengan sukses.
    4. Secara opsional, pilih untuk memfilter objek menurut awalan atau menurut tanggal terakhir diubah. 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.
    5. Klik Next step.

    Sistem file

    1. Di bagian Source type, pilih POSIX file system.

    2. Pilih Jenis tujuan, lalu klik Langkah berikutnya.

    3. Pilih kumpulan agen yang ada, atau pilih Buat kumpulan agen dan ikuti petunjuk untuk membuat kumpulan baru.

    4. Tentukan jalur yang sepenuhnya memenuhi syarat dari direktori sistem file.

    5. Klik Next step.

    HDFS

    Lihat Transfer dari HDFS ke Cloud Storage.

    Daftar URL

    1. Di bagian Jenis sumber, pilih Daftar URL, lalu klik Langkah berikutnya.

    2. Di bagian URL file TSV, berikan URL ke file nilai yang dipisahkan tab (TSV). Lihat Membuat Daftar URL untuk mengetahui detail cara membuat file TSV.

    3. Secara opsional, pilih untuk memfilter objek menurut awalan atau menurut tanggal terakhir diubah. 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.
    4. Klik Next step.

  4. Pilih tujuan:

    Cloud Storage​

    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 saat ini. Untuk membuat bucket baru, klik Buat bucket baru.

    2. Klik Next step.

    3. Pilih setelan untuk tugas transfer. Beberapa opsi hanya tersedia untuk kombinasi sumber/penampung tertentu.

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

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

      3. Di bagian Kapan akan menimpa, pilih salah satu opsi berikut:

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

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

      4. Di bagian Waktu penghapusan, pilih salah satu opsi berikut:

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

        • Hapus file dari sumber setelah ditransfer: Menghapus file dari sumber setelah ditransfer ke tujuan.

        • Menghapus file dari tujuan jika file itu juga tidak ada dalam sumber: Jika file dalam bucket Cloud Storage tujuan juga tidak ada dalam sumber, hapus file dari bucket Cloud Storage.

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

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

    4. Klik Next step.

    Sistem file​

    1. Pilih kumpulan agen yang ada, atau pilih Create agent pool dan ikuti petunjuk untuk membuat kumpulan baru.

    2. Tentukan jalur direktori tujuan yang sepenuhnya memenuhi syarat.

    3. Klik Next step.

  5. Pilih opsi penjadwalan:

    1. Dari menu drop-down Jalankan sekali, pilih salah satu opsi berikut:

      • Run once: Menjalankan satu transfer, dimulai pada waktu yang Anda pilih.

      • Jalankan setiap hari: Menjalankan transfer setiap hari, dimulai pada waktu yang Anda pilih.

        Anda dapat memasukkan Tanggal akhir opsional, atau membiarkan Tanggal akhir kosong 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 dengan frekuensi yang Anda pilih. Anda dapat memilih untuk mengulangi transfer dengan interval reguler Jam, Hari, atau Minggu.

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

    2. Dari menu drop-down Mulai sekarang, pilih salah satu opsi berikut:

      • Mulai sekarang: Memulai transfer setelah Anda mengklik Buat.

      • Mulai pada: Memulai transfer pada tanggal dan waktu yang Anda pilih. Klik Kalender untuk menampilkan kalender guna memilih tanggal mulai.

    3. Untuk membuat tugas transfer, klik Buat.

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 transfer jobs create \
  SOURCE DESTINATION

Dengan keterangan:

  • SOURCE adalah sumber data untuk transfer ini. Format untuk setiap sumber adalah:

    • Cloud Storage: gs://BUCKET_NAME. Untuk mentransfer dari folder tertentu, tentukan gs://BUCKET_NAME/FOLDER_PATH/, termasuk garis miring penutup.
    • Amazon S3: s3://BUCKET_NAME/FOLDER_PATH
    • Penyimpanan yang kompatibel dengan S3: s3://BUCKET_NAME. Nama bucket bersifat relatif terhadap endpoint. Misalnya, jika data Anda berada di https://us-east-1.example.com/folder1/bucket_a, masukkan s3://folder1/bucket_a.
    • Microsoft Azure Storage: https://myaccount.blob.core.windows.net/CONTAINER_NAME
    • Daftar URL: https://PATH_TO_URL_LIST atau http://PATH_TO_URL_LIST
    • Sistem file POSIX: posix:///PATH. Jalur ini harus berupa jalur absolut dari root mesin host agen.
    • HDFS: hdfs:///PATH
  • DESTINATION adalah salah satu dari:

    • Cloud Storage: gs://BUCKET_NAME. Untuk mentransfer ke direktori tertentu, tentukan gs://BUCKET_NAME/FOLDER_PATH/, termasuk garis miring penutup.
    • Sistem file POSIX: posix:///PATH. Jalur ini harus berupa jalur absolut dari root mesin host agen.

Jika transfer memerlukan agen transfer, opsi berikut tersedia:

  • --source-agent-pool menentukan kumpulan agen sumber yang akan digunakan untuk transfer ini. Diperlukan untuk transfer yang berasal dari sistem file.

  • --destination-agent-pool menentukan kumpulan agen tujuan yang akan digunakan untuk transfer ini. Diperlukan untuk transfer ke sistem file.

  • --intermediate-storage-path adalah jalur ke bucket Cloud Storage, dalam bentuk gs://my-intermediary-bucket. Diperlukan untuk transfer antara dua sistem file. Lihat artikel Membuat bucket Cloud Storage sebagai perantara untuk mengetahui detail tentang cara membuat bucket perantara.

Opsi tambahan mencakup:

  • --source-creds-file menentukan jalur relatif ke file lokal di mesin Anda yang menyertakan kredensial AWS atau Azure untuk sumber transfer. Untuk informasi pemformatan file kredensial, lihat referensi TransferSpec.

  • --do-not-run mencegah Storage Transfer Service menjalankan tugas setelah perintah dikirim. Untuk menjalankan tugas, perbarui tugas tersebut 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 tugas: Anda dapat menentukan --name, --description, dan --source-creds-file.

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

  • Kondisi objek: Gunakan kondisi untuk menentukan objek mana yang ditransfer. Hal ini mencakup --include-prefixes dan --exclude-prefixes, dan kondisi berbasis waktu di --include-modified-[before | after]-[absolute | relative]. Jika Anda menentukan folder dengan sumber, filter awalan bersifat relatif terhadap folder tersebut. Lihat Memfilter objek sumber menurut awalan untuk mengetahui informasi selengkapnya.

    Kondisi objek tidak didukung untuk transfer yang melibatkan sistem file.

  • 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 class 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 untuk transfer tanpa agen, atau transfer dari sumber yang kompatibel dengan S3, dengan --log-actions dan --log-action-states. Lihat artikel Cloud Logging untuk Storage Transfer Service untuk mengetahui detailnya.

Transfer dari sumber yang kompatibel dengan S3 juga menggunakan opsi berikut:

  • --source-endpoint (diperlukan) menentukan endpoint sistem penyimpanan Anda. Contoh, s3.example.com. Hubungi penyedia Anda untuk mengetahui pemformatan yang benar. Jangan menentukan protokol (http:// atau https://).
  • --source-signing-region menentukan wilayah untuk permintaan penandatanganan. Hapus tanda ini jika penyedia penyimpanan Anda tidak memerlukan wilayah 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.example.com/BUCKET_NAME/KEY_NAME. Gaya hosting virtual menggunakan format `https://BUCKET_NAME.s3.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 melihat semua opsi, jalankan gcloud transfer jobs create --help atau lihat dokumentasi referensi gcloud.

Contoh

Amazon S3 ke Cloud Storage

Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

Penyimpanan yang kompatibel dengan S3 ke Cloud Storage

Lihat Mentransfer dari penyimpanan yang kompatibel dengan S3 ke Cloud Storage.

Sistem file ke Cloud Storage

Lihat Mentransfer dari sistem file ke Cloud Storage.

Cloud Storage ke sistem file

Untuk mentransfer dari bucket Cloud Storage ke sistem file, tentukan hal berikut.

gcloud transfer jobs create \
  gs://my-storage-bucket posix:///tmp/destination \
  --destination-agent-pool=my-destination-agent-pool

Sistem file ke sistem file

Untuk mentransfer antar-sistem file, Anda harus menentukan kumpulan agen sumber, kumpulan agen tujuan, dan bucket Cloud Storage perantara tempat data akan diteruskan.

Lihat Membuat bucket Cloud Storage sebagai perantara untuk mengetahui detail tentang bucket perantara.

Kemudian, tentukan 3 resource ini saat memanggil transfer jobs create:

gcloud transfer jobs create \
  posix:///tmp/source/on/systemA posix:///tmp/destination/on/systemB \
  --source-agent-pool=source_agent_pool \
  --destination-agent-pool=destination_agent_pool \
  --intermediate-storage-path=gs://my-intermediary-bucket

REST

Contoh berikut menunjukkan cara menggunakan Layanan Transfer Penyimpanan melalui REST API.

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

Melakukan transfer antar bucket Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari satu bucket Cloud Storage ke bucket lainnya. Misalnya, Anda dapat memindahkan data ke bucket di lokasi lain.

Minta menggunakan transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME"
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }
}
Respons:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2015-01-01T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2015-01-01T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 1,
                  "month": 1,
                  "year": 2015
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "gcsDataSource": {
                  "bucketName": "GCS_SOURCE_NAME",
              },
              "gcsDataSink": {
                  "bucketName": "GCS_NEARLINE_SINK_NAME"
              },
              "objectConditions": {
                  "minTimeElapsedSinceLastModification": "2592000.000s"
              },
              "transferOptions": {
                  "deleteObjectsFromSourceAfterTransfer": true
              }
          }
      }
  ]
}

Mentransfer dari Amazon S3 ke Cloud Storage

Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

Mentransfer antar-Microsoft Azure Blob Storage dan Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari Microsoft Azure Storage ke bucket Cloud Storage, menggunakan token tanda tangan akses bersama (SAS) Microsoft Azure Storage.

Untuk informasi selengkapnya tentang SAS Microsoft Azure Storage, lihat Memberikan akses terbatas ke resource Azure Storage menggunakan tanda tangan akses bersama (SAS).

Sebelum memulai, tinjau artikel Mengonfigurasi akses ke Microsoft Azure Storage dan Harga untuk memahami implikasi pemindahan data dari Microsoft Azure Storage ke Cloud Storage.

Minta menggunakan transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 14,
          "month": 2,
          "year": 2020
      },
      "scheduleEndDate": {
          "day": 14
          "month": 2,
          "year": 2020
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "azureBlobStorageDataSource": {
          "storageAccount": "AZURE_SOURCE_NAME",
          "azureCredentials": {
              "sasToken": "AZURE_SAS_TOKEN",
          },
          "container": "AZURE_CONTAINER",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}
Respons:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2020-02-14T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2020-02-14T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 14
                  "month": 2,
                  "year": 2020
              },
              "scheduleEndDate": {
                  "day": 14,
                  "month": 2,
                  "year": 2020
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "azureBlobStorageDataSource": {
                  "storageAccount": "AZURE_SOURCE_NAME",
                  "azureCredentials": {
                      "sasToken": "AZURE_SAS_TOKEN",
                  },
                  "container": "AZURE_CONTAINER",
              },
              "objectConditions": {},
              "transferOptions": {}
          }
      }
  ]
}

Mentransfer dari sistem file

Lihat Mentransfer dari sistem file ke Cloud Storage.

Menentukan jalur sumber dan tujuan

Jalur sumber dan tujuan memungkinkan Anda menentukan direktori sumber dan tujuan saat mentransfer data ke bucket Cloud Storage. Misalnya, Anda memiliki file file1.txt dan file2.txt serta bucket Cloud Storage bernama B. Jika Anda menetapkan jalur tujuan bernama my-stuff, setelah transfer selesai, file Anda akan berada di gs://B/my-stuff/file1.txt dan gs://B/my-stuff/file2.txt.

Menentukan jalur sumber

Untuk menentukan jalur sumber saat membuat tugas transfer, tambahkan kolom path ke kolom gcsDataSource dalam spesifikasi TransferSpec Anda:

{
gcsDataSource: {
  bucketName: "SOURCE_BUCKET",
  path: "SOURCE_PATH/",
},
}

Dalam contoh ini:

  • SOURCE_BUCKET: Bucket Cloud Storage sumber.
  • SOURCE_PATH: Jalur Cloud Storage sumber.

Menentukan jalur tujuan

Untuk menentukan folder tujuan saat membuat tugas transfer, tambahkan kolom path ke kolom gcsDataSink dalam spesifikasi TransferSpec Anda:

{
gcsDataSink: {
  bucketName: "DESTINATION_BUCKET",
  path: "DESTINATION_PATH/",
},
}

Dalam contoh ini:

  • DESTINATION_BUCKET: Bucket Cloud Storage tujuan.
  • DESTINATION_PATH: Jalur Cloud Storage tujuan.

Contoh permintaan lengkap

Berikut adalah contoh permintaan lengkap:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME",
          "path": "GCS_SOURCE_PATH",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME",
          "path": "GCS_SINK_PATH",
      },
      "objectConditions": {
          "minTimeElapsedSinceLastModification": "2592000s"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }

}

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, waktunya harus dalam UTC. Untuk informasi selengkapnya tentang cara menentukan jadwal tugas transfer, lihat Jadwal.

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

Melakukan transfer antar bucket Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari satu bucket Cloud Storage ke bucket lainnya. Misalnya, Anda dapat memindahkan data ke bucket di lokasi lain.

Go

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

	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
	"google.golang.org/protobuf/types/known/durationpb"

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

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

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

	// The name of the Nearline GCS bucket to transfer objects to
	// gcsNearlineSinkBucket := "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 that haven't been modified in 30 days to a Nearline bucket"

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

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsNearlineSinkBucket}},
				DataSource: &storagetransferpb.TransferSpec_GcsDataSource{
					GcsDataSource: &storagetransferpb.GcsData{BucketName: gcsSourceBucket},
				},
				ObjectConditions: &storagetransferpb.ObjectConditions{
					MinTimeElapsedSinceLastModification: &durationpb.Duration{Seconds: 2592000 /*30 days */},
				},
				TransferOptions: &storagetransferpb.TransferOptions{DeleteObjectsFromSourceAfterTransfer: true},
			},
			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", gcsSourceBucket, gcsNearlineSinkBucket, resp.Name)
	return resp, nil
}

Java

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

import com.google.protobuf.Duration;
import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.ObjectConditions;
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.TransferOptions;
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 TransferToNearline {
  /**
   * Creates a one-off transfer job that transfers objects in a standard GCS bucket that are more
   * than 30 days old to a Nearline GCS bucket.
   */
  public static void transferToNearline(
      String projectId,
      String jobDescription,
      String gcsSourceBucket,
      String gcsNearlineSinkBucket,
      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 of old objects to a Nearline GCS bucket.";

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

    // The name of the Nearline GCS bucket to transfer old objects to
    // String gcsSinkBucket = "your-nearline-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();

    // 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 date =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay time =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setGcsDataSource(GcsData.newBuilder().setBucketName(gcsSourceBucket))
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsNearlineSinkBucket))
                    .setObjectConditions(
                        ObjectConditions.newBuilder()
                            .setMinTimeElapsedSinceLastModification(
                                Duration.newBuilder().setSeconds(2592000 /* 30 days */)))
                    .setTransferOptions(
                        TransferOptions.newBuilder().setDeleteObjectsFromSourceAfterTransfer(true)))
            .setSchedule(Schedule.newBuilder().setScheduleStartDate(date).setStartTimeOfDay(time))
            .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 standard bucket to Nearline bucket:");
    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'

// Google Cloud Storage source bucket name
// gcsSourceBucket = 'my-gcs-source-bucket'

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

// Date to start daily migration
// startDate = new Date()

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

/**
 * Create a daily migration from a GCS bucket to another GCS bucket for
 * objects untouched for 30+ days.
 */
async function createDailyNearline30DayMigration() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: {
          day: startDate.getDate(),
          month: startDate.getMonth() + 1,
          year: startDate.getFullYear(),
        },
      },
      transferSpec: {
        gcsDataSource: {
          bucketName: gcsSourceBucket,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
        objectConditions: {
          minTimeElapsedSinceLastModification: {
            seconds: 2592000, // 30 days
          },
        },
        transferOptions: {
          deleteObjectsFromSourceAfterTransfer: true,
        },
      },
    },
  });

  console.log(`Created transferJob: ${transferJob.name}`);
}

createDailyNearline30DayMigration();

Python

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

from datetime import datetime

from google.cloud import storage_transfer
from google.protobuf.duration_pb2 import Duration


def create_daily_nearline_30_day_migration(
    project_id: str,
    description: str,
    source_bucket: str,
    sink_bucket: str,
    start_date: datetime,
):
    """Create a daily migration from a GCS bucket to a Nearline GCS bucket
    for objects untouched for 30 days."""

    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'

    # Google Cloud Storage source bucket name
    # source_bucket = 'my-gcs-source-bucket'

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

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": {
                        "day": start_date.day,
                        "month": start_date.month,
                        "year": start_date.year,
                    }
                },
                "transfer_spec": {
                    "gcs_data_source": {
                        "bucket_name": source_bucket,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                    "object_conditions": {
                        "min_time_elapsed_since_last_modification": Duration(
                            seconds=2592000  # 30 days
                        )
                    },
                    "transfer_options": {
                        "delete_objects_from_source_after_transfer": True
                    },
                },
            }
        }
    )

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

Mentransfer dari Amazon S3 ke Cloud Storage

Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

Mentransfer antar-Microsoft Azure Blob Storage dan Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari Microsoft Azure Storage ke bucket Cloud Storage, menggunakan token tanda tangan akses bersama (SAS) Microsoft Azure Storage.

Untuk informasi selengkapnya tentang SAS Microsoft Azure Storage, lihat Memberikan akses terbatas ke resource Azure Storage menggunakan tanda tangan akses bersama (SAS).

Sebelum memulai, tinjau artikel Mengonfigurasi akses ke Microsoft Azure Storage dan Harga untuk memahami implikasi pemindahan data dari Microsoft Azure Storage ke 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 Storage Transfer Service Go API.

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

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

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

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

	// The name of your Azure Storage account.
	// azureStorageAccountName := "my-azure-storage-acc"

	// The name of the Azure container to transfer objects from.
	// azureSourceContainer := "my-source-container"

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

	// The Azure SAS token, should be accessed via environment variable for security
	azureSasToken := os.Getenv("AZURE_SAS_TOKEN")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AzureBlobStorageDataSource{
					AzureBlobStorageDataSource: &storagetransferpb.AzureBlobStorageData{
						StorageAccount: azureStorageAccountName,
						AzureCredentials: &storagetransferpb.AzureCredentials{
							SasToken: azureSasToken,
						},
						Container: azureSourceContainer,
					},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			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", azureSourceContainer, 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 Storage Transfer Service Java API.

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

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferProto.RunTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureBlobStorageData;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureCredentials;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
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 java.io.IOException;
import java.util.concurrent.ExecutionException;

public class TransferFromAzure {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Your Google Cloud Project ID
    String projectId = "my-project-id";

    // Your Azure Storage Account name
    String azureStorageAccount = "my-azure-account";

    // The Azure source container to transfer data from
    String azureSourceContainer = "my-source-container";

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

    transferFromAzureBlobStorage(
        projectId, azureStorageAccount, azureSourceContainer, gcsSinkBucket);
  }

  /**
   * Creates and runs a transfer job to transfer all data from an Azure container to a GCS bucket.
   */
  public static void transferFromAzureBlobStorage(
      String projectId,
      String azureStorageAccount,
      String azureSourceContainer,
      String gcsSinkBucket)
      throws IOException, ExecutionException, InterruptedException {

    // Your Azure SAS token, should be accessed via environment variable
    String azureSasToken = System.getenv("AZURE_SAS_TOKEN");

    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAzureBlobStorageDataSource(
                AzureBlobStorageData.newBuilder()
                    .setAzureCredentials(
                        AzureCredentials.newBuilder().setSasToken(azureSasToken).build())
                    .setContainer(azureSourceContainer)
                    .setStorageAccount(azureStorageAccount))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).build())
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setStatus(Status.ENABLED)
            .setTransferSpec(transferSpec)
            .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());

      // Run the created job
      storageTransfer
          .runTransferJobAsync(
              RunTransferJobRequest.newBuilder()
                  .setProjectId(projectId)
                  .setJobName(response.getName())
                  .build())
          .get();

      System.out.println(
          "Created and ran a transfer job from "
              + azureSourceContainer
              + " 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 Storage Transfer Service Node.js API.

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


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

// Azure Storage Account name
// azureStorageAccount = 'accountname'

// Azure Storage Account name
// azureSourceContainer = 'my-azure-source-bucket'

// Azure Shared Access Signature token
// azureSASToken = '?sv=...'

// 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 Azure Blob Storage to Google Cloud Storage.
 */
async function transferFromBlobStorage() {
  // 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: {
        azureBlobStorageDataSource: {
          azureCredentials: {
            sasToken: azureSASToken,
          },
          container: azureSourceContainer,
          storageAccount: azureStorageAccount,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

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

transferFromBlobStorage();

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 Storage Transfer Service Python API.

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

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_azure_transfer(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    source_container: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Azure Blob Storage to Google Cloud
    Storage."""

    # Initialize client that will be used to create storage transfer requests.
    # This client only needs to be created once, and can be reused for
    # multiple requests.
    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'

    # Azure Storage Account name
    # azure_storage_account = 'accountname'

    # Azure Shared Access Signature token
    # azure_sas_token = '?sv=...'

    # Azure Blob source container name
    # source_container = 'my-azure-source-bucket'

    # 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": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "azure_credentials": {"sas_token": azure_sas_token},
                        "container": source_container,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

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

Mentransfer dari sistem file

Lihat Mentransfer dari sistem file ke Cloud Storage.