Membuat transfer

Halaman ini menunjukkan cara membuat dan memulai tugas transfer.

Untuk melihat 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 dan menginstal agen di komputer yang memiliki 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 diterapkan 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 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 dijalankan satu kali atau terjadwal. Transfer berbasis peristiwa terus memantau sumber dan mentransfer data saat ditambahkan atau diubah.

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

    4. Klik Langkah berikutnya.

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

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

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

        Saat mengklik Browse, 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 berdasarkan awalan atau berdasarkan 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 dimulai dengan my-test-bucket/path/file.
    8. Klik Langkah berikutnya.

    Amazon S3

    1. Di bagian Jenis sumber, pilih Amazon S3.

    2. Sebagai Jenis tujuan, pilih Google Cloud Storage.

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

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

    4. Klik Langkah berikutnya.

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

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

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

    7. Pilih metode autentikasi Amazon Web Services (AWS). Anda dapat memberikan kunci akses AWS atau Amazon Resource Name (ARN) untuk penggabungan identitas:

      • Kunci akses: Masukkan kunci akses Anda di kolom ID kunci akses dan rahasia yang terkait dengan kunci akses Anda di kolom Kunci akses rahasia.

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

        arn:aws:iam::ACCOUNT:role/ROLE-NAME-WITH-PATH
        

        Dengan keterangan:

        • ACCOUNT: ID akun AWS tanpa tanda hubung.
        • ROLE-NAME-WITH-PATH: Nama peran AWS termasuk jalur.

        Untuk informasi lebih lanjut tentang ARN, lihat ARN IAM.

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

      arn:aws:sqs:us-east-1:1234567890:event-queue
      
    9. Secara opsional, pilih untuk memfilter objek berdasarkan awalan atau berdasarkan 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 dimulai dengan my-test-bucket/path/file.
    10. Klik Langkah berikutnya.

    Penyimpanan yang kompatibel dengan S3

    1. Di bagian Source type, pilih S3-compatible object storage.

    2. Klik Langkah berikutnya.

    3. Tentukan informasi yang diperlukan untuk transfer ini:

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

      2. Masukkan Bucket name yang sesuai dengan endpoint. Misalnya, jika data Anda berada di:

        https://us-east-1.example.com/folder1/bucket_a

        Masukkan: folder1/bucket_a

      3. Masukkan Endpoint. Jangan sertakan protokol (http:// atau https://). Pada contoh dari langkah sebelumnya, Anda akan memasukkan:

        us-east-1.example.com

    4. Tentukan atribut opsional untuk transfer ini:

      1. Masukkan Wilayah penandatanganan yang akan digunakan untuk penandatanganan permintaan. Kosongkan kolom ini jika sumber Anda tidak memerlukan region penandatanganan.

      2. Pilih Proses penandatanganan untuk permintaan ini.

      3. Pilih Addressing style. Ini menentukan apakah nama bucket diberikan dalam gaya jalur (mis., https://s3.region.example.com/bucket-name/key-name) atau gaya yang dihosting virtual (misalnya, https://bucket-name.s3.region.example.com/key-name). Baca [Hosting virtual bucket] di dokumentasi Amazon untuk mengetahui informasi selengkapnya.

      4. Pilih Protokol jaringan.

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

    5. Klik Langkah berikutnya.

    Penyimpanan Blob Microsoft Azure

    1. Di bagian Source type, pilih Azure Blob Storage atau Data Lake Storage Gen2.

    2. Klik Langkah berikutnya.

    3. Tentukan nilai berikut:

      1. Nama akun Storage — 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 container.

      3. Shared access signature (SAS) — token Microsoft Azure Storage SAS yang dibuat dari kebijakan akses yang disimpan. 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 agar Anda dapat menyelesaikan transfer.
    4. Secara opsional, pilih untuk memfilter objek berdasarkan awalan atau berdasarkan 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 dimulai dengan my-test-bucket/path/file.
    5. Klik Langkah berikutnya.

    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 Create agent pool dan ikuti petunjuk untuk membuat kumpulan agen baru.

    4. Menentukan jalur direktori sistem file yang sepenuhnya memenuhi syarat.

    5. Klik Langkah berikutnya.

    HDFS

    Lihat Mentransfer 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 berdasarkan awalan atau berdasarkan 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 dimulai dengan my-test-bucket/path/file.
    4. Klik Langkah berikutnya.

  4. Pilih tujuan:

    Penyimpanan Cloud

    1. Pada kolom Bucket or folder, masukkan bucket tujuan dan nama folder (opsional), 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 Langkah berikutnya.

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

      1. Di kolom Description, 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 guna menentukan nilai untuk semua metadata yang didukung. Baca Preservasi metadata untuk mengetahui detailnya.

      3. Di bagian Kapan harus 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 file tersebut identik.

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

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

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

        • Hapus file dari tujuan jika file tersebut tidak ada di sumbernya: Jika file di bucket Cloud Storage tujuan juga tidak ada di sumbernya, 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 Langkah berikutnya.

    Sistem file

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

    2. Tentukan jalur direktori tujuan yang sepenuhnya memenuhi syarat.

    3. Klik Langkah berikutnya.

  5. Pilih opsi penjadwalan Anda:

    1. Dari menu drop-down Run once, 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 mengosongkan Tanggal akhir untuk menjalankan transfer secara berkelanjutan.

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

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

        Anda dapat memasukkan Tanggal akhir opsional, atau mengosongkan Tanggal akhir untuk menjalankan transfer secara berkelanjutan.

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

      • Dimulai sekarang: Memulai transfer setelah Anda mengklik Buat.

      • Dimulai: 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.
    • 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 merupakan 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.
    • Sistem file POSIX: posix:///PATH. Jalur ini harus merupakan 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. Baca 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 komputer Anda yang menyertakan 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 pengiriman perintah. Untuk menjalankan tugas, perbarui tugas untuk menambahkan jadwal, atau gunakan jobs run untuk memulainya secara manual.

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

  • Informasi 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 ditransfer. Situasi tersebut 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 akan 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 perlu dipertahankan (--preserve-metadata); dan tetapkan kelas penyimpanan secara opsional pada objek yang ditransfer (--custom-storage-class).

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

  • Cloud Logging: Mengaktifkan 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 cantumkan protokol (http:// atau https://).
  • --source-signing-region menentukan region untuk permintaan penandatanganan. Hapus flag ini jika penyedia penyimpanan Anda tidak memerlukan region penandatanganan.
  • --source-auth-method menentukan metode autentikasi yang akan digunakan. Nilai yang valid adalah AWS_SIGNATURE_V2 atau AWS_SIGNATURE_V4. Lihat dokumentasi SigV4 dan SigV2 Amazon untuk mengetahui informasi selengkapnya.
  • --source-request-model menentukan gaya pengalamatan yang akan digunakan. Nilai yang valid adalah PATH_STYLE atau VIRTUAL_HOSTED_STYLE. Gaya jalur menggunakan format https://s3.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 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 informasi selengkapnya.

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

Contoh

Amazon S3 ke Cloud Storage

Jalankan perintah berikut untuk membuat tugas transfer harian guna memindahkan data yang dimodifikasi dalam 1 hari terakhir dari s3://my-s3-bucket ke bucket Cloud Storage bernama my-storage-bucket:

gcloud transfer jobs create \
  s3://my-s3-bucket gs://my-storage-bucket \
  --source-creds-file=/examplefolder/creds.txt \
  --include-modified-after-relative=1d \
  --schedule-repeats-every=1d

Penyimpanan yang kompatibel dengan S3 ke Cloud Storage

Untuk mentransfer dari sumber yang kompatibel dengan S3 ke bucket Cloud Storage:

gcloud transfer jobs create s3://my-s3-compat-bucket gs://my-storage-bucket \
  --source-agent-pool=my-source-agent-pool
  --source-endpoint=us-east-1.example.com/ \
  --source-auth-method=AWS_SIGNATURE_V2 \
  --source-request-model=PATH_STYLE \
  --source-network-protocol=HTTPS \
  --source-list-api=LIST_OBJECTS_V2

Sistem file ke Cloud Storage

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

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

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 antara dua sistem file, Anda harus menentukan kumpulan agen sumber, kumpulan agen tujuan, dan bucket Cloud Storage perantara yang dilalui data.

Baca artikel Membuat bucket Cloud Storage sebagai perantara untuk mengetahui detail tentang bucket intermediate.

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 Anda mengonfigurasi atau mengedit tugas transfer menggunakan Storage Transfer Service API, waktu harus dalam UTC. Untuk informasi selengkapnya tentang menentukan jadwal tugas transfer, lihat Menjadwalkan.

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

Transfer dari Amazon S3 ke Cloud Storage

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari Amazon S3 ke bucket Cloud Storage. Pastikan untuk meninjau Mengonfigurasi akses ke Amazon S3 dan Harga untuk memahami implikasi memindahkan data dari Amazon S3 ke Cloud Storage.

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

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
      },
      "scheduleEndDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "awsAccessKey": {
              "accessKeyId": "AWS_ACCESS_KEY_ID",
              "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}
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
              },
              "scheduleEndDate": {
                  "day": 1,
                  "month": 1,
                  "year": 2015
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "awsS3DataSource": {
                  "bucketName": "AWS_SOURCE_NAME"
              },
              "gcsDataSink": {
                  "bucketName": "GCS_SINK_NAME"
              },
              "objectConditions": {},
              "transferOptions": {}
          }
      }
  ]
}

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

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

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

Sebelum memulai, pelajari 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

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

Gunakan transferJobs.create dengan posixDataSource:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
 "name":"transferJobs/sample_transfer",
 "description": "My First Transfer",
 "status": "ENABLED",
 "projectId": "my_transfer_project_id",
 "schedule": {
     "scheduleStartDate": {
         "year": 2022,
         "month": 5,
         "day": 2
     },
     "startTimeOfDay": {
         "hours": 22,
         "minutes": 30,
         "seconds": 0,
         "nanos": 0
     }
     "scheduleEndDate": {
         "year": 2022,
         "month": 12,
         "day": 31
     },
     "repeatInterval": {
         "259200s"
     },
 },
 "transferSpec": {
     "posixDataSource": {
          "rootDirectory": "/bar/",
     },
     "sourceAgentPoolName": "my_example_pool",
     "gcsDataSink": {
          "bucketName": "destination_bucket"
          "path": "foo/bar/"
     },
  }
}

Kolom schedule bersifat opsional. Jika tidak disertakan, tugas transfer harus dimulai dengan permintaan transferJobs.run.

Untuk memeriksa status transfer Anda setelah membuat tugas, gunakan transferJobs.get:

GET https://storagetransfer.googleapis.com/v1/transferJobs/sample_transfer?project_id=my_transfer_project_id

Menentukan jalur sumber dan tujuan

Jalur sumber dan tujuan memungkinkan Anda menentukan direktori sumber dan tujuan saat mentransfer data ke bucket Cloud Storage. Misalnya, anggaplah 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 yang 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 informasi selengkapnya tentang menentukan jadwal tugas transfer, lihat Menjadwalkan.

Untuk 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 sampel 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 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

Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari Amazon S3 ke bucket Cloud Storage. Pastikan untuk meninjau Mengonfigurasi akses ke Amazon S3 dan Harga untuk memahami implikasi memindahkan data dari Amazon S3 ke Cloud Storage.

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

Go

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

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

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

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

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

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

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

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

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

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

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AwsS3DataSource{
					AwsS3DataSource: &storagetransferpb.AwsS3Data{
						BucketName: awsSourceBucket,
						AwsAccessKey: &storagetransferpb.AwsAccessKey{
							AccessKeyId:     awsAccessKeyID,
							SecretAccessKey: awsSecretKey,
						}},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			Schedule: &storagetransferpb.Schedule{
				ScheduleStartDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				ScheduleEndDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				StartTimeOfDay: &timeofday.TimeOfDay{
					Hours:   int32(startTime.Hour()),
					Minutes: int32(startTime.Minute()),
					Seconds: int32(startTime.Second()),
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", awsSourceBucket, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Mencari sampel lama? Lihat Panduan Migrasi Storage Transfer Service.


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

public class TransferFromAws {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Node.js


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

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

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

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

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

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

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

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

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

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

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

transferFromS3();

Python

Mencari sampel lama? Lihat Panduan Migrasi Storage Transfer Service.

from datetime import datetime

from google.cloud import storage_transfer

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

    client = storage_transfer.StorageTransferServiceClient()

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

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

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

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

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

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

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

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

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

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

Sebelum memulai, pelajari 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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

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

Go


import (
	"context"
	"fmt"
	"io"

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

func transferFromPosix(w io.Writer, projectID string, sourceAgentPoolName string, rootDirectory string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your project id
	// projectId := "myproject-id"

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

	// The root directory path on the source filesystem
	// rootDirectory := "/directory/to/transfer/source"

	// The ID of the GCS bucket to transfer data 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()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				SourceAgentPoolName: sourceAgentPoolName,
				DataSource: &storagetransferpb.TransferSpec_PosixDataSource{
					PosixDataSource: &storagetransferpb.PosixFilesystem{RootDirectory: rootDirectory},
				},
				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", rootDirectory, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

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

public class TransferFromPosix {

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

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

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

    // The root directory path on the source filesystem
    String rootDirectory = "/directory/to/transfer/source";

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

    transferFromPosix(projectId, sourceAgentPoolName, rootDirectory, gcsSinkBucket);
  }

  public static void transferFromPosix(
      String projectId, String sourceAgentPoolName, String rootDirectory, String gcsSinkBucket)
      throws IOException {
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setSourceAgentPoolName(sourceAgentPoolName)
                    .setPosixDataSource(
                        PosixFilesystem.newBuilder().setRootDirectory(rootDirectory).build())
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).build()))
            .setStatus(TransferJob.Status.ENABLED)
            .build();

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

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

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

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.
 */
// Your project id
// const projectId = 'my-project'

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

// The root directory path on the source filesystem
// const rootDirectory = '/directory/to/transfer/source'

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

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

/**
 * Creates a request to transfer from the local file system to the sink bucket
 */
async function transferDirectory() {
  const createRequest = {
    transferJob: {
      projectId,
      transferSpec: {
        sourceAgentPoolName,
        posixDataSource: {
          rootDirectory,
        },
        gcsDataSink: {bucketName: gcsSinkBucket},
      },
      status: 'ENABLED',
    },
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob(createRequest);

  const runRequest = {
    jobName: transferJob.name,
    projectId: projectId,
  };

  await client.runTransferJob(runRequest);

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

transferDirectory();

Python

from google.cloud import storage_transfer

def transfer_from_posix_to_gcs(
    project_id: str,
    description: str,
    source_agent_pool_name: str,
    root_directory: str,
    sink_bucket: str,
):
    """Create a transfer from a POSIX file system to a GCS bucket."""

    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'

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

    # The root directory path on the source filesystem
    # root_directory = '/directory/to/transfer/source'

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

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "source_agent_pool_name": source_agent_pool_name,
                    "posix_data_source": {
                        "root_directory": root_directory,
                    },
                    "gcs_data_sink": {"bucket_name": sink_bucket},
                },
            }
        }
    )

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