1. Ringkasan
Rangkaian codelab ini (tutorial interaktif dan mandiri) bertujuan untuk membantu developer Java Google App Engine (Standar) memodernisasi aplikasi mereka dengan memandu mereka melalui serangkaian migrasi. Dengan mengikuti langkah-langkah ini, Anda dapat mengupdate aplikasi agar lebih portabel dan memutuskan untuk memasukkannya ke dalam container untuk Cloud Run, layanan induk hosting container Google Cloud ke App Engine, dan layanan hosting container lainnya.
Tutorial ini mengajarkan cara mem-build aplikasi App Engine dalam container untuk di-deploy ke layanan Cloud Run yang terkelola sepenuhnya menggunakan Buildpacks. Buildpack adalah project CNCF yang memungkinkan Anda memindahkan aplikasi langsung dari kode sumber ke gambar yang sangat portabel yang dapat berjalan di cloud apa pun.
Selain mengajarkan langkah-langkah yang diperlukan untuk beralih dari App Engine ke Cloud Run, Anda juga akan mempelajari cara mengupgrade aplikasi App Engine Java 8 ke Java 17.
Jika aplikasi yang ingin Anda migrasikan banyak menggunakan layanan paket lama App Engine, atau fitur khusus App Engine lainnya, panduan Mengakses layanan paket App Engine untuk Java 11/17 mungkin lebih cocok daripada codelab ini.
Anda akan mempelajari cara
- Menggunakan Cloud Shell
- Mengaktifkan Cloud Run, Artifact Registry, dan Cloud Build API
- Memasukkan aplikasi ke dalam container menggunakan Buildpacks di Cloud Build
- Men-deploy image container ke Cloud Run
Yang Anda butuhkan
- Project Google Cloud Platform dengan akun penagihan GCP aktif dan App Engine yang diaktifkan
- Pengetahuan perintah Linux umum yang berfungsi
- Pengetahuan dasar tentang mengembangkan dan men-deploy aplikasi App Engine
- Aplikasi servlet Java 8 yang ingin Anda migrasikan ke Java 17 dan di-deploy ke Cloud Run (ini dapat berupa aplikasi di App Engine atau hanya sumbernya)
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana Anda menilai pengalaman Anda dengan Java?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Latar belakang
Sistem PaaS seperti App Engine dan Cloud Functions memberikan banyak kemudahan bagi tim dan aplikasi Anda, misalnya memungkinkan SysAdmin dan Devops fokus membangun solusi. Dengan platform tanpa server, aplikasi Anda dapat meningkatkan skala secara otomatis sesuai kebutuhan, memperkecil skala hingga nol dengan penagihan bayar per penggunaan untuk membantu mengontrol biaya, dan menggunakan berbagai bahasa pengembangan umum.
Namun, fleksibilitas container juga sangat menarik. Dengan kemampuan untuk memilih bahasa, library apa pun, dan biner apa pun, container memberi Anda yang terbaik dari kedua hal tersebut: kepraktisan tanpa server beserta fleksibilitas container. Inilah yang dimaksud dengan Google Cloud Run.
Mempelajari cara menggunakan Cloud Run tidak termasuk dalam cakupan codelab ini; yang dibahas dalam dokumentasi Cloud Run. Tujuannya di sini adalah agar Anda memahami cara memasukkan aplikasi App Engine ke dalam container untuk Cloud Run (atau layanan lainnya yang dihosting oleh container). Ada beberapa hal yang harus Anda ketahui sebelum melanjutkan, terutama bahwa pengalaman pengguna Anda akan sedikit berbeda.
Dalam codelab ini, Anda akan mempelajari cara membangun dan men-deploy container. Anda akan mempelajari cara memasukkan aplikasi ke dalam container dengan Buildpack, bermigrasi dari konfigurasi App Engine, dan menentukan langkah build untuk Cloud Build. Hal ini akan mengharuskan Anda beralih dari fitur khusus App Engine tertentu. Jika memilih untuk tidak mengikuti jalur ini, Anda tetap dapat mengupgrade ke runtime Java 11/17 sambil menjaga aplikasi Anda tetap di App Engine.
3. Penyiapan/Prakerja
1. Siapkan project
Untuk tutorial ini, Anda akan menggunakan aplikasi contoh dari repositori appengine-java-migration-samples pada project baru. Pastikan project memiliki akun penagihan yang aktif.
Jika Anda ingin memindahkan aplikasi App Engine yang ada ke Cloud Run, Anda dapat menggunakan aplikasi tersebut untuk mengikutinya.
Jalankan perintah berikut untuk mengaktifkan API yang diperlukan untuk project Anda:
gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com
2. Mendapatkan aplikasi contoh dasar pengukuran
Clone aplikasi contoh di komputer Anda atau Cloud Shell, lalu buka folder baseline.
Contoh ini adalah aplikasi Datastore berbasis Java 8 yang ditujukan untuk deployment di App Engine. Ikuti petunjuk di README tentang cara menyiapkan aplikasi ini untuk deployment App Engine.
3. (Opsional) Men-deploy aplikasi dasar pengukuran
Berikut ini hanya diperlukan jika Anda ingin mengonfirmasi bahwa aplikasi berfungsi di App Engine sebelum kami bermigrasi ke Cloud Run.
Lihat langkah-langkah di README.md:
- Menginstal/Membiasakan diri dengan CLI
gcloud
- Melakukan inisialisasi gcloud CLI untuk project Anda dengan
gcloud init
- Membuat project App Engine dengan
gcloud app create
- Men-deploy aplikasi contoh ke App Engine
./mvnw package appengine:deploy -Dapp.projectId=$PROJECT_ID
- Memastikan aplikasi berjalan di App Engine tanpa masalah
4. Membuat repositori Artifact Registry
Setelah memasukkan aplikasi ke dalam container, Anda akan memerlukan tempat untuk mengirim dan menyimpan gambar. Cara yang direkomendasikan untuk melakukannya di Google Cloud adalah dengan Artifact Registry.
Buat repositori bernama migration
dengan gcloud seperti ini:
gcloud artifacts repositories create migration --repository-format=docker \
--description="Docker repository for the migrated app" \
--location="northamerica-northeast1"
Perhatikan bahwa repositori ini menggunakan jenis format docker
, tetapi ada beberapa jenis repositori yang tersedia.
Pada tahap ini, Anda memiliki aplikasi App Engine dasar, dan project Google Cloud Anda siap memigrasikannya ke Cloud Run.
4. Ubah File Aplikasi
Jika aplikasi Anda banyak menggunakan layanan paket lama, konfigurasi, atau fitur khusus App Engine lainnya dari App Engine, sebaiknya Anda terus mengakses layanan tersebut selagi mengupgrade ke runtime baru. Codelab ini menunjukkan jalur migrasi untuk aplikasi yang sudah menggunakan layanan mandiri, atau dapat difaktorkan ulang untuk melakukannya.
1. Mengupgrade ke Java 17
Jika aplikasi Anda menggunakan Java 8, pertimbangkan untuk mengupgrade ke kandidat LTS yang lebih baru seperti 11 atau 17 untuk mengikuti update keamanan dan mendapatkan akses ke fitur bahasa baru.
Mulailah dengan memperbarui properti di pom.xml
untuk menyertakan hal berikut:
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
Ini akan mengatur versi project ke 17, memberi tahu plugin compiler bahwa Anda ingin mengakses fitur bahasa java 17, dan ingin class yang dikompilasi kompatibel dengan JVM Java 17.
2. Termasuk server web
Ada sejumlah perbedaan antara App Engine dan Cloud Run yang perlu dipertimbangkan saat beralih di antara keduanya. Satu perbedaannya adalah saat runtime Java 8 App Engine menyediakan dan mengelola server Jetty untuk aplikasi yang dihostingnya, Cloud Run tidak. Kita akan menggunakan Spring Boot untuk menyediakan server web dan container servlet.
Tambahkan dependensi berikut:
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.6</version>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<version>2.6.6</version>
</dependency>
<!-- ... -->
</dependencies>
Spring Boot menyematkan server Tomcat secara default, tetapi contoh ini akan mengecualikan artefak tersebut dan tetap menggunakan Jetty untuk meminimalkan perbedaan perilaku default setelah migrasi.
3. Penyiapan Sepatu Bot Musim Semi
Meskipun Spring Boot akan dapat menggunakan kembali servlet Anda tanpa modifikasi, dibutuhkan beberapa konfigurasi untuk memastikan servlet tersebut dapat ditemukan.
Buat class MigratedServletApplication.java
berikut di paket com.example.appengine
:
package com.example.appengine;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
@EnableAutoConfiguration
public class MigratedServletApplication {
public static void main(String[] args) {
SpringApplication.run(MigratedServletApplication.class, args);
}
}
Perhatikan bahwa hal ini mencakup anotasi @ServletComponentScan
, yang akan terlihat (dalam paket saat ini secara default) untuk semua @WebServlets
, dan menyediakannya seperti yang diharapkan.
4. Konfigurasi build
Selanjutnya, hapus konfigurasi untuk mengemas aplikasi kita sebagai WAR. Ini tidak akan memerlukan banyak konfigurasi, terutama untuk project yang menggunakan Maven sebagai alat build — karena pengemasan jar adalah perilaku default.
Hapus tag packaging
di file pom.xml
:
<packaging>war</packaging>
Berikutnya, tambahkan spring-boot-maven-plugin
:
<plugins>
<!-- ... -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
<!-- ... -->
</plugins>
5. Bermigrasi dari konfigurasi, layanan, dan dependensi App Engine
Seperti yang disebutkan di awal codelab, Cloud Run dan App Engine dirancang untuk menawarkan pengalaman pengguna yang berbeda. Fitur tertentu yang ditawarkan App Engine—seperti layanan Cron dan Task Queue—perlu dibuat ulang secara manual dan akan dibahas secara lebih mendetail di modul berikutnya.
Aplikasi contoh tidak menggunakan layanan paket lama, tetapi pengguna yang aplikasinya dapat menggunakan panduan berikut:
- Bermigrasi dari layanan paket untuk menemukan layanan mandiri yang sesuai.
- Memigrasikan file konfigurasi XML ke YAML, untuk pengguna yang bermigrasi ke runtime Java 11/17 dan tetap berada di App Engine.
Karena Anda akan men-deploy ke Cloud Run mulai sekarang, appengine-maven-plugin
dapat dihapus:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- can be set w/ -DprojectId=myProjectId on command line -->
<projectId>${app.projectId}</projectId>
<!-- set the GAE version or use "GCLOUD_CONFIG" for an autogenerated GAE version -->
<version>GCLOUD_CONFIG</version>
</configuration>
</plugin>
5. Container & Men-deploy Aplikasi
Pada tahap ini, Anda siap men-deploy aplikasi ke Cloud Run langsung dari kode sumber. Ini adalah opsi yang sangat tepat yang menggunakan Cloud Build di balik layar untuk memberikan pengalaman deployment langsung. Perhatikan bahwa untuk menggunakan fitur ini, Anda memerlukan akun dengan setidaknya salah satu izin berikut, dan telah mengikuti langkah-langkah penyiapan lingkungan ini - atau menggunakan Cloud Shell:
- PeranPemilik
- PeranEditor
- Kumpulan peran berikut ini:
- Peran Cloud Build Editor
- Peran Admin Artifact Registry
- Peran Admin Penyimpanan
- Peran Admin Cloud Run
- Peran Pengguna Akun Layanan
Dengan prasyarat tersebut, cukup jalankan perintah berikut dari direktori sumber Anda:
gcloud run deploy SERVICE --source .
Anda akan diminta melakukan beberapa hal selama menjalankan perintah run deploy, seperti:
- Menyediakan lokasi kode sumber
- Memberikan nama layanan
- Mengaktifkan Cloud Run API
- Memilih wilayah
Setelah merespons permintaan tersebut, proses build dan deploy dimulai, dan selama itu Cloud Build akan melakukan hal berikut:
- {i>zip<i} dan menyimpan sumber Anda di bucket Cloud Storage
- menggunakan buildpack Cloud Native Computing Foundation di latar belakang untuk membuat image
- membuat registry untuk menyimpan image container yang dihasilkan (jika belum ada)
- Dan membuat layanan Cloud Run untuk menghosting aplikasi Anda (jika belum ada)
Setelah proses build dan deploy selesai, Anda akan menerima pesan yang menjelaskan bahwa revisi baru sudah aktif dan melayani 100% traffic.
6. Ringkasan/Pembersihan
Selamat, Anda telah mengupgrade, dalam container, memigrasikan aplikasi, dan aplikasi Anda, yang mengakhiri tutorial ini.
Dari sini, langkah berikutnya adalah mempelajari lebih lanjut fitur keamanan supply chain Software dan CI/CD yang kini dapat Anda deploy dengan Cloud Build:
- Membuat langkah-langkah build kustom dengan Cloud Build
- Membuat dan mengelola Pemicu Build
- Menggunakan pemindaian On-Demand di pipeline Cloud Build
Opsional: Membersihkan dan/atau menonaktifkan layanan
Jika Anda telah men-deploy aplikasi contoh di App Engine selama tutorial ini, jangan lupa untuk menonaktifkan aplikasi tersebut agar tidak dikenai biaya. Saat siap berpindah ke codelab berikutnya, Anda dapat mengaktifkannya kembali. Meskipun aplikasi App Engine dinonaktifkan, aplikasi tersebut tidak akan mendapatkan traffic untuk dikenai biaya, tetapi penggunaan Datastore mungkin dapat ditagih jika melebihi kuota gratisnya, jadi cukup hapus hingga di bawah batas tersebut.
Di sisi lain, jika Anda tidak akan melanjutkan migrasi dan ingin menghapus semuanya sepenuhnya, Anda dapat menghapus layanan atau menonaktifkan project sepenuhnya.
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
- Opsi migrasi untuk memisahkan layanan app engine
- Menyiapkan Pemicu build untuk Cloud Build
- Informasi selengkapnya tentang cara bermigrasi ke Java 11/17
Sumber daya {i>online<i}
Di bawah ini adalah referensi online yang mungkin relevan untuk tutorial ini:
App Engine
- Dokumentasi App Engine
- Informasi harga dan kuota App Engine
- Membandingkan terlebih dahulu & platform generasi kedua
- Dukungan jangka panjang untuk runtime lama
Informasi Cloud lainnya
- Google Cloud "Selalu Gratis" tingkat lanjut
- Google Cloud CLI (
gcloud
CLI) - 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.