Membangun dan menjalankan contoh Template Flex

Tutorial ini berfokus pada Template Flex, yang menunjukkan cara membuat dan menjalankan pipeline data dalam container di Dataflow. Anda akan mempelajari cara mengemas pipeline untuk deployment yang efisien menggunakan contoh Template Flex.

Tujuan

  • Buat Template Flex Dataflow.
  • Gunakan template untuk menjalankan tugas Dataflow.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, dan Artifact Registry API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
  8. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login

    Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.

    Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

  9. Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
  10. Instal Google Cloud CLI.

  11. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  12. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  13. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  14. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  15. Aktifkan Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, dan Artifact Registry API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
  16. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login

    Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.

    Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

  17. Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
  18. Berikan peran ke akun layanan default Compute Engine Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda
    • PROJECT_NUMBER Google Cloud nomor project Anda
    • SERVICE_ACCOUNT_ROLE: setiap peran individual

Menyiapkan lingkungan Anda untuk Template Flex

Instal SDK dan persyaratan apa pun untuk lingkungan pengembangan Anda.

Java

  1. Download dan instal Java Development Kit (JDK) versi 17. Pastikan variabel lingkungan JAVA_HOME telah ditetapkan dan mengarah ke penginstalan JDK Anda.

  2. Download dan instal Apache Maven dengan mengikuti panduan penginstalan Maven untuk sistem operasi spesifik Anda.

Python

Instal Apache Beam SDK untuk Python.

Go

Gunakan Panduan download dan penginstalan Go untuk mendownload dan menginstal Go untuk sistem operasi spesifik Anda. Untuk mempelajari lingkungan runtime Go yang didukung oleh Apache Beam, lihat Dukungan runtime Apache Beam.

Download contoh kode.

Java

  1. Buat clone repositori java-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  2. Buka contoh kode untuk tutorial ini.

    cd java-docs-samples/dataflow/flex-templates/getting_started
  3. Bangun project Java menjadi file Uber JAR.

    mvn clean package

    File Uber JAR ini memiliki semua dependensi yang disematkan di dalamnya. Anda dapat menjalankan file ini sebagai aplikasi mandiri tanpa dependensi eksternal pada library lain.

Python

  1. Buat clone repositori python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
  2. Buka contoh kode untuk tutorial ini.

    cd python-docs-samples/dataflow/flex-templates/getting_started

Go

  1. Buat clone repositori golang-samples.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
  2. Buka contoh kode untuk tutorial ini.

    cd golang-samples/dataflow/flex-templates/wordcount
  3. Kompilasikan biner Go.

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .

Buat bucket Cloud Storage untuk pipeline data Anda

Gunakan perintah gcloud storage buckets create untuk membuat bucket Cloud Storage:

gcloud storage buckets create gs://BUCKET_NAME

Ganti BUCKET_NAME dengan nama untuk bucket Cloud Storage Anda. Nama bucket Cloud Storage harus unik secara global dan memenuhi persyaratan penamaan bucket.

Membuat repositori Artifact Registry

Buat repositori Artifact Registry tempat Anda akan mengirim image container Docker untuk template.

  1. Gunakan perintah gcloud artifacts repositories create untuk membuat repositori Artifact Registry baru.

    gcloud artifacts repositories create REPOSITORY \
     --repository-format=docker \
     --location=LOCATION

    Ganti kode berikut:

    • REPOSITORY: nama untuk repositori Anda. Nama repositori harus unik untuk setiap lokasi repositori dalam project.
    • LOCATION: lokasi regional atau multi-regional untuk repositori.
  2. Gunakan perintah gcloud auth configure-docker untuk mengonfigurasi Docker agar mengautentikasi permintaan untuk Artifact Registry. Perintah ini mengupdate konfigurasi Docker Anda, sehingga Anda dapat terhubung dengan Artifact Registry untuk mengirim image.

    gcloud auth configure-docker LOCATION-docker.pkg.dev

Template Fleksibel juga dapat menggunakan image yang disimpan di registry pribadi. Untuk mengetahui informasi selengkapnya, lihat Menggunakan image dari registry pribadi.

Membangun Template Flex Dataflow

