Modul 5: Bermigrasi dari Google App Engine ke Cloud Run dengan Cloud Buildpacks

1. Ringkasan

Rangkaian codelab ini (tutorial interaktif dan 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 Cloud Buildpacks, yang merupakan alternatif Docker. Cloud Buildpacks memasukkan aplikasi Anda ke dalam container tanpa perlu mengelola file Dockerfile atau bahkan mengetahui apa pun tentang Docker.

Codelab ini ditujukan untuk developer Python 2 App Engine yang telah memindahkan aplikasi mereka dari layanan bawaan asli dan mentransfernya ke Python 3, serta yang sekarang ingin menjalankannya di container. Codelab dimulai dengan aplikasi Python 3 Modul 2 atau Modul 3 yang sudah selesai.

Anda akan mempelajari cara

  • Memasukkan aplikasi ke dalam container menggunakan Cloud Buildpacks
  • Men-deploy image container ke Cloud Run

Yang akan Anda perlukan

Survei

Bagaimana Anda akan menggunakan codelab ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

2. Latar belakang

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 memasukkan aplikasi ke dalam container, menghapus file konfigurasi App Engine, mengelola server web, termasuk cara memulai aplikasi.

Migrasi ini menampilkan langkah-langkah berikut:

  1. Penyiapan/Prakerja
  2. Mem-build aplikasi dalam container
    • Mengganti file konfigurasi
    • Mengubah file aplikasi

3. Penyiapan/Prakerja

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 3 yang berfungsi. Jika Anda tidak memilikinya, sebaiknya selesaikan salah satu tutorial (tautan di atas) sebelum melanjutkan ke sini. Atau, jika Anda sudah terbiasa dengan kontennya, Anda dapat memulai dengan mengambil salah satu folder kodenya di bawah.

Baik Anda menggunakan milik Anda atau kami, di situlah tutorial ini DIMULAI. Codelab ini memandu Anda melakukan migrasi, dan pada saat Anda selesai, sebagian besar akan cocok dengan yang ada di folder repo Module 5 FINISH.

Direktori file START (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:

  1. Biasakan kembali diri Anda dengan alat command-line gcloud
  2. Deploy kembali aplikasi contoh dengan gcloud app deploy
  3. Konfirmasikan bahwa aplikasi berjalan di App Engine tanpa masalah

Setelah berhasil menjalankan langkah-langkah tersebut, Anda siap untuk mem-build-nya dalam container.

4. Mem-build aplikasi 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 ingin melewatkan pembelajaran tentang Docker, dan ingin memasukkan aplikasi App Engine Anda ke dalam container agar berjalan di Cloud Run atau platform hosting container lainnya. Jika tertarik untuk mempelajari cara menggunakan Docker untuk containerization aplikasi, Anda dapat melakukan codelab Modul 4 setelah menyelesaikan codelab ini. Docker identik dengan aplikasi ini, tetapi menggunakan Docker agar Anda dapat lebih memahami cara mengelola image container.

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 Buildpacks (dan secara opsional Docker):

Deskripsi

App Engine

Docker

Buildpack

Konfigurasi umum

app.yaml

Dockerfile

(service.yaml)

Library pihak ke-3

requirements.txt

requirements.txt

requirements.txt

Konfigurasi pihak ke-3

app.yaml (plus appengine_config.py dan lib [khusus 2.x])

(T/A)

(T/A)

Startup

(T/A) atau app.yaml (jika entrypoint digunakan)

Dockerfile

Procfile

Abaikan file

.gcloudignore dan .gitignore

.gcloudignore, .gitignore, dan .dockerignore

.gcloudignore dan .gitignore

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

App Engine secara otomatis memulai aplikasi Anda, tetapi Cloud Run tidak. Procfile memiliki peran yang serupa dengan perintah app.yaml entrypoint. Untuk aplikasi contoh, Procfile akan mengeksekusi python main.py untuk memulai server pengembangan Flask. Anda juga dapat menggunakan server web produksi seperti gunicorn jika diinginkan, dan jika Anda menggunakannya, pastikan untuk menambahkannya ke requirements.txt. Pelajari lebih lanjut cara men-deploy dari kode sumber menggunakan Buildpacks dari halaman dokumen Cloud Run ini.

Anda hanya perlu memindahkan perintah app.yaml entrypoint ke Procfile. Jika Anda belum memilikinya, gunakan server pengembangan Flask untuk saat ini karena ini hanyalah aplikasi pengujian contoh untuk membiasakan pengguna dengan migrasi ini. Aplikasi Anda akan menjadi perintah startup tertentu yang paling Anda ketahui. Di balik layar, layanan Cloud Run membuat service.yaml yang terlihat/bertindak lebih seperti app.yaml. Anda dapat melihat service.yaml yang dibuat secara otomatis dengan membuka link seperti ini, tetapi untuk layanan Anda SVC_NAME dan REGION: https://console.cloud.google.com/run/detail/REGION/SVC_NAME/yaml/view.

Library pihak ke-3

File requirements.txt tidak perlu diubah; Flask harus ada 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

Buildpacks tidak mendukung Python 2, jadi kita tidak membahasnya di sini. Aplikasi Python 3 yang berjalan di container di Cloud Run mirip dengan aplikasi App Engine Python 3 di library pihak ketiga tersebut harus ditentukan di requirements.txt.

Memulai

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 Procfile. Merangkum di mana perintah titik masuk akan berada di antara kedua platform: Ini diterjemahkan secara langsung ke bawah; juga menunjukkan Docker yang setara sebagai FYI:

  • Buildpacks: baris dalam Procfile: web: python main.py
  • Docker: baris dalam Dockerfile: ENTRYPOINT ["python", "main.py"]

Untuk pengujian dan staging, server pengembangan Flask dapat dijalankan dari Python seperti yang kita lakukan di atas dengan mudah, tetapi developer dapat memilih sesuatu yang lebih canggih untuk produksi seperti contoh Panduan Memulai Cloud Run yang menggunakan gunicorn.

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

5. Mem-build dan men-deploy

Setelah konfigurasi App Engine Anda diganti dengan Buildpacks 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 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 Buildpacks and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM].
  ✓ Creating Revision...
  ✓ Routing traffic...
Done.
Service [SVC_NAME] revision [SVC_NAME-00014-soc] 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 menu ini, pastikan untuk memilih nama layanan SVC_NAME yang sama dan nama REGION yang diinginkan, bukan pilihan menu yang diindeks seperti yang kita lakukan secara interaktif di atas.

6. Ringkasan/Pembersihan

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:

aplikasi visitme

Kode Anda sekarang seharusnya cocok dengan yang ada di folder repo Modul 5. Selamat, Anda telah menyelesaikan codelab Modul 5 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 Docker di codelab Modul 4 (link di bawah) atau melakukan migrasi App Engine lainnya:

  • Modul 4: Bermigrasi ke Cloud Run dengan Docker
    • Build aplikasi dalam container untuk dijalankan di Cloud Run dengan Docker
    • Memungkinkan Anda tetap berada di Python 2
  • 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
  • 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.

7. 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 2 dan 3 (START) serta Modul 5 (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

Modul 2

kode

(kode)

Modul 3

(kode)

kode

Modul 5

(T/A)

kode

Resource App Engine dan Cloud Run

Berikut adalah resource tambahan terkait migrasi khusus ini: