1. Ringkasan
Rangkaian codelab Stasiun Migrasi Serverless (tutorial interaktif dan mandiri) dan video terkait bertujuan untuk membantu developer tanpa server Google Cloud memodernisasi aplikasi mereka dengan memandu mereka melalui satu atau beberapa migrasi, terutama yang beralih dari layanan lama. Dengan melakukannya, aplikasi Anda akan menjadi lebih portabel serta memberi Anda lebih banyak opsi dan fleksibilitas, sehingga Anda dapat berintegrasi dengan dan mengakses lebih banyak produk Cloud serta melakukan upgrade ke rilis bahasa yang lebih baru dengan lebih mudah. Meskipun awalnya berfokus pada pengguna Cloud paling awal, terutama developer App Engine (lingkungan standar), seri ini cukup luas untuk mencakup platform serverless lainnya seperti Cloud Functions dan Cloud Run, atau platform lainnya jika berlaku.
Ada situasi ketika Anda tidak memiliki "seluruh aplikasi" memerlukan resource App Engine atau Cloud Run. Jika kode Anda hanya terdiri dari microservice atau fungsi sederhana, Cloud Functions kemungkinan lebih cocok. Codelab ini mengajarkan cara memigrasikan aplikasi App Engine sederhana (atau memecah aplikasi yang lebih besar menjadi beberapa microservice) dan men-deploy-nya ke Cloud Functions, yakni platform serverless lain yang dibuat khusus untuk kasus penggunaan seperti ini.
Anda akan mempelajari cara
- Menggunakan Cloud Shell
- Mengaktifkan Google Cloud Translation API
- Melakukan Autentikasi permintaan API
- Mengonversi aplikasi App Engine kecil untuk dijalankan di Cloud Functions
- Men-deploy kode ke Cloud Functions
Yang Anda butuhkan
- Project Google Cloud Platform dengan akun penagihan GCP aktif
- Keterampilan Python dasar
- Pengetahuan perintah Linux umum yang berfungsi
- Pengetahuan dasar tentang mengembangkan dan men-deploy aplikasi App Engine
- Aplikasi App Engine Modul 2 Cloud NDB Python 3 yang berfungsi
- Direkomendasikan: Selesaikan codelab Modul 2 serta langkah bonus untuk mentransfer aplikasi dari Python 2 ke 3
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Latar belakang
Sistem PaaS seperti Google App Engine dan Cloud Functions memberikan banyak kemudahan bagi pengguna. Platform serverless ini memungkinkan tim teknis Anda untuk berfokus pada pembuatan solusi bisnis, sehingga tidak perlu menghabiskan waktu untuk menyelidiki platform yang akan digunakan dan menentukan jumlah hardware yang dibutuhkan. Aplikasi dapat meningkatkan skala secara otomatis sesuai kebutuhan, memperkecil skala hingga nol dengan penagihan bayar per penggunaan untuk mengontrol biaya, dan aplikasi tersebut memungkinkan berbagai bahasa pengembangan umum saat ini.
Namun, meskipun pengembangan aplikasi web full-stack atau back-end yang kompleks untuk aplikasi seluler sangat cocok untuk App Engine, sering kali ada kasus bahwa developer terutama mencoba menempatkan beberapa fungsi secara online, seperti memperbarui feed berita atau menarik skor terbaru pertandingan playoff tim tuan rumah. Meskipun ada logika pengkodean untuk kedua skenario tersebut, kedua skenario tersebut tidak tampak sebagai "aplikasi" menyeluruh yang memerlukan kecanggihan App Engine. Di sinilah fungsi Cloud Functions.
Cloud Functions ditujukan untuk men-deploy kode bit kecil yang:
- Bukan bagian dari keseluruhan aplikasi
- Tidak diperlukan di seluruh stack pengembangan
- Berada di aplikasi atau backend aplikasi seluler tunggal yang berfokus pada satu hal
Anda juga dapat menggunakan Cloud Functions untuk memecah aplikasi monolitik berukuran besar menjadi beberapa microservice, yang masing-masing menggunakan database umum bersama seperti Cloud Firestore atau Cloud SQL. Dan jika ingin fungsi atau microservice Anda berada dalam container dan dieksekusi secara serverless di Cloud Run, Anda juga dapat melakukannya.
Contoh aplikasi App Engine kami yang ditampilkan di hampir semua tutorial migrasi merupakan aplikasi singkat dengan fungsi dasar yang berfungsi dengan baik di Cloud Functions. Dalam tutorial ini, Anda akan mempelajari cara memodifikasi aplikasi tersebut untuk dijalankan di Cloud Functions. Dari perspektif App Engine, karena fungsi lebih sederhana daripada keseluruhan aplikasi, pengalaman memulai Anda harus lebih mudah (dan lebih cepat), dan dengan lebih sedikit "overhead" secara umum. Migrasi ini menampilkan langkah-langkah berikut:
- Penyiapan/Prakerja
- Menghapus file konfigurasi
- Mengubah file aplikasi
3. Penyiapan/Prakerja
Codelab ini dimulai dengan versi Python 3 dari aplikasi contoh App Engine Modul 2 Cloud NDB karena Cloud Functions tidak mendukung Python 2. Pertama, mari siapkan project, dapatkan kode, lalu deploy aplikasi dasar pengukuran untuk mengonfirmasi bahwa kita mulai dengan kode yang berfungsi.
1. Siapkan project
Jika Anda sudah menyelesaikan codelab Modul 2 (dan mem-port-nya ke Python 3), sebaiknya gunakan kembali project (dan kode yang sama). Atau, Anda dapat membuat project baru atau menggunakan kembali project lain yang sudah ada. Pastikan project memiliki akun penagihan aktif dengan layanan App Engine diaktifkan.
2. Dapatkan aplikasi contoh dasar pengukuran
Salah satu prasyarat untuk codelab ini adalah memiliki aplikasi contoh Modul 2 yang berfungsi. Jika Anda tidak memilikinya, selesaikan salah satu tutorial di atas sebelum melanjutkan. Atau, jika Anda sudah terbiasa dengan kontennya, Anda dapat memulai dengan mengambil kode Modul 2 di bawah.
Baik Anda menggunakan kode Anda atau kode kita, kode Modul 2 Python 3 adalah tempat kita akan memulai. Codelab Modul 11 ini memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang menyerupai yang ada di folder repo Modul 11 (FINISH).
- START: Kode Modul 2 (3.x [Folder repo Modul 2b])
- FINISH: Kode Modul 11 (3.x)
- Seluruh repo (untuk melakukan clone atau mendownload ZIP)
Direktori file awal Python 3 Modul 2 (milik Anda atau milik kami) akan terlihat seperti ini:
$ ls README.md main.py templates app.yaml requirements.txt
3. Deploy (ulang) aplikasi dasar pengukuran
Langkah prakerja yang tersisa untuk dijalankan sekarang:
- Biasakan kembali diri Anda dengan alat command-line
gcloud
- Deploy kembali aplikasi contoh dengan
gcloud app deploy
- Konfirmasikan bahwa aplikasi berjalan di App Engine tanpa masalah
Setelah berhasil menjalankan langkah-langkah tersebut, Anda siap untuk mengonversinya menjadi Cloud Function.
4. Menghapus file konfigurasi
File app.yaml
adalah artefak App Engine yang tidak digunakan dengan Cloud Functions, jadi hapus sekarang. Jika Anda tidak melakukannya atau lupa untuk melakukannya, tidak ada salahnya karena Cloud Functions tidak menggunakannya. Itu adalah satu-satunya perubahan konfigurasi karena requirements.txt
tetap sama dengan yang berasal dari Modul 2.
Jika Anda juga mem-port aplikasi App Engine Python 2 ke Python 3, hapus appengine_config.py
dan folder lib
jika ada. Keduanya adalah artefak App Engine yang tidak digunakan dalam runtime Python 3.
5. Mengubah file aplikasi
Hanya ada satu file aplikasi, main.py
, sehingga semua perubahan yang diperlukan agar dapat dipindahkan ke Cloud Functions terjadi di file ini.
Impor
Karena kita hanya bekerja dengan fungsi, tidak diperlukan framework aplikasi web. Namun, untuk memudahkan, saat Cloud Functions berbasis Python dipanggil, objek permintaan akan otomatis diteruskan ke kode Anda sesuai kebutuhan. (Tim Cloud Functions memilihnya sebagai objek Permintaan Flask yang diteruskan ke fungsi Anda.)
Karena framework web bukan bagian dari lanskap Cloud Functions, tidak ada impor dari Flask kecuali jika aplikasi Anda menggunakan fitur Flask lainnya. Hal ini memang terjadi karena rendering template masih terjadi setelah konversi ke suatu fungsi, yang berarti untuk memanggil flask.render_template()
tetap diperlukan, sehingga impor dari Flask. Tidak ada framework web yang berarti membuat instance aplikasi Flask tidak perlu dibuat, jadi hapus app = Flask(__name__)
. Kode Anda akan terlihat seperti berikut, sebelum dan sesudah menerapkan perubahan:
SEBELUM:
from flask import Flask, render_template, request
from google.cloud import ndb
app = Flask(__name__)
ds_client = ndb.Client()
SETELAH:
from flask import render_template
from google.cloud import ndb
ds_client = ndb.Client()
Jika Anda bergantung pada objek aplikasi (app
) atau infrastruktur framework web lainnya, Anda harus menyelesaikan semua dependensi tersebut, menemukan solusi yang sesuai, atau menghapus penggunaan sepenuhnya atau menemukan proxy. Dengan begitu, Anda dapat mengonversi kode menjadi Cloud Function. Jika tidak, sebaiknya Anda tetap menggunakan App Engine atau memasukkan aplikasi dalam container untuk Cloud Run
Memperbarui tanda tangan fungsi pengendali utama
Perubahan yang diperlukan dalam tanda tangan fungsi adalah sebagai berikut:
- Flask tidak lagi digunakan setelah mengonversi aplikasi ke Cloud Function, jadi hapus dekorator rute.
- Cloud Functions secara otomatis meneruskan objek
Request
Flask sebagai parameter, jadi buat variabel untuk parameter tersebut. Di aplikasi contoh, kita akan menyebutnyarequest
. - Cloud Functions yang di-deploy harus diberi nama. Pengendali utama kami diberi nama
root()
dengan tepat di App Engine untuk menjelaskan apa itu (pengendali aplikasi root). Sebagai Cloud Function, nama tersebut menjadi kurang masuk akal. Sebagai gantinya, kita akan men-deploy Cloud Function dengan namavisitme
. Jadi, gunakan juga nama itu sebagai nama fungsi Python. Demikian pula, di Modul 4 dan 5, kami juga menamai layanan Cloud Runvisitme
.
Berikut informasi sebelum dan sesudah pembaruan ini:
SEBELUM:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
SETELAH:
def visitme(request):
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
Itulah akhir dari semua pembaruan yang diperlukan. Perlu diketahui bahwa perubahan yang dibuat hanya memengaruhi "infrastruktur" aplikasi pada kode sumber. Tidak ada perubahan yang diperlukan dalam kode aplikasi inti, dan tidak ada fungsi aplikasi yang diubah. Berikut adalah representasi bergambar dari perubahan-perubahan yang dibuat untuk mengilustrasikan poin ini:
Pengembangan dan pengujian lokal
App Engine memiliki server pengembangan lokal dev_appserver.py
, sedangkan Cloud Functions memiliki Framework Functions. Dengan framework ini, Anda dapat mengembangkan dan menguji secara lokal. Kode Anda dapat di-deploy ke Cloud Functions, tetapi juga dapat di-deploy ke platform komputasi lain seperti Compute Engine, Cloud Run, atau bahkan sistem lokal atau hybrid cloud yang mendukung Knative. Lihat di bawah untuk link tambahan ke Functions Framework.
6. Mem-build dan men-deploy
Men-deploy ke Cloud Functions sedikit berbeda dari App Engine. Karena tidak ada file konfigurasi yang digunakan di luar requirements.txt
, informasi selengkapnya tentang kode harus ditentukan di command line. Deploy Cloud Function baru yang dipicu HTTP dan berjalan di Python 3.10 dengan perintah ini:
$ gcloud functions deploy visitme --runtime python310 --trigger-http --allow-unauthenticated
Output Anda akan serupa dengan berikut ini:
Deploying function (may take a while - up to 2 minutes)...⠛ For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/f5f6fc81-1bb3-4cdb-8bfe?project=PROJECT_ID Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: f5f6fc81-1bb3-4cdb-8bfe buildName: projects/PROJECT_ID/locations/REGION/builds/f5f6fc81-1bb3-4cdb-8bfe dockerRegistry: CONTAINER_REGISTRY entryPoint: visitme httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/visitme ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/visitme runtime: python310 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/uploads-853031211983.REGION.cloudfunctions.appspot.com/8c923758-cee8-47ce-8e97-5720a5301c34.zip status: ACTIVE timeout: 60s updateTime: '2022-05-16T18:28:06.153Z' versionId: '8'
Setelah fungsi di-deploy, gunakan URL dari output deployment dan buka aplikasi Anda. URL-nya berbentuk: REGION-PROJECT_ID.cloudfunctions.net/visitme
. Output harus sama dengan saat Anda men-deploy-nya sebelumnya ke App Engine:
Seperti kebanyakan codelab dan video lainnya dalam seri ini, fungsi aplikasi dasar pengukuran tidak berubah. Tujuannya adalah menerapkan satu teknik modernisasi dan membuat aplikasi berfungsi persis seperti sebelumnya, tetapi didukung oleh infrastruktur yang lebih baru, misalnya bermigrasi dari layanan lama App Engine lama ke produk mandiri Cloud penggantinya, atau, seperti dalam kasus tutorial ini, memindahkan aplikasi ke platform serverless Google Cloud lainnya.
7. Ringkasan/Pembersihan
Selamat, Anda telah mengonversi aplikasi App Engine kecil ini menjadi Cloud Function. Kasus penggunaan lain yang sesuai: memecah aplikasi App Engine monolitik besar menjadi serangkaian microservice, masing-masing sebagai Cloud Function. Ini adalah teknik pengembangan yang lebih modern yang menghasilkan model yang lebih "plug-and-play" (a la " JAM stack"). Ini memungkinkan pencampuran dan pencocokan, serta penggunaan kembali kode, yang merupakan dua sasaran. Namun, manfaat lainnya adalah microservice ini akan terus di-debug dari waktu ke waktu, yang berarti kode stabil dan biaya pemeliharaan lebih rendah secara keseluruhan.
Pembersihan
Setelah menyelesaikan codelab ini, Anda dapat menonaktifkan aplikasi App Engine Modul 2 (untuk sementara atau secara permanen) untuk menghindari timbulnya penagihan. Platform App Engine memiliki kuota gratis, jadi Anda tidak akan ditagih selama Anda tidak melebihi tingkat penggunaannya. Hal yang sama berlaku untuk Datastore; lihat halaman harga Cloud Datastore untuk mengetahui detail lebih lanjut.
Men-deploy ke platform seperti App Engine dan Cloud Functions menimbulkan biaya build dan penyimpanan yang kecil. Di beberapa region, Cloud Build memiliki kuota gratisnya sendiri seperti halnya Cloud Storage. Build menggunakan sebagian dari kuota tersebut. Perhatikan penggunaan penyimpanan untuk meminimalkan potensi biaya, terutama jika region Anda tidak memiliki paket gratis tersebut.
Sayangnya, Cloud Functions tidak memiliki tombol "nonaktifkan" aplikasi baru. Cadangkan kode Anda dan hapus fungsinya. Anda selalu dapat men-deploy-nya kembali dengan nama yang sama nanti. Namun, jika Anda tidak akan melanjutkan codelab migrasi lainnya dan ingin menghapus semuanya sepenuhnya, nonaktifkan project Cloud Anda.
Langkah berikutnya
Selain tutorial ini, modul migrasi lain yang dapat dilihat mencakup memasukkan aplikasi App Engine Anda ke dalam container untuk Cloud Run. Lihat link ke codelab Modul 4 dan Modul 5:
- Modul 4: Bermigrasi ke Cloud Run dengan Docker
- Build aplikasi dalam container untuk dijalankan di Cloud Run dengan Docker
- Migrasi ini memungkinkan Anda untuk tetap menggunakan Python 2.
- Modul 5: Bermigrasi ke Cloud Run dengan Cloud Buildpacks
- Build aplikasi dalam container untuk dijalankan di Cloud Run dengan Cloud Buildpacks
- Anda tidak perlu mengetahui apa pun tentang Docker, container, atau
Dockerfile
. - Mengharuskan aplikasi Anda untuk sudah bermigrasi ke Python 3 (Buildpacks tidak mendukung Python 2)
Banyak modul lainnya berfokus untuk menunjukkan kepada developer cara bermigrasi dari layanan paket App Engine ke pengganti mandiri Cloud:
- Modul 2: bermigrasi dari App Engine
ndb
ke Cloud NDB - Modul 7-9: bermigrasi dari tugas push Task Queue App Engine ke Cloud Tasks
- Modul 12-13: bermigrasi dari Memcache App Engine ke Cloud Memorystore
- Modul 15-16: bermigrasi dari Blobstore App Engine ke Cloud Storage
- Modul 18-19: bermigrasi dari Task Queue App Engine (tugas pull) ke Cloud Pub/Sub
Jika containerization telah menjadi bagian dari alur kerja pengembangan aplikasi Anda, terutama jika terdiri dari pipeline CI/CD (continuous integration/continuous delivery atau deployment), sebaiknya lakukan migrasi ke Cloud Run, bukan Cloud Functions. Lihat Modul 4 untuk memasukkan aplikasi Anda ke dalam container dengan Docker, atau Modul 5 untuk melakukannya tanpa container, pengetahuan Docker, atau Dockerfile
. Baik mempertimbangkan Cloud Functions atau Cloud Run, peralihan ke platform serverless lainnya bersifat opsional, dan sebaiknya pertimbangkan opsi terbaik untuk aplikasi dan kasus penggunaan Anda sebelum melakukan perubahan apa pun.
Terlepas dari modul migrasi yang Anda pertimbangkan berikutnya, semua konten Stasiun Migrasi Serverless (codelab, video, kode sumber [jika tersedia]) dapat diakses di repositori open source-nya. README
repo juga memberikan panduan tentang migrasi yang perlu dipertimbangkan dan "urutan" yang relevan Modul Migrasi.
8. Referensi lainnya
Masalah/masukan codelab modul migrasi App Engine
Jika Anda menemukan masalah dengan codelab ini, telusuri masalah Anda terlebih dahulu sebelum mengajukan masalah. Link untuk menelusuri dan membuat masalah baru:
Referensi migrasi
Link ke folder repo untuk Modul 8 (START) dan Modul 9 (FINISH) dapat ditemukan pada tabel di bawah. Link tersebut juga dapat diakses dari repo untuk semua migrasi codelab App Engine yang dapat Anda clone atau download file ZIP.
Codelab | Python 3 |
Sumber daya {i>online<i}
Di bawah ini adalah referensi online yang mungkin relevan untuk tutorial ini:
App Engine
- Dokumentasi App Engine
- Runtime App Engine (lingkungan standar) Python 2
- Runtime App Engine (lingkungan standar) Python 3
- Perbedaan antara Python 2 & 3 runtime App Engine (lingkungan standar)
- Panduan migrasi App Engine (lingkungan standar) Python 2 ke 3
- Informasi harga dan kuota App Engine
- Peluncuran platform App Engine generasi kedua (2018)
- Membandingkan terlebih dahulu & platform generasi kedua
- Dukungan jangka panjang untuk runtime lama
- Repositori contoh migrasi dokumentasi
- Repositori contoh migrasi kontribusi komunitas
Cloud Functions
- Perintah deploy fungsi gcloud
- Informasi harga
- Pengumuman Cloud Functions generasi berikutnya
- Perbedaan antara konsep pertama & fungsi generasi kedua
- Framework Fungsi (pengembangan lokal) petunjuk, dokumen penggunaan, dan repo
- Halaman produk
- Dokumentasi
Informasi Cloud lainnya
- Python di Google Cloud Platform
- Library klien Python Google Cloud
- Google Cloud "Selalu Gratis" tingkat lanjut
- Google Cloud SDK (alat command line
gcloud
) - Semua dokumentasi Google Cloud
Video
- Stasiun Migrasi Serverless
- Ekspedisi Serverless
- Berlangganan Google Cloud Tech
- Berlangganan Google Developers
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.