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.
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
- 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.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
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 izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
-
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.
-
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/iam.serviceAccountUsergcloud 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.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
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 izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
-
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.
-
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/iam.serviceAccountUsergcloud 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.
Berikan peran ke akun layanan default Compute Engine Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/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 AndaPROJECT_NUMBERGoogle Cloud nomor project AndaSERVICE_ACCOUNT_ROLE: setiap peran individual
Menyiapkan lingkungan Anda untuk Template Flex
Instal SDK dan persyaratan apa pun untuk lingkungan pengembangan Anda.
Java
Download dan instal Java Development Kit (JDK) versi 17. Pastikan variabel lingkungan
JAVA_HOMEtelah ditetapkan dan mengarah ke penginstalan JDK Anda.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
Buat clone repositori
java-docs-samples.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Buka contoh kode untuk tutorial ini.
cd java-docs-samples/dataflow/flex-templates/getting_started
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
Buat clone repositori
python-docs-samples.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Buka contoh kode untuk tutorial ini.
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
Buat clone repositori
golang-samples.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Buka contoh kode untuk tutorial ini.
cd golang-samples/dataflow/flex-templates/wordcount
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.
Gunakan perintah
gcloud artifacts repositories createuntuk 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.
Gunakan perintah
gcloud auth configure-dockeruntuk 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
Gunakan perintah
gcloud dataflow flex-template rununtuk 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
Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.
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
Gunakan perintah
gcloud dataflow flex-template rununtuk 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
Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.
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
Gunakan perintah
gcloud dataflow flex-template rununtuk 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
Untuk melihat status tugas Dataflow di konsolGoogle Cloud , buka halaman Tugas Dataflow.
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
-
Hapus bucket Cloud Storage dan semua objek di bucket tersebut.
gcloud storage rm gs://BUCKET_NAME --recursive
-
Hapus repositori Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
Cabut peran yang Anda berikan ke akun layanan default
Compute Engine. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/artifactregistry.writer
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.
gcloud auth application-default revoke
-
Opsional: Cabut kredensial dari gcloud CLI.
gcloud auth revoke
Langkah berikutnya
- Gunakan Template Flex untuk mengemas pipeline Dataflow.
- Pelajari manfaat template bawaan dan template yang disediakan Google untuk kasus penggunaan umum.