Pengembangan InnerLoop menggunakan Cloud Workstations dengan Python

1. Ringkasan

Lab ini mendemonstrasikan fitur dan kemampuan yang didesain untuk menyederhanakan alur kerja pengembangan bagi software engineer yang bertugas mengembangkan aplikasi Python di lingkungan dalam container. Pengembangan container standar mengharuskan pengguna memahami detail container dan proses build container. Selain itu, developer biasanya harus menghentikan alurnya, keluar dari IDE mereka untuk menguji dan men-debug aplikasi di lingkungan jarak jauh. Dengan alat dan teknologi yang disebutkan dalam tutorial ini, developer dapat bekerja secara efektif dengan aplikasi dalam container tanpa perlu meninggalkan IDE mereka.

Yang akan Anda pelajari

Di lab ini, Anda akan mempelajari metode pengembangan dengan container di GCP, termasuk:

  • Membuat aplikasi starter Python baru
  • Mengikuti proses pengembangan
  • Mengembangkan layanan istirahat CRUD sederhana
  • Men-deploy ke GKE
  • Men-debug status error
  • Menggunakan titik henti sementara / log
  • Melakukan deployment perubahan ke GKE

58a4cdd3ed7a123a.pngS

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai PROJECT_ID). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloudshell Editor

Lab ini dirancang dan diuji agar dapat digunakan dengan Google Cloud Shell Editor. Untuk mengakses editor,

  1. akses project Google Anda di https://console.cloud.google.com.
  2. Di sudut kanan atas, klik ikon Cloud Shell Editor

8560cc8d45e8c112.pngS

  1. Panel baru akan terbuka di bagian bawah jendela
  2. Klik tombol Open Editor

9e504cb98a6a8005.pngS

  1. Editor akan terbuka dengan penjelajah di sebelah kanan dan editor di area tengah
  2. Panel terminal juga harus tersedia di bagian bawah layar
  3. Jika terminal TIDAK terbuka, gunakan kombinasi tombol `ctrl+` untuk membuka jendela terminal baru

Penyiapan Lingkungan

Di Cloud Shell, tetapkan project ID dan nomor project untuk project Anda. Simpan sebagai variabel PROJECT_ID dan PROJECT_ID.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
    --format='value(projectNumber)')

Menyediakan infrastruktur yang digunakan dalam lab ini

Di lab ini, Anda akan men-deploy kode ke GKE dan mengakses data yang tersimpan di database Spanner. Anda juga akan menggunakan workstation Cloud sebagai IDE. Skrip penyiapan di bawah menyiapkan infrastruktur ini untuk Anda.

  1. Download skrip penyiapan dan setel agar dapat dijalankan.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. Buka file setup_with_cw.sh dan edit nilai sandi yang saat ini disetel ke CHANGEME
  2. Jalankan skrip penyiapan untuk menyiapkan cluster GKE dan database Spanner yang akan Anda gunakan di lab ini
./setup_with_cw.sh &

Cluster Cloud Workstations

  1. Buka Cloud Workstations di Konsol Cloud. Tunggu hingga cluster berada dalam status READY.

305e1a3d63ac7ff6.pngS

Membuat Konfigurasi Workstations

  1. Jika sesi Cloud Shell Anda terputus, klik "Hubungkan kembali" lalu jalankan perintah "gcloud cli" untuk menetapkan project ID. Ganti contoh project id di bawah dengan project ID qwiklabs Anda sebelum menjalankan perintah.
gcloud config set project qwiklabs-gcp-project-id
  1. Download dan jalankan skrip di bawah di terminal untuk membuat konfigurasi Cloud Workstations.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. Verifikasi hasilnya di bagian Konfigurasi. Perlu waktu 2 menit untuk bertransisi ke status SIAP.

2e23c2e9983d1ccf.pngS

  1. Buka Cloud Workstations di Konsol dan buat instance baru.

a53adeeac81a78c8.png

  1. Ubah nama menjadi my-workstation dan pilih konfigurasi yang ada: codeoss-python.

f052cd47701ec774.png

  1. Verifikasi hasilnya di bagian Workstations.

Luncurkan Workstation

  1. Memulai dan meluncurkan workstation. Perlu waktu beberapa menit untuk memulai Workstation.

682f8a307032cba3.pngS

  1. Izinkan cookie pihak ketiga dengan mengklik ikon di kolom URL. 1b8923e2943f9bc4.pngS

fcf9405b6957b7d7.png

  1. Klik "Situs tidak berfungsi?".

36a84c0e2e3b85b.pngS

  1. Klik "Izinkan cookie".

