Rangkaian codelab ini (tutorial praktik mandiri) bertujuan untuk membantu developer Google App Engine (Standar) memodernisasi aplikasi mereka dengan memandu mereka melalui serangkaian migrasi. Setelah selesai, pengguna dapat membuat aplikasi mereka lebih portabel dengan mem-build aplikasi dalam container secara eksplisit untuk Cloud Run, layanan serupa container-hosting di Google Cloud untuk App Engine, dan layanan container-hosting lainnya.
Tutorial ini mengajarkan cara mem-build aplikasi App Engine dalam container untuk di-deploy ke layanan Cloud Run yang terkelola sepenuhnya menggunakan Docker, platform yang terkenal di industri untuk mengembangkan, mengirim, dan menjalankan aplikasi dalam container. Untuk developer Python 2, tutorial ini dimulai (START) dengan aplikasi contoh Modul 2 Cloud NDB App Engine sementara developer Python 3 START dengan contoh Cloud Datastore Modul 3.
Anda akan mempelajari cara
- Mem-build aplikasi Anda dalam container menggunakan Docker
- Men-deploy image container ke Cloud Run
Yang akan Anda perlukan
- Project Google Cloud Platform dengan:
- Keterampilan Python dasar
- Pengetahuan perintah Linux umum yang berfungsi
- Pengetahuan dasar tentang mengembangkan dan men-deploy aplikasi App Engine
- Direkomendasikan: selesaikan codelab Modul 2 atau codelab Modul 3
- Aplikasi App Engine yang berfungsi siap untuk di-build dalam container
- Python 2: Contoh Cloud NDB Modul 2
- Python 3: Contoh Cloud Datastore Modul 3
Survei
Bagaimana Anda akan menggunakan codelab ini?
Sistem PaaS seperti App Engine dan Cloud Functions memberikan banyak kemudahan bagi tim dan aplikasi Anda. Misalnya, platform tanpa server ini memungkinkan SysAdmin/Devops untuk fokus pada solusi proses build. Aplikasi Anda dapat melakukan penskalaan otomatis sesuai kebutuhan, memperkecil skala hingga nol dengan biaya penagihan per penggunaan yang dapat mengontrol biaya, dan menggunakan berbagai bahasa pengembangan yang umum.
Namun, fleksibilitas container juga menarik, dengan kemampuan untuk memilih bahasa, library, dan biner. Memberi pengguna manfaat terbaik dari kedua keunggulan, kemudahan tanpa server beserta fleksibilitas container, menjadi tujuan utama Google Cloud Run.
Mempelajari cara menggunakan Cloud Run tidak berada dalam cakupan codelab ini. Anda dapat menemukannya di dokumentasi Cloud Run. Tujuannya di sini adalah agar Anda mengetahui cara mem-build aplikasi App Engine dalam container untuk Cloud Run (atau layanan lainnya). Ada beberapa hal yang harus Anda ketahui sebelum melanjutkan, terutama bahwa pengalaman pengguna akan sedikit berbeda, setingkat lebih rendah karena Anda tidak akan lagi mengambil kode aplikasi dan men-deploy-nya.
Sebagai gantinya, Anda harus mempelajari beberapa hal tentang container seperti cara mem-build dan men-deploy-nya. Anda juga harus memutuskan apa yang ingin dimasukkan ke dalam image container, termasuk server web karena Anda tidak akan menggunakan server web App Engine lagi. Jika Anda memilih untuk tidak mengikuti jalur ini, mempertahankan aplikasi di App Engine bukanlah opsi yang buruk.
Dalam tutorial ini, Anda akan mempelajari cara mem-build aplikasi dalam container, mengganti file konfigurasi App Engine dengan konfigurasi container, menentukan apa yang masuk ke dalam container, kemudian menentukan cara memulai aplikasi — banyak dari hal-hal ini dikendalikan secara otomatis oleh App Engine.
Migrasi ini menampilkan langkah-langkah berikut:
- Penyiapan/Prakerja
- Mem-build aplikasi dalam container
- Mengganti file konfigurasi
- Mengubah file aplikasi
Sebelum memulai bagian utama tutorial, mari kita siapkan project, dapatkan kodenya, lalu deploy aplikasi dasar pengukuran sehingga kita tahu bahwa kita memulai dengan kode yang berfungsi.
1. Siapkan project
Jika Anda menyelesaikan codelab Modul 2 atau Modul 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 yang aktif dan App Engine (aplikasi) diaktifkan.
2. Dapatkan aplikasi contoh dasar pengukuran
Salah satu prasyarat untuk codelab ini adalah memiliki aplikasi contoh Modul 2 atau Modul 3 yang berfungsi. Jika Anda tidak memilikinya, selesaikan salah satu tutorial tersebut (link di atas) sebelum melanjutkan ke sini. Sebaliknya, jika Anda sudah tidak asing dengan kontennya, Anda dapat memulai dengan mengambil kode Modul 2 atau 3 di bawah.
Baik Anda menggunakan kode Anda atau kode kami, kode Modul 2 adalah tempat kita akan memulai (START) versi Python 2 pada tutorial ini, dan begitu juga, kode Modul 3 untuk Python 3. Codelab Modul 4 ini akan memandu Anda melalui setiap langkah dan, tergantung pada opsi Anda, Anda akan memiliki kode yang menyerupai salah satu folder repo Modul 4 (FINISH) saat selesai.
- Python 2 (aplikasi Cloud NDB)
- START: Kode Modul 2
- FINISH: Kode Modul 4
- Python 3 (aplikasi Cloud Datastore)
- START: Kode Modul 3
- FINISH: Kode Modul 4
- Seluruh repo (untuk melakukan clone atau mendownload ZIP)
File awal (START) di direktori Python 2 Modul 2 (kode Anda atau kode kami) akan terlihat seperti ini:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
Jika menggunakan kode Modul 2 (2.x) milik Anda sendiri, Anda juga akan memiliki folder lib
. lib
maupun appengine_config.py
tidak digunakan untuk Python 3, tempat kode awal (START) Modul 3 (3.x) 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 mem-build-nya dalam container.
Docker merupakan platform containerization standar dalam industri saat ini. Satu tantangan dalam penggunaannya, seperti yang disebutkan sebelumnya, adalah Docker memerlukan upaya untuk menyeleksi Dockerfile
yang efisien, yaitu file konfigurasi yang menentukan cara image container Anda di-build. Buildpacks, di sisi lain, memerlukan hanya sedikit usaha karena menggunakan intropeksi untuk menentukan dependensi aplikasi Anda, membuat container Buildpacks menjadi efisien untuk aplikasi Anda.
Anda berada di tempat yang tepat jika sudah mengetahui tentang container, Docker, dan ingin mempelajari lebih lanjut tentang membuild aplikasi App Engine dalam container untuk Cloud Run. Jangan ragu untuk juga melakukan codelab Modul 5 (sama dengan modul ini tetapi dengan Cloud Buildpacks) setelahnya. Aplikasi contoh barebone kami cukup ringan untuk menghindari beberapa masalah Dockerfile
yang disebutkan di atas.
Langkah-langkah migrasi meliputi mengganti file konfigurasi App Engine dan menentukan cara aplikasi Anda harus dimulai. Di bawah ini adalah tabel yang merangkum file konfigurasi yang diharapkan untuk setiap jenis platform. Membandingkan kolom App Engine dengan kolom Docker (dan secara opsional Buildpack):
Deskripsi | App Engine | Docker | Buildpacks |
Konfigurasi umum |
|
| ( |
Library pihak ke-3 |
|
|
|
Konfigurasi pihak ke-3 |
| (T/A) | (T/A) |
Startup | (T/A) atau |
|
|
Abaikan file |
|
|
|
Setelah dibuild dalam container, aplikasi dapat di-deploy ke Cloud Run. Opsi platform container Google Cloud lainnya mencakup Compute Engine, GKE, dan Anthos.
Konfigurasi umum
Melakukan migrasi dari App Engine berarti mengganti app.yaml
dengan Dockerfile
yang menguraikan cara membuild dan menjalankan container. App Engine secara otomatis memulai aplikasi Anda, tetapi Cloud Run tidak. Inilah kegunaan perintah Dockerfile
ENTRYPOINT
dan CMD
. Pelajari lebih lanjut Dockerfile
dari halaman dokumen Cloud Run ini serta lihat contoh Dockerfile
yang menghasilkan gunicorn
.
Alternatif untuk menggunakan ENTRYPOINT
atau CMD
di Dockerfile
adalah dengan menggunakan Procfile
. Terakhir, .dockerignore
membantu memfilter file non-aplikasi untuk menjaga ukuran container tetap rendah. Informasi lainnya terkait hal ini akan segera tersedia.
Hapus app.yaml
dan buat Dockerfile
app.yaml
tidak digunakan dalam container, jadi hapus sekarang. File konfigurasi container adalah Dockerfile
, dan aplikasi contoh kami hanya memerlukan file minimal. Buat Dockerfile
Anda dengan konten ini, ganti NNN
dengan 2
atau 3
, bergantung pada versi Python yang Anda gunakan:
FROM python:NNN-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Sebagian besar Dockerfile
menentukan cara membuat container kecuali ENTRYPOINT
yang menentukan cara memulai container, dalam hal ini memanggil python main.py
untuk mengeksekusi server pengembangan Flask. Jika Anda baru menggunakan Docker, perintah FROM
menunjukkan image dasar untuk memulai, dan "ramping" mengacu pada distribusi Python minimal. Pelajari lebih lanjut dari halaman image Python Docker.
Set tengah perintah membuat direktori kerja (/app
), menyalin dalam file aplikasi, kemudian menjalankan pip install
untuk menghadirkan library pihak ke-3 ke dalam container. WORKDIR
menggabungkan perintah mkdir
dan cd
Linux; baca selengkapnya tentang hal ini di dokumentasi WORKDIR
. Perintah COPY
dan RUN
sudah jelas.
Library pihak ke-3
File requirements.txt
dapat tetap sama; Flask harus ada di file tersebut bersama library klien Datastore Anda (Cloud Datastore atau Cloud NDB). Jika Anda ingin menggunakan server HTTP lain yang sesuai dengan standar WSGI seperti Gunicorn — versi saat ini pada saat penulisan tutorial ini adalah 20.0.4 — lalu tambahkan gunicorn==20.0.4
ke requirements.txt
.
Konfigurasi pihak ke-3
Developer Python 2 App Engine mengetahui bahwa library pihak ketiga disalin ke dalam folder lib
, direferensikan di requirements.txt
, dijadikan item dalam app.yaml
, dan didukung oleh appengine_config.py
. Container, seperti aplikasi App Engine Python 3, hanya menggunakan requirements.txt
, sehingga semua item lainnya dapat dihapus, artinya jika Anda memiliki aplikasi App Engine 2.x, hapus appengine_config.py
dan folder lib
apa pun sekarang.
Startup
Pengguna Python 2 tidak memulai server web App Engine, namun saat berpindah ke container, Anda harus melakukannya. Hal ini dilakukan dengan menambahkan perintah CMD
atau ENTRYPOINT
di Dockerfile
Anda yang menentukan cara memulai aplikasi, dan hal ini dijelaskan di bawah dengan cara yang sama seperti untuk pengguna Python 3.
Pengguna Python 3 memiliki opsi untuk mengonversi file app.yaml
mereka agar memiliki perintah entrypoint
, bukan script: auto
di bagian handlers
. Jika Anda menggunakan entrypoint
di Python 3 app.yaml
, akan terlihat seperti ini:
runtime: python38
entrypoint: python main.py
Perintah entrypoint
memberi tahu App Engine cara memulai server Anda. Anda dapat memindahkannya hampir langsung ke Dockerfile
(atau Procfile
jika menggunakan Buildpacks [lihat Modul 5] untuk mem-build aplikasi Anda dalam container). Merangkum ketika perintah entrypoint akan berada di antara kedua platform:
- Docker: baris dalam
Dockerfile
:ENTRYPOINT ["python", "main.py"]
- Buildpacks: baris dalam
Procfile
:web: python main.py
Menggunakan server pengembangan Flask tidak masalah untuk pengujian, tetapi jika menggunakan server produksi seperti gunicorn
untuk aplikasi Anda, pastikan untuk mengarahkan perintah ENTRYPOINT
atau CMD
ke aplikasi seperti di contoh Panduan Memulai Cloud Run.
Abaikan file
Sebaiknya Anda membuat file .dockerignore
untuk memangkas ukuran container dan tidak mengacaukan image container dengan file berlebihan seperti berikut:
*.md
*.pyc
*.pyo
.git/
.gitignore
__pycache__
File aplikasi
Semua aplikasi Modul 2 atau Modul 3 sepenuhnya kompatibel dengan Python 2-3, yang berarti tidak ada perubahan pada komponen inti main.py
; kami hanya akan menambahkan beberapa baris kode startup. Tambahkan sepasang baris di bagian bawah main.py
untuk memulai server pengembangan karena Cloud Run memerlukan port 8080 agar dapat terbuka sehingga dapat memanggil aplikasi Anda:
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
Setelah konfigurasi Docker dan pembaruan file sumber selesai, Anda siap untuk menjalankannya di Cloud Run. Sebelum itu, mari kita bahas sebentar tentang layanan.
Layanan vs. Aplikasi
Meskipun App Engine terutama dibuat untuk menghosting aplikasi, App Engine juga merupakan platform untuk menghosting layanan web atau aplikasi yang terdiri dari kumpulan microservice. Dalam Cloud Run, semuanya adalah layanan, baik itu layanan yang sebenarnya atau aplikasi yang memiliki antarmuka web. Jadi, pertimbangkan penggunaannya sebagai deployment layanan, bukan aplikasi.
Kecuali jika aplikasi App Engine terdiri dari beberapa layanan, Anda tidak perlu melakukan penamaan apa pun saat men-deploy aplikasi. Ini mengubah Cloud Run karena Anda perlu membuat nama layanan. Sementara domain appspot.com
App Engine menampilkan project ID-nya, misalnya, https://PROJECT_ID.appspot.com
, dan mungkin singkatan ID region, misalnya, http://PROJECT_ID.REGION_ID.r.appspot.com
.
Namun, domain untuk layanan Cloud Run menampilkan nama layanan, singkatan ID region, dan hash, tetapi bukan project ID-nya, misalnya, https://SVC_NAME-HASH-REG_ABBR.a.run.app
. Intinya, mulailah memikirkan nama layanan!
Deploy layanan
Jalankan perintah di bawah ini untuk mem-build image container Anda dan men-deploy ke Cloud Run. Jika diminta, pilih region Anda dan izinkan koneksi yang tidak diautentikasi untuk memudahkan pengujian dan pilih region yang sesuai jika SVC_NAME
adalah nama layanan yang Anda deploy.
$ gcloud beta run deploy SVC_NAME --source . Please choose a target platform: [1] Cloud Run (fully managed) [2] Cloud Run for Anthos deployed on Google Cloud [3] Cloud Run for Anthos deployed on VMware [4] cancel Please enter your numeric choice: 1 To specify the platform yourself, pass `--platform managed`. Or, to make this the default target platform, run `gcloud config set run/platform managed`. Please specify a region: [1] asia-east1 [2] asia-east2 [3] asia-northeast1 [4] asia-northeast2 [5] asia-northeast3 [6] asia-south1 [7] asia-southeast1 [8] asia-southeast2 [9] australia-southeast1 [10] europe-north1 [11] europe-west1 [12] europe-west2 [13] europe-west3 [14] europe-west4 [15] europe-west6 [16] northamerica-northeast1 [17] southamerica-east1 [18] us-central1 [19] us-east1 [20] us-east4 [21] us-west1 [22] us-west2 [23] us-west3 [24] us-west4 [25] cancel Please enter your numeric choice: <select your numeric region choice> To make this the default region, run `gcloud config set run/region REGION`. Allow unauthenticated invocations to [SVC_NAME] (y/N)? y Building using Dockerfile and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying new service... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... Deploying Revision. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [SVC_NAME] revision [SVC_NAME-00001-vos] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Kunjungi URL yang ditentukan di browser Anda untuk mengonfirmasi bahwa deployment berhasil.
Seperti yang ditunjukkan perintah gcloud
, pengguna dapat menetapkan berbagai setelan default untuk mengurangi output dan interaktivitas seperti yang ditunjukkan di atas. Misalnya, untuk menghindari semua interaksi, Anda dapat menggunakan perintah deploy one-liner berikut:
$ gcloud beta run deploy SVC_NAME --source . --platform managed --region REGION --allow-unauthenticated
Jika Anda menggunakan perintah ini, pastikan untuk memilih nama layanan yang sama SVC_NAME
dan nama REGION
yang diinginkan, bukan pilihan menu yang diindeks seperti yang kami lakukan secara interaktif di atas.
Pastikan bahwa aplikasi berfungsi di Cloud Run seperti di App Engine. Jika Anda beralih ke rangkaian ini tanpa melakukan codelab sebelumnya, aplikasi itu sendiri tidak akan berubah. Aplikasi akan mendaftarkan semua kunjungan ke halaman web utama (/
) dan terlihat seperti ini setelah Anda mengunjungi situs cukup waktu:
Kode Anda sekarang seharusnya cocok dengan yang ada di folder repo Modul 4, baik 2.x atau 3.x. Selamat, Anda telah menyelesaikan codelab Modul 4 ini.
Opsional: Pembersihan
Bagaimana dengan pembersihan agar tidak ditagih hingga Anda siap untuk beralih ke codelab migrasi berikutnya? Karena sekarang Anda menggunakan produk lain, pastikan untuk meninjau panduan harga Cloud Run.
Opsional: Nonaktifkan layanan
Jika Anda belum siap untuk membuka tutorial berikutnya, nonaktifkan layanan untuk menghindari biaya tambahan. Jika sudah siap untuk beralih ke codelab berikutnya, Anda dapat mengaktifkannya kembali. Meskipun dinonaktifkan, aplikasi tidak akan mendapatkan traffic yang dikenakan biaya, namun hal lain yang dapat ditagih adalah penggunaan Datastore jika melebihi kuota gratis, jadi cukup hapus hingga berada di bawah batas tersebut.
Di sisi lain, jika Anda tidak akan melanjutkan migrasi dan ingin menghapus semuanya, Anda dapat menghapus layanan atau mematikan project sepenuhnya.
Langkah berikutnya
Selamat, Anda telah mem-build aplikasi dalam container, yang mengakhiri tutorial ini! Dari sini, langkah berikutnya adalah mempelajari cara melakukan hal yang sama dengan Cloud Buildpacks di codelab Modul 5 (link di bawah) atau melakukan migrasi App Engine lainnya:
- Melakukan migrasi ke Python 3 jika Anda belum melakukannya. Aplikasi contoh sudah kompatibel dengan 2.x dan 3.x. Jadi, satu-satunya perubahan adalah bagi pengguna Docker untuk memperbarui
Dockerfile
agar menggunakan image Python 3. - Modul 5: Melakukan Migrasi 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
- Anda harus sudah memigrasikan aplikasi ke Python 3
- Modul 7: Task Queues Push App Engine (diperlukan jika Anda menggunakan Task Queues [push])
- Tambahkan tugas push
taskqueue
App Engine ke aplikasi Modul 1 - Siapkan pengguna untuk bermigrasi ke Cloud Tasks di Modul 8
- Tambahkan tugas push
- Modul 3:
- Memodernisasi akses Datastore dari Cloud NDB ke Cloud Datastore
- Ini adalah library yang digunakan untuk aplikasi Python 3 App Engine dan aplikasi non-App Engine
- Modul 6: Melakukan Migrasi ke Cloud Firestore
- Melakukan migrasi ke Cloud Firestore untuk mengakses fitur Firebase
- Meskipun Cloud Firestore mendukung Python 2, codelab ini hanya tersedia di Python 3.
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:
- Pelacak masalah untuk codelab migrasi App Engine
Resource migrasi
Link ke folder repo untuk Modul 2 dan 3 (START) dan Modul 4 (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 2 | Python 3 |
(kode) | ||
(kode) | ||
Modul 4 |
Resource App Engine dan Cloud Run
Berikut adalah resource tambahan terkait migrasi khusus ini:
- Container
- Umum