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.
Apa itu Cloud Workstations?
Cloud Workstations menyediakan lingkungan pengembangan terkelola di Google Cloud dengan keamanan bawaan dan lingkungan pengembangan yang telah dikonfigurasi sebelumnya dan 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 untuk 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 meniadakan aspek keamanan dengan meningkatkan postur keamanan lingkungan pengembangan aplikasi Anda. Layanan ini memiliki fitur keamanan seperti Kontrol Layanan VPC, traffic masuk atau keluar pribadi, update image otomatis, dan kebijakan akses Identity and Access Management.
Apa itu Cloud Code?
Cloud Code menyediakan dukungan IDE untuk siklus pengembangan lengkap aplikasi Cloud Run dan Kubernetes, mulai dari membuat dan menyesuaikan aplikasi baru, mulai dari template contoh hingga menjalankan aplikasi yang sudah jadi. Cloud Code mendukung Anda sepanjang proses dengan sampel siap pakai, cuplikan konfigurasi siap pakai, dan pengalaman proses debug yang disesuaikan, sehingga membuat pengembangan dengan Kubernetes dan Cloud Run menjadi jauh lebih mudah.
Berikut adalah beberapa fitur Cloud Code:
- Membangun dan menjalankan aplikasi secara berkelanjutan
- Dukungan proses debug untuk aplikasi Kubernetes Anda yang sedang dalam pengembangan
- Catat streaming dan lihat
Pelajari lebih lanjut fitur Cloud Code lainnya.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari metode pengembangan dengan container di GCP, termasuk:
- Meninjau Cloud Workstation
- Luncurkan Workstation
- Meninjau Cloud Code
- Men-debug di Kubernetes
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- 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.
- 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.
- 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.
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 workstation Cloud sebagai IDE.
Skrip penyiapan di bawah menyiapkan infrastruktur ini untuk Anda.
- 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
- Buka file
setup_with_cw.sh
dan edit nilai sandi yang saat ini disetel ke CHANGEME - Jalankan skrip penyiapan untuk membuat cluster GKE yang akan Anda gunakan di lab ini. Penyiapan ini akan memerlukan waktu sekitar 20 menit.
./setup_with_cw.sh &
- Buka Cloud Workstations di Konsol Cloud. Tunggu hingga status cluster berada di
READY
sebelum melanjutkan ke langkah berikutnya. - 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
- 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
Konfigurasi dan Cluster Cloud Workstations
Buka Cloud Workstations di Konsol Cloud. Pastikan cluster berada dalam status READY
.
Memverifikasi status untuk Konfigurasi yang ada.
Membuat workstation baru.
Ubah nama menjadi my-workstation
dan pilih konfigurasi yang ada: codeoss-python
.
Luncurkan Workstation
- Memulai dan meluncurkan workstation. Perlu waktu beberapa saat untuk memulai Workstation.
- Izinkan cookie pihak ketiga dengan mengklik ikon di kolom URL.
- Klik "Situs tidak berfungsi?".
- Klik "Izinkan cookie".
- Setelah workstation diluncurkan, Anda akan melihat Code OSS IDE muncul.
Klik "Tandai Selesai" di halaman Memulai di salah satu workstation IDE
3. Ringkasan Cloud Code
Tinjau berbagai bagian yang tersedia di Cloud Code.
- Pengembangan Kubernetes. Dapatkan pengembangan Kubernetes dan lingkungan proses debug yang terintegrasi sepenuhnya di dalam IDE Anda. Buat dan kelola langsung cluster dari dalam IDE.
- Men-debug aplikasi yang berjalan. Debug kode dalam IDE Anda menggunakan Cloud Code untuk VS Code dan Cloud Code untuk IntelliJ dengan memanfaatkan fitur proses debug IDE bawaan.
- Pelajari deployment. Melihat resource dan metadata pokok untuk cluster Kubernetes dan layanan Cloud Run. Anda dapat mengambil deskripsi, melihat log, mengelola secret, atau mendapatkan terminal langsung ke pod.
- Menyederhanakan pengembangan lokal Kubernetes. Cloud Code untuk IDE menggunakan berbagai alat populer, seperti Skaffold, Jib, dan kubectl, untuk memberikan masukan secara terus-menerus terkait kode Anda secara real time.
Login ke Google Cloud
- Klik ikon Cloud Code dan pilih "Sign in to Google Cloud":
- Klik "Lanjutkan login".
- Periksa output di Terminal dan buka link:
- Login dengan kredensial siswa Qwiklabs Anda.
- Pilih "Izinkan":
- Salin kode verifikasi dan kembali ke tab Workstation.
- Tempelkan kode verifikasi dan tekan Enter.
Klik "Izinkan" jika Anda melihat pesan ini, agar Anda dapat menyalin dan menempel ke komputer.
4. Membuat aplikasi awal Python baru
Di bagian ini, Anda akan membuat aplikasi Python baru.
- Buka Terminal baru.
- Buat direktori baru dan buka sebagai ruang kerja
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- Buat file bernama
requirements.txt
dan salin konten berikut ke dalamnya
Flask
gunicorn
ptvsd==4.3.2
- 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')
- 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 Python flask. 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
- Lakukan inisialisasi Skaffold dengan perintah berikut
skaffold init --generate-manifests
Saat diminta, gunakan tanda panah untuk memindahkan kursor dan spasi untuk memilih opsi.
Pilih:
8080
untuk porty
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 meneruskanFLASK_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
- 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
5. 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.
Tambahkan Cluster Kubernetes
- Menambahkan Cluster
- Pilih Google Kubernetes Engine:
- Pilih project.
- Pilih "python-cluster" yang dibuat di penyiapan awal.
- Cluster ini sekarang muncul di daftar cluster Kubernetes di bagian Cloud Code. Jelajahi dan jelajahi cluster dari sini.
Men-deploy ke Kubernetes
- Pada panel di bagian bawah Cloud Shell Editor, pilih Cloud Code ✔
- Di panel yang muncul di bagian atas, pilih Jalankan di Kubernetes.
Jika diminta, pilih Ya untuk menggunakan konteks Kubernetes saat ini.
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.
- 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.
- Selanjutnya, akan muncul perintah yang menanyakan container registry yang akan digunakan. Tekan enter untuk menerima nilai default yang diberikan
- Pilih "Output" tab di panel bawah untuk melihat kemajuan dan notifikasi. Menggunakan dropdown, pilih "Kubernetes: Run/Debug"
- 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
Saat build dan pengujian selesai, log tab Output akan membuat URL http://localhost:8080 tercantum di kolom "Kubernetes: Run/Debug" {i>view<i}.
- Di terminal Cloud Code, arahkan kursor ke URL pertama pada output (http://localhost:8080), lalu di ujung alat yang muncul, pilih Open Web Preview.
- Tab browser baru akan terbuka dan menampilkan pesan:
Hello, World!
Hot Reload
- Buka file
app.py
. - 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 ...
- Jika beralih ke tampilan
Kubernetes: Run/Debug - Detailed
, Anda akan melihat bahwa aplikasi 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
- Muat ulang tab browser tempat Anda melihat hasil sebelumnya untuk melihat hasil yang diperbarui.
Proses Debug
- Buka tampilan Debug dan hentikan thread saat ini
. Jika diminta, Anda dapat memilih untuk melakukan pembersihan setelah setiap pengujian dijalankan.
- Klik
Cloud Code
di menu bawah dan pilihDebug on Kubernetes
untuk menjalankan aplikasi dalam modedebug
.
- Dalam tampilan
Kubernetes Run/Debug - Detailed
di jendelaOutput
, perhatikan bahwa skaffold akan men-deploy aplikasi ini dalam mode debug.
- Saat pertama kali dijalankan, perintah akan menanyakan lokasi sumber di dalam container. Nilai ini terkait dengan direktori di Dockerfile.
Tekan Enter untuk menerima default
Perlu waktu beberapa menit untuk membangun dan men-deploy aplikasi. Jika sesi debug terputus, jalankan kembali langkah ke "Debug di Kubernetes" dari "Development Sessions" bagian.
- 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
- Status bar bawah berubah warnanya dari biru menjadi oranye yang menunjukkan bahwa status bar berada dalam mode Debug.
- 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
- Buka file
app.py
. - Cari pernyataan yang bertuliskan
return message
- 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
- 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
- Klik ke bawah bagian {i>VARIABLES<i}
- Klik Lokal di sana, Anda akan menemukan variabel
"message"
. - Klik dua kali nama variabel "message" Di jendela pop-up, ubah nilai ke nilai lain seperti
"Greetings from Python"
- Klik tombol Lanjutkan pada panel kontrol debug
- Tinjau respons di browser Anda yang kini menampilkan nilai terbaru yang baru saja Anda masukkan.
- Menghentikan "Debug" mode dengan menekan tombol berhenti
dan menghapus titik henti sementara dengan mengklik titik henti sementara lagi.
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:
- Menghapus file yang digunakan dalam lab
cd ~ && rm -rf ~/music-service
- Menghapus project untuk menghapus semua infrastruktur dan resource terkait
—
Terakhir diperbarui: 22/3/23