2259694328628fba.png

  1. Setelah workstation diluncurkan, Anda akan melihat Code OSS IDE muncul. Klik "Tandai Selesai" di halaman Memulai di salah satu workstation IDE

94874fba9b74cc22.pngS

3. Membuat aplikasi awal Python baru

Di bagian ini, Anda akan membuat aplikasi Python baru.

  1. Buka Terminal baru.

c31d48f2e4938c38.png

  1. Buat direktori baru dan buka sebagai ruang kerja
mkdir music-service && cd music-service

code-oss-cloud-workstations -r --folder-uri="$PWD"

Klik tombol Izinkan jika Anda melihat pesan ini, sehingga Anda dapat menyalin dan menempel ke komputer.

58149777e5cc350a.png

  1. Buat file bernama requirements.txt dan salin konten berikut ke dalamnya

789e8389170bd900.png

Flask
gunicorn
google-cloud-spanner
ptvsd==4.3.2
  1. Buat file bernama app.py dan tempelkan kode berikut ke dalamnya
import os
from flask import Flask, request, jsonify
from google.cloud import spanner

app = Flask(__name__)

@app.route("/")
def hello_world():
    message="Hello, World!"
    return message

if __name__ == '__main__':
    server_port = os.environ.get('PORT', '8080')
    app.run(debug=False, port=server_port, host='0.0.0.0')

  1. Buat file bernama Dockerfile dan tempelkan kode berikut ke dalamnya
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]

Catatan: FLASK_DEBUG=1 memungkinkan Anda memuat ulang perubahan kode secara otomatis pada aplikasi flask Python. Dockerfile ini memungkinkan Anda meneruskan nilai ini sebagai argumen build.

Membuat Manifes

Di terminal Anda, jalankan perintah berikut untuk menghasilkan skaffold.yaml dan deployment.yaml default

  1. Lakukan inisialisasi Skaffold dengan perintah berikut
skaffold init --generate-manifests

Saat diminta, gunakan panah untuk menggerakkan kursor dan spasi untuk memilih opsi.

Pilih:

  • 8080 untuk port
  • y untuk menyimpan konfigurasi

Mengupdate Konfigurasi Skaffold

  • Ubah nama aplikasi default
  • Buka skaffold.yaml
  • Pilih nama gambar yang saat ini ditetapkan sebagai dockerfile-image
  • Klik kanan dan pilih Change All Occurrences
  • Ketik nama baru sebagai python-app
  • Edit bagian build lebih lanjut untuk
  • tambahkan docker.buildArgs untuk meneruskan FLASK_DEBUG=1
  • Sinkronkan setelan untuk memuat perubahan pada file *.py dari IDE ke penampung yang sedang berjalan

Setelah diedit, bagian build dalam file skaffold.yaml akan menjadi seperti di bawah:

build:
 artifacts:
 - image: python-app
   docker:
     buildArgs:
       FLASK_DEBUG: "1"
     dockerfile: Dockerfile
   sync:
     infer:
     - '**/*.py'

Mengubah File Konfigurasi Kubernetes

  1. Mengubah Nama default
  • Buka file deployment.yaml
  • Pilih nama gambar yang saat ini ditetapkan sebagai dockerfile-image
  • Klik kanan dan pilih Change All Occurrences
  • Ketik nama baru sebagai python-app

4. Menjalani proses pengembangan

Setelah menambahkan logika bisnis, Anda kini dapat men-deploy dan menguji aplikasi. Bagian berikut akan menampilkan penggunaan plugin Cloud Code. Plugin ini terintegrasi dengan skaffold untuk menyederhanakan proses pengembangan Anda. Saat Anda men-deploy ke GKE dalam langkah-langkah berikut, Cloud Code dan Skaffold akan otomatis membangun image container Anda, mengirimkannya ke Container Registry, lalu men-deploy aplikasi your ke GKE. Hal ini terjadi di balik layar yang mengabstraksi detail dari alur developer.

Login ke Google Cloud

  1. Klik ikon Cloud Code dan pilih "Sign in to Google Cloud":

1769afd39be372ff.pngS

  1. Klik "Lanjutkan login".

923bb1c8f63160f9.pngS

  1. Periksa output di Terminal dan buka link:

517fdd579c34aa21.pngS

  1. Login dengan kredensial siswa Qwiklabs Anda.

db99b345f7a8e72c.png

  1. Pilih "Izinkan":

a5376553c430ac84.png

  1. Salin kode verifikasi dan kembali ke tab Workstation.

6719421277b92eac.pngS

  1. Tempelkan kode verifikasi dan tekan Enter.