Pada langkah ini, Anda akan menggunakan perintah gcloud dataflow flex-template build untuk membuat Template Fleksibel.

Template Fleksibel terdiri dari komponen berikut:

  • Image container Docker yang mengemas kode pipeline Anda, sehingga membentuk pipeline data yang di-container. Untuk Template Fleksibel Java dan Python, image Docker dibangun dan dikirim ke repositori Artifact Registry saat Anda menjalankan perintah gcloud dataflow flex-template build.
  • File spesifikasi template. File ini adalah dokumen JSON yang berisi lokasi image penampung serta metadata tentang template, seperti parameter pipeline.

Repositori contoh di GitHub berisi file metadata.json.

Untuk memperluas template dengan metadata tambahan, Anda dapat membuat file metadata.json Anda sendiri.

Java

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \
 --sdk-language "JAVA" \
 --flex-template-base-image JAVA17 \
 --metadata-file "metadata.json" \
 --jar "target/flex-template-getting-started-1.0.jar" \
 --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"

Ganti kode berikut:

  • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya
  • LOCATION: lokasi
  • PROJECT_ID: Google Cloud project ID
  • REPOSITORY: nama repositori Artifact Registry yang Anda buat sebelumnya

Python

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \
 --sdk-language "PYTHON" \
 --flex-template-base-image "PYTHON3" \
 --metadata-file "metadata.json" \
 --py-path "." \
 --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \
 --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"

Ganti kode berikut:

  • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya
  • LOCATION: lokasi
  • PROJECT_ID: Google Cloud project ID
  • REPOSITORY: nama repositori Artifact Registry yang Anda buat sebelumnya

Go

gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \
 --sdk-language "GO" \
 --flex-template-base-image "GO" \
 --metadata-file "metadata.json" \
 --go-binary-path="." \
 --env "FLEX_TEMPLATE_GO_BINARY=wordcount"

Ganti kode berikut:

  • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya.
  • LOCATION: lokasi
  • PROJECT_ID: Google Cloud project ID
  • REPOSITORY: nama repositori Artifact Registry yang Anda buat sebelumnya

Menjalankan Template Flex

Pada langkah ini, Anda akan menggunakan template untuk menjalankan tugas Dataflow.

Java

  1. Gunakan perintah gcloud dataflow flex-template run untuk menjalankan tugas Dataflow yang menggunakan Template Flex.

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --region "REGION"

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya
    • REGION: Region
  2. Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.

    Buka Tugas

Jika tugas berhasil dijalankan, tugas akan menulis output ke file bernama gs://BUCKET_NAME/output--00000-of-00001.txt di bucket Cloud Storage Anda.

Python

  1. Gunakan perintah gcloud dataflow flex-template run untuk menjalankan tugas Dataflow yang menggunakan Template Flex.

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --region "REGION"

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya
    • REGION: Region
  2. Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.

    Buka Tugas

Jika tugas berhasil dijalankan, tugas akan menulis output ke file bernama gs://BUCKET_NAME/output--00000-of-00001.txt di bucket Cloud Storage Anda.

Go

  1. Gunakan perintah gcloud dataflow flex-template run untuk menjalankan tugas Dataflow yang menggunakan Template Flex.

    gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \
     --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \
     --region "REGION"

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket Cloud Storage yang Anda buat sebelumnya
    • REGION: Region
  2. Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.

    Buka Tugas

Jika tugas berhasil dijalankan, tugas akan menulis output ke file bernama gs://BUCKET_NAME/samples/dataflow/templates/count.txt di bucket Cloud Storage Anda.

Jika tugas Anda gagal dijalankan dan Anda mendapatkan pesan error berikut, lihat Memecahkan masalah waktu tunggu Flex Template.

A Timeout in polling error message

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

  1. Hapus bucket Cloud Storage dan semua objek di bucket tersebut.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. Hapus repositori Artifact Registry.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. Cabut peran yang Anda berikan ke akun layanan default Compute Engine. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  4. Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.

    gcloud auth application-default revoke
  5. Opsional: Cabut kredensial dari gcloud CLI.

    gcloud auth revoke

Langkah berikutnya