1. Pengantar
Alur kerja adalah kasus penggunaan umum dalam analisis data - alur kerja melibatkan penyerapan, transformasi, dan analisis data untuk menemukan informasi yang bermakna di dalamnya. Di Google Cloud Platform, alat untuk mengorkestrasi alur kerja adalah Managed Apache Airflow, yang merupakan versi yang dihosting dari alat alur kerja open source populer Apache Airflow. Dalam lab ini, Anda akan menggunakan Managed Apache Airflow untuk membuat alur kerja sederhana yang membuat cluster Managed Apache Spark, menganalisisnya menggunakan Managed Apache Spark dan Apache Hadoop, lalu menghapus cluster Managed Apache Spark setelahnya.
Apa yang dimaksud dengan Managed Apache Airflow?
Managed Apache Airflow adalah layanan orkestrasi alur kerja yang terkelola sepenuhnya, yang memungkinkan Anda membuat, menjadwalkan, dan memantau pipeline yang tersebar di cloud dan pusat data lokal. Dikembangkan dari project open source Apache Airflow yang populer dan dioperasikan menggunakan bahasa pemrograman Python, Managed Apache Airflow bebas dari lock-in dan mudah digunakan.
Dengan menggunakan Managed Apache Airflow, bukan instance lokal Apache Airflow, pengguna dapat memanfaatkan yang terbaik dari Airflow tanpa overhead penginstalan atau pengelolaan.
Apa itu Apache Airflow?
Apache Airflow adalah alat open source yang digunakan untuk menulis, menjadwalkan, dan memantau alur kerja secara terprogram. Ada beberapa istilah penting yang perlu diingat terkait Airflow yang akan Anda lihat di seluruh lab:
- DAG - DAG (Directed Acyclic Graph) adalah kumpulan tugas terorganisir yang ingin Anda jadwalkan dan jalankan. DAG, yang juga disebut alur kerja, ditentukan dalam file Python standar
- Operator - operator menjelaskan satu tugas dalam alur kerja
Apa itu Managed Apache Spark?
Managed Apache Spark adalah layanan Apache Spark dan Apache Hadoop yang terkelola sepenuhnya di Google Cloud Platform. Managed Apache Spark mudah diintegrasikan dengan layanan GCP lainnya, sehingga Anda mendapatkan platform yang canggih dan lengkap untuk pemrosesan data, analisis, dan machine learning.
Yang akan Anda lakukan
Codelab ini menunjukkan cara membuat dan menjalankan alur kerja Apache Airflow di Managed Apache Airflow yang menyelesaikan tugas-tugas berikut:
- Membuat cluster Managed Apache Spark
- Menjalankan tugas jumlah kata Apache Hadoop di cluster, dan menampilkan hasilnya ke Cloud Storage
- Menghapus cluster
Yang akan Anda pelajari
- Cara membuat dan menjalankan alur kerja Apache Airflow di Managed Apache Airflow
- Cara menggunakan Managed Apache Airflow dan Managed Apache Spark untuk menjalankan analisis pada set data
- Cara mengakses lingkungan Managed Apache Airflow melalui Konsol Google Cloud Platform, Cloud SDK, dan antarmuka web Airflow
Yang Anda butuhkan
- Akun GCP
- Pengetahuan CLI dasar
- Pemahaman dasar tentang Python
2. Menyiapkan GCP
Membuat Project
Pilih atau buat Project Google Cloud Platform.
Catat Project ID Anda, yang akan Anda gunakan pada langkah-langkah berikutnya.
Jika Anda membuat project baru, project ID dapat ditemukan tepat di bawah Nama Project di halaman pembuatan |
|
Jika sudah membuat project, Anda dapat menemukan ID di halaman beranda konsol pada kartu Info Project |
|
Aktifkan API
Aktifkan Managed Apache Airflow, Managed Apache Spark, dan Cloud Storage API.Setelah diaktifkan, Anda dapat mengabaikan tombol yang bertuliskan "Go to Credentials" dan melanjutkan ke langkah berikutnya dalam tutorial. |
|
Membuat Lingkungan Managed Apache Airflow
Buat lingkungan Managed Apache Airflow dengan konfigurasi berikut:
Semua konfigurasi lainnya dapat tetap menggunakan setelan default. Klik "Buat" di bagian bawah. |
|
Membuat Bucket Cloud Storage
Di project Anda, buat bucket Cloud Storage dengan konfigurasi berikut:
Tekan "Buat" jika Anda sudah siap |
|
3. Menyiapkan Apache Airflow
Melihat Informasi Lingkungan Managed Apache Airflow
Di GCP Console, buka halaman Environments
Klik nama lingkungan untuk melihat detailnya.
Halaman Environment details memberikan informasi, seperti URL antarmuka web Airflow, ID cluster Google Kubernetes Engine, nama bucket Cloud Storage, dan jalur untuk folder /dags.
Di Airflow, DAG (Directed Acyclic Graph) adalah kumpulan tugas terorganisir yang ingin Anda jadwalkan dan jalankan. DAG, yang juga disebut alur kerja, ditentukan dalam file Python standar. Managed Apache Airflow hanya menjadwalkan DAG di folder /dags. Folder /dags berada di bucket Cloud Storage yang dibuat secara otomatis oleh Managed Apache Airflow saat Anda membuat lingkungan.
Menetapkan Variabel Lingkungan Apache Airflow
Variabel Apache Airflow adalah konsep khusus Airflow yang berbeda dengan variabel lingkungan. Pada langkah ini, Anda akan menyetel tiga variabel Airflow berikut: gcp_project, gcs_bucket, dan gce_zone.
Menggunakan gcloud untuk Menetapkan Variabel
Pertama, buka Cloud Shell Anda, yang telah menginstal Cloud SDK untuk Anda.
Tetapkan variabel lingkungan COMPOSER_INSTANCE ke nama lingkungan Managed Apache Airflow Anda
COMPOSER_INSTANCE=my-airflow-environment
Untuk menyetel variabel Airflow menggunakan alat command line gcloud, gunakan perintah gcloud composer environments run dengan sub-perintah variables. Perintah gcloud composer ini mengeksekusi sub-perintah Airflow CLI variables. Sub-perintah meneruskan argumen ke alat command line gcloud.
Anda akan menjalankan perintah ini tiga kali, mengganti variabel dengan variabel yang relevan dengan project Anda.
Tetapkan gcp_project menggunakan perintah berikut, dengan mengganti <your-project-id> dengan project ID yang Anda catat di Langkah 2.
gcloud composer environments run ${COMPOSER_INSTANCE} \
--location us-central1 variables -- --set gcp_project <your-project-id>
Output Anda akan tampak seperti berikut ini:
kubeconfig entry generated for us-central1-my-airflow-env-123abc-gke.
Executing within the following Kubernetes cluster namespace: composer-1-10-0-airflow-1-10-2-123abc
[2020-04-17 20:42:49,713] {settings.py:176} INFO - settings.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800, pid=449
[2020-04-17 20:42:50,123] {default_celery.py:90} WARNING - You have configured a result_backend of redis://airflow-redis-service.default.svc.cluste
r.local:6379/0, it is highly recommended to use an alternative result_backend (i.e. a database).
[2020-04-17 20:42:50,127] {__init__.py:51} INFO - Using executor CeleryExecutor
[2020-04-17 20:42:50,433] {app.py:52} WARNING - Using default Composer Environment Variables. Overrides have not been applied.
[2020-04-17 20:42:50,440] {configuration.py:522} INFO - Reading the config from /etc/airflow/airflow.cfg
[2020-04-17 20:42:50,452] {configuration.py:522} INFO - Reading the config from /etc/airflow/airflow.cfg
Tetapkan gcs_bucket menggunakan perintah berikut, ganti <your-bucket-name> dengan ID bucket yang Anda catat di Langkah 2. Jika Anda mengikuti rekomendasi kami, nama bucket Anda sama dengan project ID Anda. Output Anda akan mirip dengan perintah sebelumnya.
gcloud composer environments run ${COMPOSER_INSTANCE} \
--location us-central1 variables -- --set gcs_bucket gs://<your-bucket-name>
Tetapkan gce_zone menggunakan perintah berikut. Output Anda akan mirip dengan perintah sebelumnya.
gcloud composer environments run ${COMPOSER_INSTANCE} \
--location us-central1 variables -- --set gce_zone us-central1-a
(Opsional) Menggunakan gcloud untuk melihat variabel
Untuk melihat nilai suatu variabel, jalankan sub-perintah Airflow CLI variables dengan argumen get atau gunakan UI Airflow.
Contoh:
gcloud composer environments run ${COMPOSER_INSTANCE} \
--location us-central1 variables -- --get gcs_bucket
Anda dapat melakukannya dengan salah satu dari tiga variabel yang baru saja Anda tetapkan: gcp_project, gcs_bucket, dan gce_zone.
4. Contoh Alur Kerja
Mari kita lihat kode untuk DAG yang akan kita gunakan di langkah 5. Jangan khawatir tentang mendownload file dulu, cukup ikuti langkah-langkah di sini.
Ada banyak hal yang perlu dijelaskan di sini, jadi mari kita uraikan sedikit.
from airflow import models
from airflow.contrib.operators import dataproc_operator
from airflow.utils import trigger_rule
Kita mulai dengan beberapa impor Airflow:
airflow.models- Memungkinkan kita mengakses dan membuat data di database Airflow.airflow.contrib.operators- Tempat tinggal operator dari komunitas. Dalam hal ini, kita memerlukandataproc_operatoruntuk mengakses Managed Apache Spark API.airflow.utils.trigger_rule- Untuk menambahkan aturan pemicu ke operator kita. Aturan pemicu memungkinkan kontrol terperinci atas apakah operator harus dieksekusi dalam kaitannya dengan status induknya.
output_file = os.path.join(
models.Variable.get('gcs_bucket'), 'wordcount',
datetime.datetime.now().strftime('%Y%m%d-%H%M%S')) + os.sep
Ini menentukan lokasi file output kita. Baris yang penting di sini adalah models.Variable.get('gcs_bucket') yang akan mengambil nilai variabel gcs_bucket dari database Airflow.
WORDCOUNT_JAR = (
'file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
)
input_file = 'gs://pub/shakespeare/rose.txt'
wordcount_args = ['wordcount', input_file, output_file]
WORDCOUNT_JAR- Lokasi file .jar yang akan kita jalankan di cluster Managed Apache Spark. Aplikasi ini sudah dihosting di GCP untuk Anda.input_file- Lokasi file yang berisi data yang akan dikomputasi oleh tugas Hadoop kita. Kita akan mengupload data ke lokasi tersebut bersama-sama pada Langkah 5.wordcount_args- Argumen yang akan kita teruskan ke file jar.
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
Hal ini akan memberi kita objek datetime yang setara yang merepresentasikan tengah malam pada hari sebelumnya. Misalnya, jika dijalankan pada pukul 11.00 pada 4 Maret, objek datetime akan merepresentasikan pukul 00.00 pada 3 Maret. Hal ini berkaitan dengan cara Airflow menangani penjadwalan. Info selengkapnya tentang hal tersebut dapat ditemukan di sini.
default_dag_args = {
'start_date': yesterday,
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
'project_id': models.Variable.get('gcp_project')
}
Variabel default_dag_args dalam bentuk kamus harus diberikan setiap kali DAG baru dibuat:
'email_on_failure'- Menunjukkan apakah pemberitahuan email harus dikirim saat tugas gagal'email_on_retry'- Menunjukkan apakah notifikasi email harus dikirim saat tugas dicoba lagi'retries'- Menunjukkan berapa kali Airflow harus mencoba ulang jika terjadi kegagalan DAG'retry_delay'- Menunjukkan berapa lama Airflow harus menunggu sebelum mencoba ulang'project_id'- Memberi tahu DAG project ID GCP yang akan dikaitkan dengannya, yang akan diperlukan nanti dengan Managed Apache Spark Operator
with models.DAG(
'composer_hadoop_tutorial',
schedule_interval=datetime.timedelta(days=1),
default_args=default_dag_args) as dag:
Menggunakan with models.DAG memberi tahu skrip untuk menyertakan semua yang ada di bawahnya dalam DAG yang sama. Kita juga melihat tiga argumen yang diteruskan:
- Yang pertama, string, adalah nama yang akan diberikan ke DAG yang kita buat. Dalam hal ini, kita menggunakan
composer_hadoop_tutorial. schedule_interval- Objekdatetime.timedelta, yang di sini telah kita tetapkan menjadi satu hari. Artinya, DAG ini akan mencoba dieksekusi sekali sehari setelah'start_date'yang ditetapkan sebelumnya di'default_dag_args'default_args- Kamus yang kita buat sebelumnya yang berisi argumen default untuk DAG
Membuat Cluster Managed Apache Spark
Selanjutnya, kita akan membuat dataproc_operator.DataprocClusterCreateOperator yang membuat Cluster Managed Apache Spark.
create_dataproc_cluster = dataproc_operator.DataprocClusterCreateOperator(
task_id='create_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
num_workers=2,
zone=models.Variable.get('gce_zone'),
master_machine_type='n1-standard-1',
worker_machine_type='n1-standard-1')
Dalam operator ini, kita melihat beberapa argumen, yang semuanya kecuali yang pertama khusus untuk operator ini:
task_id- Sama seperti di BashOperator, ini adalah nama yang kita tetapkan ke operator, yang dapat dilihat dari UI Airflowcluster_name- Nama yang kita tetapkan untuk cluster Managed Apache Spark. Di sini, kita telah menamainyacomposer-hadoop-tutorial-cluster-{{ ds_nodash }}(lihat kotak info untuk informasi tambahan opsional)num_workers- Jumlah pekerja yang dialokasikan ke cluster Managed Apache Sparkzone- Wilayah geografis tempat kita ingin cluster berada, seperti yang disimpan dalam database Airflow. Tindakan ini akan membaca variabel'gce_zone'yang kita tetapkan di Langkah 3master_machine_type- Jenis mesin yang ingin kita alokasikan ke master Managed Apache Sparkworker_machine_type- Jenis mesin yang ingin kita alokasikan ke pekerja Managed Apache Spark
Mengirimkan Tugas Apache Hadoop
dataproc_operator.DataProcHadoopOperator memungkinkan kita mengirimkan tugas ke cluster Managed Apache Spark.
run_dataproc_hadoop = dataproc_operator.DataProcHadoopOperator(
task_id='run_dataproc_hadoop',
main_jar=WORDCOUNT_JAR,
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
arguments=wordcount_args)
Kami menyediakan beberapa parameter:
task_id- Nama yang kita tetapkan ke bagian DAG inimain_jar- Lokasi file .jar yang ingin kita jalankan terhadap clustercluster_name- Nama cluster untuk menjalankan tugas, yang akan Anda perhatikan identik dengan yang kita temukan di operator sebelumnyaarguments- Argumen yang diteruskan ke file jar, seperti yang akan Anda lakukan jika menjalankan file .jar dari command line
Menghapus Cluster
Operator terakhir yang akan kita buat adalah dataproc_operator.DataprocClusterDeleteOperator.
delete_dataproc_cluster = dataproc_operator.DataprocClusterDeleteOperator(
task_id='delete_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
trigger_rule=trigger_rule.TriggerRule.ALL_DONE)
Seperti namanya, operator ini akan menghapus cluster Managed Apache Spark tertentu. Kita melihat tiga argumen di sini:
task_id- Sama seperti di BashOperator, ini adalah nama yang kita tetapkan ke operator, yang dapat dilihat dari UI Airflowcluster_name- Nama yang kita tetapkan untuk cluster Managed Apache Spark. Di sini, kita telah menamainyacomposer-hadoop-tutorial-cluster-{{ ds_nodash }}(lihat kotak info setelah "Buat Cluster Managed Apache Spark" untuk informasi tambahan opsional)trigger_rule- Kita telah menyebutkan Aturan Pemicu secara singkat selama impor di awal langkah ini, tetapi di sini kita memiliki satu yang sedang beroperasi. Secara default, operator Airflow tidak dijalankan kecuali semua operator upstream-nya telah berhasil diselesaikan. Aturan pemicuALL_DONEhanya mengharuskan semua operator upstream telah selesai, terlepas dari apakah berhasil atau tidak. Di sini, ini berarti meskipun tugas Hadoop gagal, kita tetap ingin menghentikan cluster.
create_dataproc_cluster >> run_dataproc_hadoop >> delete_dataproc_cluster
Terakhir, kita ingin operator ini dieksekusi dalam urutan tertentu, dan kita dapat menunjukkannya dengan menggunakan operator bitshift Python. Dalam hal ini, create_dataproc_cluster akan selalu dieksekusi terlebih dahulu, diikuti dengan run_dataproc_hadoop dan terakhir delete_dataproc_cluster.
Jika digabungkan, kodenya akan terlihat seperti ini:
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# [START composer_hadoop_tutorial]
"""Example Airflow DAG that creates a Managed Apache Spark cluster, runs the Hadoop
wordcount example, and deletes the cluster.
This DAG relies on three Airflow variables
https://airflow.apache.org/concepts.html#variables
* gcp_project - Google Cloud Project to use for the Managed Apache Spark cluster.
* gce_zone - Google Compute Engine zone where Managed Apache Spark cluster should be
created.
* gcs_bucket - Google Cloud Storage bucket to use for result of Hadoop job.
See https://cloud.google.com/storage/docs/creating-buckets for creating a
bucket.
"""
import datetime
import os
from airflow import models
from airflow.contrib.operators import dataproc_operator
from airflow.utils import trigger_rule
# Output file for Managed Apache Spark job.
output_file = os.path.join(
models.Variable.get('gcs_bucket'), 'wordcount',
datetime.datetime.now().strftime('%Y%m%d-%H%M%S')) + os.sep
# Path to Hadoop wordcount example available on every Managed Apache Spark cluster.
WORDCOUNT_JAR = (
'file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
)
# Arguments to pass to Managed Apache Spark job.
input_file = 'gs://pub/shakespeare/rose.txt'
wordcount_args = ['wordcount', input_file, output_file]
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
default_dag_args = {
# Setting start date as yesterday starts the DAG immediately when it is
# detected in the Cloud Storage bucket.
'start_date': yesterday,
# To email on failure or retry set 'email' arg to your email and enable
# emailing here.
'email_on_failure': False,
'email_on_retry': False,
# If a task fails, retry it once after waiting at least 5 minutes
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
'project_id': models.Variable.get('gcp_project')
}
# [START composer_hadoop_schedule]
with models.DAG(
'composer_hadoop_tutorial',
# Continue to run DAG once per day
schedule_interval=datetime.timedelta(days=1),
default_args=default_dag_args) as dag:
# [END composer_hadoop_schedule]
# Create a Managed Apache Spark cluster.
create_dataproc_cluster = dataproc_operator.DataprocClusterCreateOperator(
task_id='create_dataproc_cluster',
# Give the cluster a unique name by appending the date scheduled.
# See https://airflow.apache.org/code.html#default-variables
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
num_workers=2,
zone=models.Variable.get('gce_zone'),
master_machine_type='n1-standard-1',
worker_machine_type='n1-standard-1')
# Run the Hadoop wordcount example installed on the Managed Apache Spark cluster
# master node.
run_dataproc_hadoop = dataproc_operator.DataProcHadoopOperator(
task_id='run_dataproc_hadoop',
main_jar=WORDCOUNT_JAR,
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
arguments=wordcount_args)
# Delete Managed Apache Spark cluster.
delete_dataproc_cluster = dataproc_operator.DataprocClusterDeleteOperator(
task_id='delete_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
# Setting trigger_rule to ALL_DONE causes the cluster to be deleted
# even if the Managed Apache Spark job fails.
trigger_rule=trigger_rule.TriggerRule.ALL_DONE)
# [START composer_hadoop_steps]
# Define DAG dependencies.
create_dataproc_cluster >> run_dataproc_hadoop >> delete_dataproc_cluster
# [END composer_hadoop_steps]
# [END composer_hadoop]
5. Mengupload File Airflow ke Cloud Storage
Menyalin DAG ke Folder /dags Anda
- Pertama, buka Cloud Shell Anda, yang telah menginstal Cloud SDK untuk Anda.
- Clone repo contoh python dan ubah ke direktori composer/workflows
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git && cd python-docs-samples/composer/workflows
- Jalankan perintah berikut untuk menetapkan nama folder DAG Anda ke variabel lingkungan
DAGS_FOLDER=$(gcloud composer environments describe ${COMPOSER_INSTANCE} \
--location us-central1 --format="value(config.dagGcsPrefix)")
- Jalankan perintah
gsutilberikut untuk menyalin kode tutorial ke tempat folder /dags Anda dibuat
gsutil cp hadoop_tutorial.py $DAGS_FOLDER
Output Anda akan tampak seperti berikut ini:
Copying file://hadoop_tutorial.py [Content-Type=text/x-python]... / [1 files][ 4.1 KiB/ 4.1 KiB] Operation completed over 1 objects/4.1 KiB.
6. Menggunakan UI Airflow
Untuk mengakses antarmuka web Airflow menggunakan konsol GCP:
|
|
Untuk mengetahui informasi tentang UI Airflow, lihat Mengakses antarmuka web.
Lihat Variabel
Variabel yang Anda tetapkan sebelumnya akan tetap ada di lingkungan Anda. Anda dapat melihat variabel dengan memilih Admin > Variables dari panel menu UI Airflow.