e9847cfe3fa8a2ce.png

Tambahkan Cluster Kubernetes

  1. Menambahkan Cluster

62a3b97bdbb427e5.pngS

  1. Pilih Google Kubernetes Engine:

9577de423568bbaa.pngS

  1. Pilih project.

c5202fcbeebcd41c.png

  1. Pilih "python-cluster" yang dibuat di penyiapan awal.

719c2fc0a7f9e84f.pngS

  1. Cluster ini sekarang muncul di daftar cluster Kubernetes di bagian Cloud Code. Jelajahi dan jelajahi cluster dari sini.

7e5f50662d4eea3c.pngS

Tetapkan ID project saat ini menggunakan gcloud cli

  1. Salin project ID untuk lab ini dari halaman qwiklabs.

fcff2d10007ec5bc.png

  1. Dari terminal, jalankan perintah gcloud cli untuk menetapkan project ID. Ganti contoh project id sebelum menjalankan perintah. GANTI ID project sebelum menjalankan perintah di bawah.
gcloud config set project qwiklabs-gcp-project-id

Men-deploy ke Kubernetes

  1. Pada panel di bagian bawah Cloud Shell Editor, pilih Cloud Code ⁠

d99a88992e15fea9.png

  1. Di panel yang muncul di bagian atas, pilih Jalankan di Kubernetes. Jika diminta, pilih Ya untuk menggunakan konteks Kubernetes saat ini.

bfd65e9df6d4a6cb.png

Perintah ini memulai build kode sumber, lalu menjalankan pengujian. Build dan pengujian akan memerlukan waktu beberapa menit untuk dijalankan. Pengujian ini mencakup pengujian unit dan langkah validasi yang memeriksa aturan yang ditetapkan untuk lingkungan deployment. Langkah validasi ini sudah dikonfigurasi, dan memastikan bahwa Anda mendapatkan peringatan tentang masalah deployment meskipun Anda masih bekerja di lingkungan pengembangan.

  1. Saat pertama kali Anda menjalankan perintah, sebuah {i>prompt<i} akan muncul di bagian atas layar yang menanyakan apakah Anda menginginkan konteks kubernetes saat ini, pilih "Yes" untuk menerima dan menggunakan konteks saat ini.
  2. Selanjutnya, akan muncul perintah yang menanyakan container registry yang akan digunakan. Tekan enter untuk menerima nilai default yang diberikan
  3. Pilih "Output" tab di panel bawah untuk melihat kemajuan dan notifikasi. Menggunakan dropdown, pilih "Kubernetes: Run/Debug"

9c87ccbf5d06f50a.pngS

  1. Pilih "Kubernetes: Run/Debug - Terperinci" di menu drop-down saluran di sebelah kanan untuk melihat detail tambahan dan log yang melakukan streaming langsung dari penampung

804abc8833ffd571.pngS

Saat build dan pengujian selesai, log tab Output akan membuat URL http://localhost:8080 tercantum di kolom "Kubernetes: Run/Debug" {i>view<i}.

  1. Di terminal Cloud Code, arahkan kursor ke URL pertama pada output (http://localhost:8080), lalu di ujung alat yang muncul, pilih Open Web Preview.
  2. Tab browser baru akan terbuka dan menampilkan pesan Hello, World!

Hot Reload

  1. Buka file app.py.
  2. Ubah pesan salam menjadi Hello from Python

Perhatikan segera bahwa di jendela Output, tampilan Kubernetes: Run/Debug, watcher menyinkronkan file yang diupdate dengan container di Kubernetes

Update initiated
Build started for artifact python-app
Build completed for artifact python-app

Deploy started
Deploy completed

Status check started
Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress
Resource deployment/python-app status updated to In Progress
Resource deployment/python-app status completed successfully
Status check succeeded
...
  1. Jika beralih ke tampilan Kubernetes: Run/Debug - Detailed, Anda akan melihat bahwa aplikasi ini mengenali perubahan file, lalu mem-build dan men-deploy ulang aplikasi
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
  1. Muat ulang tab browser tempat Anda melihat hasil sebelumnya untuk melihat hasil yang diperbarui.

Proses Debug

  1. Buka tampilan Debug dan hentikan thread saat ini 647213126d7a4c7b.png. Jika diminta, Anda dapat memilih untuk melakukan pembersihan setelah setiap pengujian dijalankan.
  2. 70d6bd947d04d1e6.pngS
  3. Klik Cloud Code di menu bawah dan pilih Debug on Kubernetes untuk menjalankan aplikasi dalam mode debug.
  • Dalam tampilan Kubernetes Run/Debug - Detailed di jendela Output, perhatikan bahwa skaffold akan men-deploy aplikasi ini dalam mode debug.
  1. Saat proses selesai. Anda akan melihat debugger terpasang dan tab Output bertuliskan: Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully., dan URL http://localhost:8080 tercantum.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
  1. Status bar bawah berubah warnanya dari biru menjadi oranye yang menunjukkan bahwa status bar berada dalam mode Debug.
  2. Dalam tampilan Kubernetes Run/Debug, perhatikan bahwa penampung yang dapat di-debug dimulai
**************URLs*****************
Forwarded URL from service python-app: http://localhost:8080
Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default)
Update succeeded
***********************************

