Membuat transfer

Halaman ini menunjukkan cara membuat dan memulai tugas transfer.

Untuk mengetahui apakah sumber dan tujuan (juga dikenal sebagai sink) Anda 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 mesin dengan akses ke sumber atau tujuan Anda.

  • 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 bagian 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 disalurkan ke nama resource Google Cloud lain dan dapat diekspos ke sistem internal Google di luar project Anda.

Google Cloud console

  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 Scheduling mode. Transfer batch dieksekusi secara satu kali atau terjadwal. Transfer yang didorong peristiwa terus-menerus memantau sumber dan mentransfer data saat ditambahkan atau diubah.

      Untuk mengonfigurasi transfer yang didorong peristiwa, ikuti petunjuk di Transfer yang didorong 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 bucket persis di 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 yang didorong 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 bersifat 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 Transfer 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 All services > Storage > Storage accounts.

      2. Nama container — nama container Microsoft Azure Storage.

        Nama container 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 mengetahui 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 sehingga Anda dapat menyelesaikan transfer dengan berhasil.
    4. Secara opsional, pilih untuk memfilter objek menurut awalan atau menurut tanggal terakhir diubah. Jika Anda menentukan folder sebagai lokasi sumber, filter awalan bersifat 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 dan 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 tentang 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 bersifat 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 atau folder, masukkan bucket tujuan dan (opsional) nama folder, atau klik Jelajahi 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 opsi penjadwalan Anda:

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

        • Jalankan sekali: 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 agar pengalihan berjalan terus-menerus.

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

        • Jalankan dengan frekuensi khusus: Menjalankan transfer dengan frekuensi yang Anda pilih. Anda dapat memilih untuk mengulangi transfer pada interval reguler Jam, Hari, atau Minggu.

          Anda dapat memasukkan Tanggal akhir opsional, atau membiarkan Tanggal akhir kosong agar pengalihan berjalan 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.

    4. Klik Next step.

    5. Pilih setelan untuk tugas transfer. Beberapa opsi hanya tersedia untuk kombinasi sumber/tujuan tertentu.

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

      2. Di bagian Opsi metadata, pilih untuk menggunakan opsi default, atau klik Lihat dan pilih opsi untuk menentukan nilai bagi semua metadata yang didukung. Lihat Penyimpanan metadata untuk mengetahui detailnya.

      3. Di bagian Kapan menimpa, 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 saat file sumber memiliki nama yang sama, meskipun keduanya identik.

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

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

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

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

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

      5. Untuk transfer antar-bucket Cloud Storage, pilih apakah akan mentransfer folder terkelola.

      6. Aktifkan atau nonaktifkan Logging for Storage Transfer Service.

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

    6. Jika Anda mendelegasikan izin agen layanan ke akun layanan yang dikelola pengguna, pilih opsi tersebut dan masukkan alamat email akun layanan dalam format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    7. Klik Buat.

    Sistem file​

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

    2. Tentukan jalur direktori tujuan yang sepenuhnya memenuhi syarat.

    3. Klik Next step.

    4. Pilih opsi penjadwalan Anda:

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

        • Jalankan sekali: 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 agar pengalihan berjalan terus-menerus.

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

        • Jalankan dengan frekuensi khusus: Menjalankan transfer dengan frekuensi yang Anda pilih. Anda dapat memilih untuk mengulangi transfer pada interval reguler Jam, Hari, atau Minggu.

          Anda dapat memasukkan Tanggal akhir opsional, atau membiarkan Tanggal akhir kosong agar pengalihan berjalan 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.

    5. Klik Next step.

    6. Tentukan apakah akan menggunakan file manifes.

    7. Pilih apakah akan mempertahankan metadata; kapan akan menimpa; dan kapan akan menghapus file di sumber atau tujuan.

    8. Pilih opsi logging Anda.

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

    10. Jika Anda mendelegasikan izin agen layanan ke akun layanan yang dikelola pengguna, pilih opsi tersebut dan masukkan alamat email akun layanan dalam format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    11. 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:

  • 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 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. Nilai 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 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 komputer Anda yang mencakup kredensial AWS atau Azure untuk sumber transfer. Untuk mengetahui informasi pemformatan file kredensial, lihat referensi TransferSpec.

  • --do-not-run mencegah Storage Transfer Service menjalankan tugas setelah perintah dikirimkan. 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 pekerjaan: 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 akan ditransfer. Hal ini mencakup --include-prefixes dan --exclude-prefixes, serta 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 mengganti 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: Konfigurasi 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 Cloud Logging untuk Storage Transfer Service untuk mengetahui detailnya.

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

  • --source-endpoint (wajib) menentukan endpoint sistem penyimpanan Anda. Contoh, s3.example.com. Hubungi penyedia Anda untuk mengetahui format yang benar. Jangan tentukan protokol (http:// atau https://).
  • --source-signing-region menentukan region untuk menandatangani permintaan. 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 penentuan alamat 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 yang dihosting 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 S3 Listing API 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 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 antara dua sistem file, Anda harus menentukan kumpulan agen sumber, kumpulan agen tujuan, dan bucket Cloud Storage perantara yang akan dilewati data.

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

Saat 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 Jadwalkan.

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.

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

Transfer dari Amazon S3 ke Cloud Storage

Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

Mentransfer data antara 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 mengetahui informasi selengkapnya tentang SAS Microsoft Azure Storage, lihat Memberikan akses terbatas ke resource Azure Storage menggunakan tanda tangan akses bersama (SAS).

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

Permintaan 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, maka 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 Anda 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, waktu harus dalam UTC. Untuk mengetahui informasi selengkapnya tentang cara menentukan jadwal tugas transfer, lihat Jadwalkan.

Untuk mengetahui informasi selengkapnya tentang library klien Storage Transfer Service, lihat Mulai menggunakan 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 contoh 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 contoh 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}")

Transfer dari Amazon S3 ke Cloud Storage

Lihat Mentransfer dari Amazon S3 ke Cloud Storage.

Mentransfer data antara 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 mengetahui informasi selengkapnya tentang SAS Microsoft Azure Storage, lihat Memberikan akses terbatas ke resource Azure Storage menggunakan tanda tangan akses bersama (SAS).

Sebelum memulai, tinjau 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 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"
	"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 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 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 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 {
  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 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 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.