Lingkungan Pengembangan

1. Ringkasan

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

58a4cdd3ed7a123a.png

Apa itu Cloud Workstations?

Cloud Workstations menyediakan lingkungan pengembangan terkelola di Google Cloud dengan keamanan bawaan dan lingkungan pengembangan yang telah dikonfigurasi sebelumnya namun dapat disesuaikan. Akses Cloud Workstations melalui IDE berbasis browser, dari beberapa editor kode lokal (seperti VSCode atau JetBrains IDE seperti IntelliJ IDEA Ultimate dan PyCharm Professional), atau melalui SSH.

Cloud Workstations menggunakan resource berikut:

  • Administrator membuat cluster workstation
  • Di setiap cluster workstation, administrator membuat satu atau beberapa konfigurasi workstation yang berfungsi sebagai template untuk workstation.
  • Developer dapat membuat workstation yang menentukan lingkungan pengembangan yang menyediakan Cloud IDE, alat bahasa, library, dan lainnya.

Cloud Workstations memungkinkan administrator IT dan keamanan menyediakan, menskalakan, mengelola, dan mengamankan lingkungan pengembangan mereka dengan mudah, serta memungkinkan developer mengakses lingkungan pengembangan dengan konfigurasi yang konsisten dan alat yang dapat disesuaikan.

Cloud Workstations membantu menggeser keamanan ke kiri dengan meningkatkan postur keamanan lingkungan pengembangan aplikasi Anda. Layanan ini memiliki fitur keamanan seperti Kontrol Layanan VPC, traffic masuk atau keluar pribadi, update image paksa, dan kebijakan akses Identity and Access Management.

Apa itu Cloud Code?

Cloud Code menyediakan dukungan IDE untuk siklus pengembangan penuh aplikasi Kubernetes dan Cloud Run, mulai dari membuat dan menyesuaikan aplikasi baru dari template contoh hingga menjalankan aplikasi yang telah selesai. Cloud Code mendukung Anda di sepanjang proses dengan contoh siap pakai, cuplikan konfigurasi langsung, dan pengalaman debug yang disesuaikan — sehingga pengembangan dengan Kubernetes dan Cloud Run menjadi jauh lebih mudah.

Berikut beberapa fitur Cloud Code:

  • Membangun dan menjalankan aplikasi secara berkelanjutan
  • Dukungan proses debug untuk aplikasi Kubernetes Anda yang sedang dalam pengembangan
  • Streaming dan melihat log

Pelajari lebih lanjut fitur Cloud Code lainnya.

Yang akan Anda pelajari

Dalam lab ini, Anda akan mempelajari metode untuk mengembangkan dengan container di GCP, termasuk:

  • Meninjau Cloud Workstations
  • Meluncurkan Workstation
  • Meninjau Cloud Code
  • Melakukan debug di Kubernetes

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 mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (biasanya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat 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. Guna 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.

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)')

Di lab ini, Anda akan men-deploy kode ke GKE. Anda juga akan menggunakan Cloud Workstations sebagai IDE.

Skrip penyiapan di bawah akan menyiapkan infrastruktur ini untuk Anda.

  1. Download skrip penyiapan dan jadikan file tersebut dapat dieksekusi.
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 ditetapkan ke CHANGEME
  2. Jalankan skrip penyiapan untuk menyiapkan cluster GKE yang akan Anda gunakan di lab ini. Penyiapan ini akan memerlukan waktu sekitar 20 menit.
./setup_with_cw.sh &
  1. Buka Cloud Workstations di Konsol Cloud. Tunggu hingga cluster berstatus READY sebelum melanjutkan ke langkah berikutnya.
  2. Jika sesi Cloud Shell Anda terputus, klik "Reconnect", lalu jalankan perintah gcloud cli untuk menetapkan project ID. Ganti project ID contoh 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

Cluster dan Konfigurasi Cloud Workstations

Buka Cloud Workstations di Konsol Cloud. Verifikasi bahwa cluster berstatus READY.

305e1a3d63ac7ff6.png

Verifikasi status Konfigurasi yang ada.

2e23c2e9983d1ccf.png

Buat workstation baru.

a53adeeac81a78c8.png

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

f052cd47701ec774.png