Memanfaatkan Breakpoint

  1. Buka file app.py.
  2. Cari pernyataan yang bertuliskan return message
  3. Tambahkan titik henti sementara ke baris tersebut dengan mengklik ruang kosong di sebelah kiri nomor baris. Indikator merah akan muncul untuk mencatat titik henti sementara yang telah disetel
  4. Saat pertama kali dijalankan, perintah akan menanyakan lokasi sumber di dalam container. Nilai ini terkait dengan direktori di Dockerfile.

Tekan Enter untuk menerima default

fccc866f32b5ed86.png

Perlu waktu beberapa menit untuk membangun dan men-deploy aplikasi.

  1. Muat ulang browser Anda dan perhatikan bahwa debugger menghentikan proses pada titik henti sementara sehingga Anda dapat menyelidiki variabel dan status aplikasi yang berjalan dari jarak jauh di GKE
  2. Klik ke bawah bagian {i>VARIABLES<i}
  3. Klik Lokal di sana, Anda akan menemukan variabel "message".
  4. Klik dua kali nama variabel "message" Di jendela pop-up, ubah nilai ke nilai lain seperti "Greetings from Python"
  5. Klik tombol Lanjutkan pada panel kontrol debug 607c33934f8d6b39.pngS
  6. Tinjau respons di browser Anda yang kini menampilkan nilai terbaru yang baru saja Anda masukkan.
  7. Menghentikan "Debug" mode dengan menekan tombol berhenti 647213126d7a4c7b.png dan menghapus titik henti sementara dengan mengklik titik henti sementara lagi.

5. Mengembangkan Layanan Istirahat CRUD Sederhana

Pada tahap ini, aplikasi Anda telah dikonfigurasi sepenuhnya untuk pengembangan dalam container dan Anda telah mempelajari alur kerja pengembangan dasar dengan Cloud Code. Di bagian berikut, Anda akan mempraktikkan hal-hal yang telah Anda pelajari dengan menambahkan endpoint layanan lainnya yang terhubung ke database terkelola di Google Cloud.

Membuat kode untuk layanan lainnya

Kode di bawah membuat layanan istirahat sederhana yang menggunakan Spanner sebagai database yang mendukung aplikasi. Buat aplikasi dengan menyalin kode berikut ke dalam aplikasi Anda.

  1. Buat aplikasi utama dengan mengganti app.py dengan konten berikut
import os
from flask import Flask, request, jsonify
from google.cloud import spanner


app = Flask(__name__)


instance_id = "music-catalog"

database_id = "musicians"

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)


@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

@app.route('/singer', methods=['POST'])
def create():
    try:
        request_json = request.get_json()
        singer_id = request_json['singer_id']
        first_name = request_json['first_name']
        last_name = request_json['last_name']
        def insert_singers(transaction):
            row_ct = transaction.execute_update(
                f"INSERT Singers (SingerId, FirstName, LastName) VALUES" \
                f"({singer_id}, '{first_name}', '{last_name}')"
            )
            print("{} record(s) inserted.".format(row_ct))

        database.run_in_transaction(insert_singers)

        return {"Success": True}, 200
    except Exception as e:
        return e



@app.route('/singer', methods=['GET'])
def get_singer():

    try:
        singer_id = request.args.get('singer_id')
        def get_singer():
            first_name = ''
            last_name = ''
            with database.snapshot() as snapshot:
                results = snapshot.execute_sql(
                    f"SELECT SingerId, FirstName, LastName FROM Singers " \
                    f"where SingerId = {singer_id}",
                    )
                for row in results:
                    first_name = row[1]
                    last_name = row[2]
                return (first_name,last_name )
        first_name, last_name = get_singer()  
        return {"first_name": first_name, "last_name": last_name }, 200
    except Exception as e:
        return e