Menjelajahi Operasi DAG
Saat Anda mengupload file DAG ke folder dags di Cloud Storage, Cloud Composer akan menguraikan file tersebut. Jika tidak ditemukan error, nama alur kerja akan muncul di daftar DAG, dan alur kerja dimasukkan dalam antrean untuk segera dijalankan. Untuk melihat DAG, klik DAG di bagian atas halaman.

Klik composer_hadoop_tutorial untuk membuka halaman detail DAG. Halaman ini menyertakan representasi grafis dari tugas dan dependensi alur kerja.

Sekarang, di toolbar, klik Tampilan Grafik, lalu arahkan mouse ke gambar setiap tugas untuk melihat statusnya. Perhatikan bahwa batas di sekitar setiap tugas juga menunjukkan statusnya (hijau = running; merah = failed, etc.).

Untuk menjalankan alur kerja lagi dari Graph View:
- Dalam Tampilan Grafik UI Airflow, klik gambar
create_dataproc_cluster. - Klik Clear untuk mereset ketiga tugas, lalu klik OK untuk mengonfirmasi.

Anda juga dapat memeriksa status dan hasil alur kerja composer-hadoop-tutorial dengan membuka halaman GCP Console berikut:
- Managed Apache Spark Clusters untuk memantau pembuatan dan penghapusan cluster. Perhatikan bahwa cluster yang dibuat oleh alur kerja bersifat efemeral: cluster hanya ada selama durasi alur kerja dan dihapus sebagai bagian dari tugas alur kerja terakhir.
- Managed Apache Spark Jobs untuk melihat atau memantau tugas wordcount Apache Hadoop. Klik ID Tugas untuk melihat output log tugas.
- Cloud Storage Browser untuk melihat hasil penghitungan kata di folder
wordcountdalam bucket Cloud Storage yang Anda buat untuk codelab ini.
7. Pembersihan
Agar tidak menimbulkan biaya pada akun GCP Anda untuk resource yang digunakan dalam codelab ini:
- (Opsional) Untuk menyimpan data Anda, download data dari bucket Cloud Storage untuk lingkungan Managed Apache Airflow dan bucket penyimpanan yang Anda buat untuk codelab ini.
- Hapus bucket Cloud Storage yang Anda buat untuk codelab ini.
- Hapus bucket Cloud Storage untuk lingkungan.
- Hapus lingkungan Managed Apache Airflow. Perhatikan bahwa menghapus lingkungan tidak akan menghapus bucket penyimpanan untuk lingkungan tersebut.
Anda juga dapat menghapus project secara opsional:
- Di Konsol GCP, buka halaman Projects.
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Hapus.
- Di kotak, ketik project ID, lalu klik Matikan untuk menghapus project.