Meluncurkan Workstation

  1. Mulai dan luncurkan workstation. Perlu waktu beberapa saat untuk memulai Workstation.

682f8a307032cba3.png

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

fcf9405b6957b7d7.png

  1. Klik "Situs tidak berfungsi?".

36a84c0e2e3b85b.png

  1. Klik "Izinkan cookie".

2259694328628fba.png

  1. Setelah workstation diluncurkan, Anda akan melihat IDE Code OSS muncul.

Klik "Mark Done" di halaman Getting Started pada IDE workstation

94874fba9b74cc22.png

3. Ringkasan Cloud Code

Tinjau berbagai bagian yang tersedia di Cloud Code.

  • Pengembangan Kubernetes. Dapatkan lingkungan pengembangan dan proses debug Kubernetes yang terintegrasi sepenuhnya di dalam IDE Anda. Buat dan kelola cluster langsung dari dalam IDE.
  • Men-debug aplikasi yang sedang berjalan. Lakukan debug pada kode dalam IDE Anda menggunakan Cloud Code untuk VS Code dan Cloud Code untuk IntelliJ dengan memanfaatkan fitur proses debug IDE bawaan.
  • Mempelajari deployment. Melihat metadata dan resource pokok untuk cluster Kubernetes dan layanan Cloud Run Anda. Anda dapat mengambil deskripsi, melihat log, mengelola secret, atau mendapatkan terminal secara langsung ke pod.
  • Menyederhanakan pengembangan lokal Kubernetes. Untuk menjalankan fungsinya, Cloud Code untuk IDE menggunakan beragam alat populer, seperti Skaffold, Jib, dan kubectl, untuk memberikan masukan secara terus-menerus terkait kode Anda secara real time.

e4e89eea9ff45dff.png

Login ke Google Cloud

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

1769afd39be372ff.png

  1. Klik "Lanjutkan untuk login".

923bb1c8f63160f9.png

  1. Periksa output di Terminal dan buka link:

517fdd579c34aa21.png

  1. Login dengan kredensial siswa Qwiklabs Anda.

db99b345f7a8e72c.png

  1. Pilih "Izinkan":

a5376553c430ac84.png

  1. Salin kode verifikasi dan kembali ke tab Workstation.

6719421277b92eac.png

  1. Tempelkan kode verifikasi, lalu tekan Enter.

e9847cfe3fa8a2ce.png

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

58149777e5cc350a.png

4. 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"
  1. Buat file bernama requirements.txt dan salin konten berikut ke dalamnya

789e8389170bd900.png

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

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 ke aplikasi flask Python. Dockerfile ini memungkinkan Anda meneruskan nilai ini sebagai argumen build.

Membuat Manifes

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

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

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

Pilih:

  • 8080 untuk port
  • y untuk menyimpan konfigurasi

Memperbarui Konfigurasi Skaffold

  • Mengubah nama aplikasi default
  • Buka skaffold.yaml
  • Pilih nama gambar yang saat ini ditetapkan sebagai dockerfile-image
  • Klik kanan, lalu pilih Ubah Semua Kemunculan
  • Ketik nama baru sebagai python-app
  • Edit lebih lanjut bagian build menjadi
  • menambahkan docker.buildArgs ke kartu FLASK_DEBUG=1
  • Menyinkronkan setelan untuk memuat perubahan apa pun pada file *.py dari IDE ke container yang sedang berjalan

Setelah pengeditan, bagian build di file skaffold.yaml akan 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, lalu pilih Ubah Semua Kemunculan
  • Ketik nama baru sebagai python-app

5. Menjelaskan proses pengembangan

Setelah menambahkan logika bisnis, Anda kini dapat men-deploy dan menguji aplikasi. Bagian berikut akan menunjukkan penggunaan plugin Cloud Code. Selain itu, plugin ini terintegrasi dengan skaffold untuk menyederhanakan proses pengembangan Anda. Saat Anda men-deploy ke GKE pada 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 dengan mengabstraksi detail dari alur developer.

Menambahkan Cluster Kubernetes

  1. Menambahkan Cluster

62a3b97bdbb427e5.png

  1. Pilih Google Kubernetes Engine:

9577de423568bbaa.png

  1. Pilih project.

c5202fcbeebcd41c.png

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

719c2fc0a7f9e84f.png

  1. Cluster kini muncul dalam daftar cluster Kubernetes di bagian Cloud Code. Buka dan jelajahi cluster dari sini.

7e5f50662d4eea3c.png

Men-deploy ke Kubernetes

  1. Di 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 Anda mendapatkan peringatan tentang masalah deployment meskipun Anda sedang bekerja di lingkungan pengembangan.

  1. Saat pertama kali Anda menjalankan perintah, perintah akan muncul di bagian atas layar yang menanyakan apakah Anda menginginkan konteks kubernetes saat ini. Pilih "Ya" untuk menyetujui dan menggunakan konteks saat ini.
  2. Selanjutnya, perintah akan ditampilkan untuk menanyakan registry container mana yang akan digunakan. Tekan enter untuk menerima nilai default yang diberikan
  3. Pilih tab "Output" di panel bawah untuk melihat progres dan notifikasi. Menggunakan dropdown, pilih "Kubernetes: Run/Debug"

9c87ccbf5d06f50a.png

  1. Pilih "Kubernetes: Run/Debug - Detailed" di drop-down channel di sebelah kanan untuk melihat detail tambahan dan streaming log secara live dari penampung

804abc8833ffd571.png

Setelah build dan pengujian selesai, log tab Output akan mencantumkan URL http://localhost:8080 di tampilan "Kubernetes: Run/Debug".

  1. Di terminal Cloud Code, arahkan kursor ke URL pertama dalam output (http://localhost:8080), lalu di tips 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

Segera perhatikan bahwa di jendela Output, tampilan Kubernetes: Run/Debug, watcher menyinkronkan file yang diperbarui 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 melihatnya 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 membersihkan setelah setiap proses.
  2. 70d6bd947d04d1e6.png
  3. Klik Cloud Code di menu bawah, lalu pilih Debug on Kubernetes untuk menjalankan aplikasi dalam mode debug.

b9465c6825caf685.png

  • Di tampilan Kubernetes Run/Debug - Detailed jendela Output, perhatikan bahwa skaffold akan men-deploy aplikasi ini dalam mode debug.
  1. 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

Proses build dan deployment aplikasi akan memerlukan waktu beberapa menit. Jika sesi debug terputus, jalankan kembali langkah-langkah "Debug di Kubernetes" dari bagian "Sesi Pengembangan".

  1. Saat proses selesai. Anda akan melihat debugger terlampir 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 mengubah warnanya dari biru menjadi oranye yang menunjukkan bahwa status bar tersebut berada dalam mode Debug.

b2abd61a129ed76.png

  1. Di tampilan Kubernetes Run/Debug, perhatikan bahwa container yang Dapat di-debug telah 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 Titik Henti Sementara

  1. Buka file app.py.
  2. Cari pernyataan yang bertuliskan return message
  3. Tambahkan titik henti sementara ke baris tersebut dengan mengklik spasi kosong di sebelah kiri nomor baris. Indikator merah akan ditampilkan untuk menunjukkan bahwa titik henti sementara telah ditetapkan
  4. Muat ulang browser Anda dan perhatikan bahwa debugger menghentikan proses pada titik henti sementara dan memungkinkan Anda menyelidiki variabel dan status aplikasi yang berjalan dari jarak jauh di GKE
  5. Klik ke bagian VARIABEL
  6. Klik Locals, di sana Anda akan menemukan variabel "message".
  7. Klik dua kali nama variabel "message" dan di jendela pop-up, ubah nilainya menjadi sesuatu yang berbeda seperti "Greetings from Python"
  8. Klik tombol Lanjutkan di panel kontrol debug 607c33934f8d6b39.png
  9. Tinjau respons di browser Anda yang kini menampilkan nilai yang diperbarui yang baru saja Anda masukkan.
  10. Hentikan mode "Debug" dengan menekan tombol berhenti 647213126d7a4c7b.png dan hapus titik henti sementara dengan mengklik titik henti sementara lagi.

6. Pembersihan

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

Untuk membersihkan setelah menyelesaikan lab:

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

Terakhir diperbarui: 22/3/23