@app.route('/singer', methods=['PUT'])
def update_singer_first_name():
    try:
        singer_id = request.args.get('singer_id')
        request_json = request.get_json()
        first_name = request_json['first_name']
        
        def update_singer(transaction):
            row_ct = transaction.execute_update(
                f"UPDATE Singers SET FirstName = '{first_name}' WHERE SingerId = {singer_id}"
            )

            print("{} record(s) updated.".format(row_ct))

        database.run_in_transaction(update_singer)
        return {"Success": True}, 200
    except Exception as e:
        return e


@app.route('/singer', methods=['DELETE'])
def delete_singer():
    try:
        singer_id = request.args.get('singer')
    
        def delete_singer(transaction):
            row_ct = transaction.execute_update(
                f"DELETE FROM Singers WHERE SingerId = {singer_id}"
            )
            print("{} record(s) deleted.".format(row_ct))

        database.run_in_transaction(delete_singer)
        return {"Success": True}, 200
    except Exception as e:
        return e

port = int(os.environ.get('PORT', 8080))
if __name__ == '__main__':
    app.run(threaded=True, host='0.0.0.0', port=port)

Tambahkan Konfigurasi Database

Agar terhubung ke Spanner dengan aman, siapkan aplikasi agar menggunakan Workload Identities. Hal ini memungkinkan aplikasi Anda bertindak sebagai akun layanannya sendiri dan memiliki izin tersendiri saat mengakses database.

  1. Perbarui deployment.yaml. Tambahkan kode berikut di akhir file (pastikan Anda mempertahankan indentasi tab pada contoh di bawah)
      serviceAccountName: python-ksa
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true" 

Setelah perubahan, bagian spesifikasi akan terlihat seperti ini

   spec:
     containers:
     - name: python-app
       image: python-app
     serviceAccountName: python-ksa
     nodeSelector:
       iam.gke.io/gke-metadata-server-enabled: "true"

Men-deploy dan Validasi Aplikasi

  1. Di panel bagian bawah Cloud Shell Editor, pilih Cloud Code lalu pilih Debug on Kubernetes di bagian atas layar.
  2. Saat build dan pengujian selesai, tab Output bertuliskan: Resource deployment/python-app status completed successfully, dan URL akan tercantum: "Forwarded URL from service python-app: http://localhost:8080"
  3. Tambahkan beberapa entri.

Dari Terminal cloudshell, jalankan perintah di bawah ini

curl -X POST http://localhost:8080/singer -H 'Content-Type: application/json' -d '{"first_name":"Cat","last_name":"Meow", "singer_id": 6}'
  1. Uji GET dengan menjalankan perintah di bawah ini di terminal
curl -X GET http://localhost:8080/singer?singer_id=6
  1. Test Delete: Sekarang coba hapus entri dengan menjalankan perintah berikut. Ubah nilai item-id jika diperlukan.
curl -X DELETE http://localhost:8080/singer?singer_id=6
    This throws an error message
500 Internal Server Error

Mengidentifikasi dan memperbaiki masalah

  1. Mode debug dan temukan masalahnya. Berikut ini beberapa tips:
  • Kami tahu ada yang salah dengan DELETE karena tidak menampilkan hasil yang diinginkan. Jadi, Anda akan menetapkan titik henti sementara di app.py dalam metode delete_singer.
  • Jalankan eksekusi langkah demi langkah dan amati variabel di setiap langkah untuk mengamati nilai variabel lokal di jendela kiri.
  • Untuk mengamati nilai tertentu seperti singer_id dan request.args di dalam, tambahkan variabel ini ke jendela Watch.
  1. Perhatikan bahwa nilai yang ditetapkan ke singer_id adalah None. Ubah kode untuk memperbaiki masalah.

Cuplikan kode tetap akan terlihat seperti ini.

@app.route('/delete-singer', methods=['DELETE', 'GET'])
def delete_singer():
    try:
        singer_id = request.args.get('singer_id')
  1. Setelah aplikasi dimulai ulang, uji lagi dengan mencoba menghapusnya.
  2. Hentikan sesi proses debug dengan mengklik kotak merah di toolbar debug 647213126d7a4c7b.png

6. Pembersihan

Selamat! Di lab ini, Anda telah membuat aplikasi Python baru dari awal dan mengonfigurasinya agar berfungsi secara efektif dengan container. Kemudian, Anda telah men-deploy dan men-debug aplikasi ke cluster GKE jarak jauh dengan mengikuti alur developer yang sama dengan yang ada di stack aplikasi tradisional.

Untuk melakukan pembersihan setelah menyelesaikan lab:

  1. Menghapus file yang digunakan dalam lab
cd ~ && rm -rf ~/music-service
  1. Menghapus project untuk menghapus semua infrastruktur dan resource terkait