GSP648

Ringkasan
Di lab ini, Anda akan menggunakan Cloud Functions dan Cloud Scheduler untuk mengidentifikasi dan membersihkan resource cloud yang tidak digunakan secara efisien. Dalam kasus ini, Anda akan menjadwalkan Cloud Function untuk mengidentifikasi dan membersihkan persistent disk yang tidak terpasang dan terlantar.
Yang akan Anda lakukan
- Membuat dua persistent disk.
- Membuat VM yang menggunakan salah satu disk.
- Melepaskan disk dari VM.
- Meninjau kode Cloud Function.
- Men-deploy Cloud Function.
- Menguji Cloud Function menggunakan tugas Cloud Scheduler.
Arsitektur
Diagram berikut menjelaskan arsitektur yang digunakan di bagian pertama lab ini, yaitu saat Anda menjadwalkan Cloud Function untuk mengidentifikasi dan membersihkan persistent disk yang tidak digunakan dan terlantar.

Penyiapan dan persyaratan
Di bagian ini, Anda akan mengonfigurasi infrastruktur dan identitas yang diperlukan untuk menyelesaikan lab.
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
- Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Cara memulai lab dan login ke Google Cloud Console
-
Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran.
Di sebelah kiri ada panel Lab Details yang berisi hal-hal berikut:
- Tombol Open Google Cloud console
- Waktu tersisa
- Kredensial sementara yang harus Anda gunakan untuk lab ini
- Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
-
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
-
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
{{{user_0.username | "Username"}}}
Anda juga dapat menemukan Username di panel Lab Details.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab Details.
-
Klik Next.
Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda.
Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
-
Klik halaman berikutnya:
- Setujui persyaratan dan ketentuan.
- Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
- Jangan mendaftar uji coba gratis.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Catatan: Untuk mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search.
Mengaktifkan Cloud Shell
Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.
-
Klik Activate Cloud Shell
di bagian atas Konsol Google Cloud.
-
Klik jendela berikut:
- Lanjutkan melalui jendela informasi Cloud Shell.
- Beri otorisasi ke Cloud Shell untuk menggunakan kredensial Anda guna melakukan panggilan Google Cloud API.
Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:
Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}
gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.
- (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
- Klik Authorize.
Output:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
Untuk menetapkan akun aktif, jalankan:
$ gcloud config set account `ACCOUNT`
- (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project
Output:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.
Tugas 1. Mengaktifkan API dan meng-clone repositori
-
Di Cloud Shell, aktifkan Cloud Scheduler API:
gcloud services enable cloudscheduler.googleapis.com
-
Buat clone repositori
gsutil cp -r gs://spls/gsp648 . && cd gsp648
-
Tetapkan variabel lingkungan dan jadikan folder repositori sebagai $WORKDIR tempat Anda menjalankan semua perintah yang terkait dengan lab ini:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
WORKDIR=$(pwd)
-
Tetapkan region project untuk lab ini:
gcloud config set compute/region {{{project_0.default_region | "REGION"}}}
-
Buat variabel untuk region:
export REGION={{{project_0.default_region | Region}}}
-
Buat variabel untuk zona:
export ZONE={{{project_0.default_zone | Zone}}}
Pelajari lebih lanjut dari dokumentasi Region & Zona.
Catatan: Saat Anda menjalankan gcloud di mesin Anda sendiri, setelan konfigurasi akan disimpan di seluruh sesi. Namun, di Cloud Shell, Anda perlu menetapkan ini untuk setiap sesi atau koneksi ulang baru.
Tugas 2. Membuat persistent disk
-
Di Cloud Shell, buka direktori unattached-pd:
cd $WORKDIR/unattached-pd
-
Mengekspor nama disk sebagai variabel:
export ORPHANED_DISK=orphaned-disk
export UNUSED_DISK=unused-disk
-
Buat dua disk:
gcloud compute disks create $ORPHANED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=$ZONE
gcloud compute disks create $UNUSED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=$ZONE
Lab ini menggunakan region , tetapi Anda dapat memilih region lain dan merujuknya secara konsisten di seluruh bagian lab ini.
-
Pastikan kedua disk telah dibuat:
gcloud compute disks list
Output Anda akan terlihat seperti berikut:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS
orphaned-disk {{{project_0.default_zone | Zone}}} zone 500 pd-standard READY
unused-disk {{{project_0.default_zone | Zone}}} zone 500 pd-standard READY
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda telah berhasil membuat Persistent Disk, skor penilaian akan terlihat.
Membuat Persistent Disk
Tugas 3. Membuat VM dan memeriksa disk
-
Di Cloud Shell, buat instance:
gcloud compute instances create disk-instance \
--zone=$ZONE \
--machine-type=e2-medium \
--disk=name=$ORPHANED_DISK,device-name=$ORPHANED_DISK,mode=rw,boot=no
-
Periksa disk yang terpasang ke VM:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq
Outputnya mirip dengan berikut:
{
"creationTimestamp": "2019-06-12T12:21:25.546-07:00",
"id": "7617542552306904666",
"kind": "compute#disk",
"labelFingerprint": "42WmSpB8rSM=",
"lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00",
"name": "orphaned-disk",
"physicalBlockSizeBytes": "4096",
"selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/disks/orphaned-disk",
"sizeGb": "500",
"status": "READY",
"type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/diskTypes/pd-standard",
"users": [
"https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/instances/disk-instance"
],
"zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}"
}
Dalam contoh kode sebelumnya, hal berikut ini penting:
-
users mengidentifikasi VM tempat disk dipasang.
-
lastAttachTimestamp mengidentifikasi waktu disk terakhir kali dipasang ke VM.
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda telah berhasil membuat instance VM dengan Persistent Disk, skor penilaian akan terlihat.
Membuat instance VM dengan Persistent Disk
-
Melepaskan persistent disk terlantar dari VM:
gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=$ZONE
-
Memeriksa disk terlantar:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq
Outputnya mirip dengan berikut:
{
"creationTimestamp": "2019-06-12T12:21:25.546-07:00",
"id": "7617542552306904666",
"kind": "compute#disk",
"labelFingerprint": "42WmSpB8rSM=",
"lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00",
"lastDetachTimestamp": "2019-06-12T12:34:56.040-07:00",
"name": "orphaned-disk",
"physicalBlockSizeBytes": "4096",
"selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/disks/orphaned-disk",
"sizeGb": "500",
"status": "READY",
"type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/diskTypes/pd-standard",
"zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}"
}
Dalam contoh kode sebelumnya, hal berikut ini penting:
- Tidak ada
users yang tercantum di disk, yang menunjukkan bahwa disk saat ini sedang tidak digunakan.
- Kini ada entri
lastDetachTimestamp yang menunjukkan kapan disk terakhir kali dilepaskan dari VM, dan juga kapan disk terakhir digunakan.
- Kolom
lastAttachTimestamp masih ada.
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda telah berhasil melepaskan disk terlantar dari VM, skor penilaian akan terlihat.
Melepaskan persistent disk terlantar dari VM
Tugas 4. Meninjau kode Cloud Function
-
Di Cloud Shell, tampilkan output di bagian kode yang mengambil semua persistent disk dalam project:
cat $WORKDIR/unattached-pd/main.py | grep "(request)" -A 12
Outputnya adalah sebagai berikut:
def delete_unattached_pds(request):
# get list of disks and iterate through it:
disksRequest = compute.disks().aggregatedList(project=project)
while disksRequest is not None:
diskResponse = disksRequest.execute()
for name, disks_scoped_list in diskResponse['items'].items():
if disks_scoped_list.get('warning') is None:
# got disks
for disk in disks_scoped_list['disks']: # iterate through disks
diskName = disk['name']
diskZone = str((disk['zone'])).rsplit('/',1)[1]
print (diskName)
print (diskZone)
Fungsi ini menggunakan metode aggregatedList untuk mendapatkan semua persistent disk di project Google Cloud tempatnya berjalan dan melakukan iterasi di setiap disk.
-
Tampilkan bagian kode yang memeriksa kolom lastAttachTimestamp dan hapus disk jika tidak ada:
cat $WORKDIR/unattached-pd/main.py | grep "handle never" -A 11
Outputnya adalah sebagai berikut:
# handle never attached disk - delete it
# lastAttachedTimestamp is not present
try:
if disk["lastAttachTimestamp"] is None:
print ("none!")
except KeyError:
print ("disk " + diskName + " was never attached - deleting")
deleteRequest = compute.disks().delete(project=project,
zone=diskZone, disk=diskName)
deleteResponse = deleteRequest.execute()
waitForZoneOperation(deleteResponse, project, diskZone)
print ("disk " + diskName + " was deleted")
continue
Bagian ini menghapus disk jika lastAttachTimestamp tidak ada. Artinya, disk ini tidak pernah digunakan.
-
Tampilkan output bagian kode yang menghitung usia disk jika disk itu terlantar, buat snapshot-nya, dan hapus:
cat $WORKDIR/unattached-pd/main.py | grep "handle detached" -A 32
Outputnya adalah sebagai berikut:
# handle detached disk - snapshot and delete
# lastAttachTimestamp is present AND users is not present
try:
if disk['users'] is None and disk['lastDetachTimestamp'] is not None:
print ("users is none")
except KeyError:
print ("disk " + diskName + " has no users and has been detached")
detachTimestamp = dateutil.parser.parse(disk['lastDetachTimestamp'])
detachedFor = pytz.utc.localize(datetime.utcnow()) - detachTimestamp
print ("disk has been detached for " + str(detachedFor))
# update this for your preferred age
if detachedFor.days > -1:
# take a snapshot
snapShotName = diskName + str(int(time.time()))
print ("taking snapshot: " + snapShotName)
snapshotBody = {
"name": snapShotName
}
snapshotRequest = compute.disks().createSnapshot(project=project,
zone=diskZone, disk=diskName, body=snapshotBody)
snapshotResponse = snapshotRequest.execute()
waitForZoneOperation(snapshotResponse, project, diskZone)
print ("snapshot completed")
# delete the disk
print ("deleting disk " + diskName)
deleteRequest = compute.disks().delete(project=project, zone=diskZone, disk=diskName)
deleteResponse = deleteRequest.execute()
waitForZoneOperation(deleteResponse, project, diskZone)
print ("disk " + diskName + " was deleted")
continue
Bagian kode ini digunakan saat disk memiliki pengguna yang tercantum dan lastDetachTimestamp ada, yang berarti disk saat ini tidak digunakan, tetapi pernah digunakan suatu waktu. Dalam kasus ini, Cloud Function akan membuat snapshot disk untuk menyimpan data, lalu menghapus disk tersebut.
-
Di Cloud Shell, klik Open Editor untuk membuka Cloud Shell Editor guna mengedit file main.py.
Catatan:
Jika diminta, klik Open in New Window.
-
Buka gsp648/unattached-pd.
-
Buka main.py.
-
Edit baris 15 file dan ganti automating-cost-optimization dengan ID project Anda (seharusnya terlihat seperti):
project = '{{{ project_0.project_id | PROJECT ID}}}'
-
Simpan file dengan mengklik File > Save.
Tugas 5. Men-deploy Cloud Function
-
Nonaktifkan Cloud Functions API:
gcloud services disable cloudfunctions.googleapis.com
-
Aktifkan kembali Cloud Functions API:
gcloud services enable cloudfunctions.googleapis.com
-
Tambahkan izin artifactregistry.reader untuk akun layanan appspot Anda:
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT ID}}} \
--member="serviceAccount:{{{ project_0.project_id | PROJECT ID}}}@appspot.gserviceaccount.com" \
--role="roles/artifactregistry.reader"
-
Di Cloud Shell, deploy Cloud Function:
cd ~/gsp648/unattached-pd
gcloud functions deploy delete_unattached_pds --gen2 --trigger-http --runtime=python310 --region {{{project_0.default_region | Region}}}
Catatan:
Ketik y saat ditanya: Allow unauthenticated invocations of new function [delete_unattached_pds]? (y/N)?
Catatan:
Deployment fungsi cloud dapat memakan waktu 2-5 menit, bergantung pada region.
-
Tetapkan URL pemicu Cloud Function sebagai variabel lingkungan:
export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json --region {{{project_0.default_region | Region}}} | jq -r '.url')
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda berhasil men-deploy Cloud Function, Anda akan melihat skor penilaian.
Men-deploy Cloud Function
Tugas 6. Menjadwalkan dan menguji Cloud Function
- Di Cloud Shell, buat aplikasi App Engine untuk menggunakan Cloud Scheduler:
gcloud app create --region={{{project_0.startup_script.app_region | REGION}}}
-
Di Cloud Shell, buatlah tugas Cloud Scheduler untuk menjalankan Cloud Function pada pukul 02.00 setiap hari:
gcloud scheduler jobs create http unattached-pd-job \
--schedule="* 2 * * *" \
--uri=$FUNCTION_URL \
--location=$REGION
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda berhasil membuat tugas Cloud Scheduler untuk menjalankan Cloud Function, Anda akan melihat skor penilaian.
Membuat tugas Cloud Scheduler untuk menjalankan Cloud Function
-
Uji tugas dengan memicunya secara manual:
gcloud scheduler jobs run unattached-pd-job \
--location=$REGION
-
Pastikan bahwa snapshot disk terlantar telah dibuat:
gcloud compute snapshots list
Outputnya mirip dengan berikut:
NAME DISK_SIZE_GB SRC_DISK STATUS
orphaned-disk1560455894 500 {{{project_0.default_zone | Zone}}}/disks/orphaned-disk READY
-
Pastikan disk yang tidak digunakan dan disk terlantar telah dihapus:
gcloud compute disks list
Outputnya mirip dengan berikut:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS
disk-instance {{{project_0.default_zone | Zone}}} zone 10 pd-standard READY
Menguji tugas yang sudah selesai
Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika Anda telah berhasil menguji tugas dengan memicunya secara manual, skor penilaian akan terlihat.
Uji tugas dengan memicunya secara manual
Selamat!
Di lab ini, Anda telah menyelesaikan tugas berikut:
- Membuat dua persistent disk.
- Membuat VM yang menggunakan salah satu disk.
- Disk telah dilepas dari VM.
- Meninjau kode Cloud Function.
- Men-deploy Cloud Function.
- Menguji Cloud Function menggunakan tugas Cloud Scheduler.
Sertifikasi dan pelatihan Google Cloud
...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 14 November 2025
Lab Terakhir Diuji pada 14 November 2025
Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.