Memigrasikan aplikasi Spring Boot ke Azure Spring Apps
Catatan
Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.
Panduan ini menjelaskan apa yang harus Anda ketahui ketika Anda ingin memigrasikan aplikasi Spring Boot yang ada untuk dijalankan di Azure Spring Apps.
Pra-migrasi
Untuk memastikan keberhasilan migrasi, sebelum memulai, selesaikan langkah-langkah penilaian dan inventaris yang dijelaskan di bagian berikut.
Jika Anda tidak dapat memenuhi persyaratan pra-migrasi ini, lihat panduan migrasi pendamping berikut:
- Memigrasi aplikasi JAR yang dapat dijalankan ke kontainer di Azure Kubernetes Service (panduan yang direncanakan)
- Memigrasikan Aplikasi JAR yang dapat dieksekusi ke Azure Virtual Machines (panduan yang direncanakan)
Memeriksa komponen aplikasi
Mengidentifikasi kondisi lokal
Di lingkungan PaaS, tidak ada aplikasi yang dijamin akan berjalan tepat satu kali pada waktu tertentu. Bahkan jika Anda mengonfigurasi aplikasi untuk dijalankan dalam satu instans, instans duplikat dapat dibuat dalam kasus berikut:
- Aplikasi harus dipindahkan ke host fisik akibat kegagalan atau pembaruan sistem.
- Aplikasi sedang diperbarui.
Dalam salah satu kasus ini, instans asli akan tetap berjalan hingga instans baru selesai diaktifkan. Ini memiliki implikasi yang berpotensi signifikan berikut untuk aplikasi Anda:
- Tidak ada database tunggal yang dapat dijamin untuk benar-benar tunggal.
- Setiap data yang belum dipertahankan ke penyimpanan luar kemungkinan akan hilang jauh lebih cepat dibandingkan pada satu server fisik atau VM.
Sebelum bermigrasi ke Azure Spring Apps, pastikan kode Anda tidak berisi status lokal yang tidak boleh hilang atau diduplikasi. Jika terdapat kondisi lokal, ubah kode untuk menyimpan kondisi tersebut di luar aplikasi. Aplikasi siap cloud biasanya menyimpan kondisi aplikasi di lokasi seperti berikut:
- Azure Cache untuk Redis
- Azure Cosmos DB
- Database eksternal lainnya, seperti Azure SQL, Azure Database for MySQL, atau Azure Database for PostgreSQL.
Menentukan apakah dan bagaimana sistem berkas digunakan
Temukan instans tempat layanan Anda menulis ke dan/atau membaca dari sistem file lokal. Identifikasi tempat file jangka pendek/sementara ditulis dan dibaca serta tempat file berumur panjang ditulis dan dibaca.
Catatan
Azure Spring Apps menyediakan penyimpanan sementara 5 GB per instans Azure Spring Apps, yang dipasang di /tmp
. Jika file sementara ditulis melebihi batas tersebut atau ke lokasi yang berbeda, perubahan kode akan diperlukan.
Konten statis baca-saja
Jika aplikasi Anda saat ini menyajikan konten statis, Anda memerlukan lokasi alternatif untuk itu. Anda mungkin ingin mempertimbangkan untuk memindahkan konten statik ke Azure Blob Storage dan menambahkan Azure CDN untuk unduhan secepat kilat secara global. Untuk informasi selengkapnya, lihat Hosting situs web statis di Penyimpanan Azure dan Mulai Cepat: Mengintegrasikan akun Microsoft Azure Storage dengan Azure CDN.
Konten statis yang diterbitkan secara dinamis
Jika aplikasi Anda memungkinkan konten statis yang diunggah/ diproduksi oleh aplikasi Anda tetapi tidak dapat diubah setelah pembuatannya, Anda dapat menggunakan Azure Blob Storage dan Azure CDN seperti yang dijelaskan di atas, dengan Azure Function untuk menangani unggahan dan refresh CDN. Kami telah menyediakan implementasi sampel untuk penggunaan Anda di Pengunggahan dan pramuat CDN konten statis dengan Azure Functions.
Menentukan apakah terdapat layanan berisi kode khusus OS
Jika aplikasi Anda berisi kode apa pun dengan dependensi pada OS host, Anda harus melakukan refaktor untuk menghapus dependensi tersebut. Misalnya, Anda mungkin perlu mengganti penggunaan /
atau \
di jalur sistem file dengan File.Separator
atau Paths.get
.
Beralih ke platform yang didukung
Azure Spring Apps menawarkan versi Java tertentu dan versi Tertentu dari Spring Boot dan Spring Cloud. Untuk memastikan kompatibilitas, pertama-tama migrasikan aplikasi Anda ke salah satu versi Java yang didukung di lingkungannya saat ini, kemudian lanjutkan dengan langkah-langkah migrasi yang tersisa. Pastikan untuk sepenuhnya menguji konfigurasi yang dihasilkan. Gunakan rilis stabil terbaru dari distribusi Linux dalam pengujian tersebut.
Catatan
Validasi ini sangat penting jika server Anda saat ini berjalan pada JDK yang tidak didukung (seperti Oracle JDK atau IBM OpenJ9).
Untuk mendapatkan versi Java Anda saat ini, masuk ke server produksi Anda dan jalankan perintah berikut:
java -version
Untuk versi Java, Spring Boot, dan Spring Cloud yang didukung, serta instruksi untuk memperbarui, lihat Menyiapkan aplikasi untuk penyebaran di Azure Spring Apps.
Menentukan apakah aplikasi Anda bergantung pada pekerjaan terjadwal atau tidak
Pekerjaan terjadwal, seperti tugas Quartz Scheduler atau pekerjaan Unix cron, TIDAK boleh digunakan dengan Azure Spring Apps. Azure Spring Apps tidak akan mencegah Anda menyebarkan aplikasi yang berisi tugas terjadwal secara internal. Namun, apabila skala aplikasi Anda diperluas, pekerjaan terjadwal yang sama dapat berjalan lebih dari satu kali per periode yang dijadwalkan. Situasi ini dapat menyebabkan konsekuensi yang tidak diinginkan.
Inventarisasi tugas terjadwal apa pun yang berjalan di server produksi, di dalam atau di luar kode aplikasi Anda.
Mengidentifikasi versi Spring Boot
Periksa dependensi setiap aplikasi yang dimigrasikan untuk menentukan versi Spring Boot yang dimiliki.
Maven
Dalam proyek Maven, versi Spring Boot biasanya ditemukan dalam elemen <parent>
file POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Gradle
Dalam proyek Gradle, versi Spring Boot biasanya akan ditemukan di bagian plugins
, sebagai versi plugin org.springframework.boot
:
plugins {
id 'org.springframework.boot' version '2.7.10'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'java'
}
Untuk aplikasi apa pun yang menggunakan Spring Boot 1.x, ikuti Panduan migrasi Spring Boot 2.0 untuk memperbaruinya ke versi Spring Boot yang didukung. Untuk versi yang didukung, lihat bagian Versi Spring Boot dan Spring Cloud di Menyiapkan aplikasi untuk penyebaran di Azure Spring Apps.
Mengidentifikasi solusi agregasi log
Identifikasi solusi agregasi log apa pun yang digunakan oleh aplikasi yang Anda migrasikan. Anda perlu mengonfigurasi pengaturan diagnostik dalam migrasi untuk membuat peristiwa yang dicatat tersedia untuk dikonsumsi. Untuk informasi selengkapnya, lihat bagian Memastikan pengelogan konsol dan mengonfigurasi pengaturan diagnostik.
Mengidentifikasi agen manajemen performa aplikasi (APM)
Identifikasi agen pemantauan performa aplikasi apa pun yang digunakan dengan aplikasi Anda. Azure Spring Apps mendukung integrasi dengan Application Insights, New Relic, Elastic APM, Dynatrace, dan AppDynamics. Jika aplikasi menggunakan APM yang didukung, konfigurasikan integrasi dalam migrasi. Jika aplikasi tidak menggunakan APM yang didukung, pertimbangkan untuk menggunakan Application Insights sebagai gantinya. Untuk informasi selengkapnya, lihat bagian Migrasi .
Sumber daya eksternal inventaris
Identifikasi sumber daya eksternal, seperti sumber data, broker pesan JMS, dan URL layanan lainnya. Dalam aplikasi Spring Boot, Anda biasanya dapat menemukan konfigurasi untuk sumber daya tersebut di folder src/main/directory, dalam file yang biasanya disebut application.properties atau application.yml.
Database
Untuk database SQL, identifikasi string koneksi.
Untuk aplikasi Spring Boot, string koneksi biasanya muncul dalam file konfigurasi.
Berikut adalah contoh dari file application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Berikut adalah contoh dari file application.yaml:
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Lihat Dokumentasi Data Spring untuk skenario konfigurasi yang lebih mungkin:
Broker pesan JMS
Identifikasi broker atau broker yang digunakan dengan melihat manifes build (biasanya, filepom.xml atau build.gradle ) untuk dependensi yang relevan.
Misalnya, aplikasi Spring Boot menggunakan ActiveMQ biasanya akan berisi dependensi ini dalam file pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Aplikasi Spring Boot menggunakan broker komersial biasanya berisi dependensi langsung pada pustaka driver JMS broker. Berikut adalah contoh dari file build.gradle:
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.0.4.0")
...
}
Setelah Anda mengidentifikasi broker atau broker yang digunakan, temukan pengaturan yang sesuai. Dalam aplikasi Spring Boot, Anda biasanya dapat menemukannya di file application.properties dan application.yml di direktori aplikasi.
Berikut adalah contoh ActiveMQ dari file application.properties:
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=tryandguess
Untuk informasi selengkapnya tentang konfigurasi ActiveMQ, lihat dokumentasi pesan Spring Boot.
Berikut adalah contoh IBM MQ dari file application.yaml:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: big$ecr3t
Untuk informasi selengkapnya tentang konfigurasi IBM MQ, lihat dokumentasi komponen IBM MQ Spring.
Mengidentifikasi cache eksternal
Identifikasi cache eksternal yang digunakan. Sering kali, Redis digunakan melalui Spring Data Redis. Untuk informasi konfigurasi, lihat dokumentasi Spring Data Redis.
Tentukan jika data sesi sedang di-cache melalui Sesi Spring dengan mencari konfigurasi masing-masing (di Java atau XML).
IdP
Identifikasi penyedia identitas apa pun yang digunakan oleh aplikasi Anda. Untuk informasi tentang bagaimana penyedia identitas dapat dikonfigurasi, konsultasikan hal berikut:
- Untuk konfigurasi OAuth2, lihat Referensi Keamanan Spring.
- Untuk konfigurasi Keamanan Spring Auth0, lihat Dokumentasi Keamanan Spring Auth0.
- Untuk konfigurasi Keamanan Spring PingFederate, lihat Instruksi PingFederate Auth0.
Identifikasi klien yang mengandalkan port non-standar
Azure Spring Apps menimpa server.port
pengaturan dalam aplikasi yang disebarkan. Apabila terdapat klien dari klien yang bergantung pada aplikasi yang tersedia di port selain 443, Anda perlu memodifikasinya.
Semua sumber daya eksternal lainnya
Tidak memungkinkan bagi panduan ini untuk mendokumentasikan setiap kemungkinan dependensi eksternal. Setelah migrasi, Anda bertanggung jawab untuk memverifikasi bahwa Anda dapat memenuhi setiap dependensi eksternal aplikasi Anda.
Sumber dan rahasia konfigurasi inventaris
Menginventariskan kata sandi dan string aman
Periksa semua properti dan file konfigurasi dan semua variabel lingkungan pada penyebaran produksi untuk setiap string rahasia dan kata sandi. Dalam aplikasi Spring Boot, Anda biasanya dapat menemukan string tersebut di file application.properties atau application.yml.
Sertifikat inventaris
Dokumentasikan semua sertifikat yang digunakan untuk titik akhir SSL publik atau komunikasi dengan database backend dan sistem lainnya. Anda bisa melihat semua sertifikat di server produksi dengan menjalankan perintah berikut ini:
keytool -list -v -keystore <path to keystore>
Memeriksa arsitektur penyebaran
Mendokumentasikan persyaratan perangkat keras untuk setiap layanan
Dokumentasikan informasi berikut untuk aplikasi Spring Boot Anda:
- Jumlah instans yang berjalan.
- Jumlah CPU yang dialokasikan untuk setiap instans.
- Jumlah RAM yang dialokasikan untuk setiap instans.
Mendokumentasikan geo-replikasi/distribusi
Tentukan apakah instans aplikasi Spring Boot Anda saat ini didistribusikan di antara beberapa wilayah atau pusat data. Dokumentasikan persyaratan waktu aktif/SLA untuk aplikasi yang Anda migrasikan.
Migration
Membuat instans dan aplikasi Azure Spring Apps
Provisikan instans Azure Spring Apps di langganan Azure Anda, jika belum ada. Kemudian, buat aplikasi di sana. Untuk informasi selengkapnya, lihat Mulai Cepat: Sebarkan aplikasi pertama Anda ke Azure Spring Apps.
Memastikan pengelogan konsol dan mengonfigurasi pengaturan diagnostik
Konfigurasikan pengelogan Anda sehingga semua output dialihkan ke konsol dan bukan ke file.
Setelah aplikasi disebarkan ke Azure Spring Apps, tambahkan pengaturan diagnostik untuk membuat peristiwa yang dicatat tersedia untuk dikonsumsi, misalnya melalui Azure Monitor Log Analytics.
Tumpukan LogStash/ELK
Jika Anda menggunakan LogStash/ELK Stack untuk agregasi log, konfigurasikan pengaturan diagnostik untuk mengalirkan output konsol ke Azure Event Hub. Kemudian, gunakan Plugin LogStash EventHub untuk menyerap peristiwa yang masuk ke LogStash.
Splunk
Jika Anda menggunakan Splunk untuk agregasi log, konfigurasikan pengaturan diagnostik untuk mengalirkan output konsol ke Azure Blob Storage. Lalu, gunakan Add-on Splunk untuk Microsoft Cloud Services untuk menyerap peristiwa yang masuk ke Splunk.
Mengonfigurasi penyimpanan persisten
Jika ada bagian dari aplikasi yang membaca atau menulis ke sistem file lokal, Anda harus mengonfigurasi penyimpanan persisten untuk mengganti sistem file lokal. Untuk informasi selengkapnya, lihat Menggunakan penyimpanan persisten bawaan di Azure Spring Apps.
Anda harus menulis file sementara apa pun ke direktori /tmp
. Untuk independensi OS, Anda bisa mendapatkan direktori ini dengan menggunakan System.getProperty("java.io.tmpdir")
. Anda juga dapat menggunakan java.nio.Files::createTempFile
untuk membuat file sementara.
Memigrasikan semua sertifikat ke KeyVault
Azure Spring Apps tidak menyediakan akses ke keystore JRE, jadi Anda harus memigrasikan sertifikat ke Azure KeyVault, dan mengubah kode aplikasi untuk mengakses sertifikat di KeyVault. Untuk informasi selengkapnya, lihat Memulai dengan sertifikat Key Vault dan Pustaka klien Azure Key Vault Certificate untuk Java.
Mengonfigurasi integrasi manajemen performa aplikasi (APM)
Azure Spring Apps menawarkan integrasi APM berikut. Ikuti tautan untuk mengaktifkan APM yang Anda butuhkan.
- Agen Dalam Proses Application Insights Java
- Agen Java APM Elastis
- Dynatrace Java OneAgent
- AppDynamics Java Agent
- Agen New Relic Java
Jika aplikasi Anda tidak menggunakan APM yang didukung, pertimbangkan untuk menggunakan Application Insights sebagai gantinya. Azure Spring Apps menawarkan integrasi mendalam dengan Application Insights untuk manajemen performa dan respons real time terhadap penyimpangan.
Menonaktifkan klien metrik dan titik akhir di aplikasi Anda
Hapus metrik apa pun yang digunakan klien atau titik akhir metrik apa pun yang diekspos dalam aplikasi Anda.
Menyebarkan aplikasi
Sebarkan setiap layanan mikro yang dimigrasikan (tidak termasuk server Spring Cloud Config dan Registry), seperti yang dijelaskan dalam Mulai Cepat: Sebarkan aplikasi pertama Anda ke Azure Spring Apps.
Mengonfigurasi rahasia per layanan dan pengaturan eksternal
Anda dapat menginjeksi pengaturan konfigurasi per layanan apa pun ke setiap layanan sebagai variabel lingkungan. Gunakan langkah-langkah berikut di portal Azure:
- Navigasi ke Instans Azure Spring Apps dan pilih Aplikasi.
- Pilih layanan yang akan dikonfigurasi.
- Pilih Konfigurasi.
- Masukkan variabel yang akan dikonfigurasi.
- Pilih Simpan.
Memigrasikan dan mengaktifkan penyedia identitas
Jika salah satu aplikasi Spring Cloud memerlukan autentikasi atau otorisasi, pastikan aplikasi tersebut dikonfigurasi untuk mengakses penyedia identitas:
- Jika IdP adalah ID Microsoft Entra, tidak ada perubahan yang diperlukan.
- Jika penyedia identitas adalah forest Active Directory lokal, pertimbangkan untuk menerapkan solusi identitas hibrid dengan ID Microsoft Entra. Untuk informasi selengkapnya, lihat Dokumentasi identitas hibrid.
- Jika penyedia identitas adalah solusi lokal lain, seperti PingFederate, lihat Penginstalan kustom topik Microsoft Entra Koneksi untuk mengonfigurasi federasi dengan ID Microsoft Entra. Atau, pertimbangkan untuk menggunakan Spring Security untuk menggunakan penyedia identitas Anda melalui OAuth2/OpenID Koneksi atau SAML.
Mengekspos aplikasi
Secara default, aplikasi yang disebarkan ke Azure Spring Apps tidak terlihat secara eksternal. Anda dapat mengekspos aplikasi Anda dengan membuatnya publik dengan perintah berikut:
az spring app update --name <application name> --is-public true
Lewati langkah ini jika Anda menggunakan atau berniat menggunakan Spring Cloud Gateway. Untuk informasi selengkapnya, lihat bagian berikut.
Pasca-migrasi
Sekarang setelah Anda menyelesaikan migrasi, verifikasi bahwa aplikasi Anda berfungsi sesuai harapan. Kemudian, Anda dapat membuat aplikasi Anda lebih cloud-native dengan menggunakan rekomendasi berikut.
Pertimbangkan untuk mengaktifkan aplikasi Anda untuk bekerja dengan Spring Cloud Registry. Ini akan memungkinkan aplikasi Anda ditemukan secara dinamis oleh aplikasi dan klien Spring lainnya yang disebarkan. Untuk informasi selengkapnya, lihat Menyiapkan aplikasi untuk penyebaran di Azure Spring Apps. Kemudian, ubah klien aplikasi apa pun untuk menggunakan penyeimbang Beban Klien Spring. Hal ini memungkinkan klien mendapatkan alamat dari semua contoh aplikasi yang berjalan dan menemukan instans yang berfungsi jika instans lain menjadi rusak atau tidak responsif. Untuk informasi selengkapnya, lihat Tips Spring: Spring Cloud Load Balancer di Blog Spring.
Alih-alih membuat aplikasi Anda menjadi publik, pertimbangkan untuk menambahkan instans Spring Cloud Gateway. Spring Cloud Gateway menyediakan satu titik akhir untuk semua aplikasi yang disebarkan di instans Azure Spring Apps Anda. Jika Spring Cloud Gateway sudah digunakan, pastikan gateway tersebut dikonfigurasi untuk merutekan lalu lintas ke aplikasi yang baru Anda gunakan.
Pertimbangkan untuk menambahkan server Spring Cloud Config untuk mengelola dan mengontrol konfigurasi versi secara terpusat untuk semua aplikasi Spring Cloud Anda. Pertama, buat repositori Git untuk menampung konfigurasi dan mengonfigurasi instans Azure Spring Apps untuk menggunakannya. Untuk informasi selengkapnya, lihat Menyiapkan instans Spring Cloud Config Server untuk layanan Anda. Kemudian, migrasikan konfigurasi Anda menggunakan langkah-langkah berikut:
Di dalam direktori src/main/resources aplikasi, buat file bootstrap.yml dengan konten berikut:
spring: application: name: <your-application-name>
Dalam konfigurasi repositori Git, buat file <your-application-name>.yml, yang mana
your-application-name
sama seperti pada langkah sebelumnya. Pindahkan pengaturan dari file application.yml di src/main/resources ke file baru yang baru saja Anda buat. Jika pengaturan sebelumnya berada dalam file .properties, konversi ke YAML terlebih dahulu. Anda dapat menemukan alat online atau plugin IntelliJ untuk melakukan konversi ini.Buat file application.yml di direktori di atas. Anda dapat menggunakan file ini untuk menentukan pengaturan dan sumber daya yang akan dibagikan di antara semua aplikasi pada instans Azure Spring Apps. Pengaturan tersebut biasanya mencakup sumber data, pengaturan pengelogan, konfigurasi Spring Boot Actuator, dan lainnya.
Terapkan dan dorong perubahan ini ke repositori Git.
Hapus file application.properties atau application.yml dari aplikasi.
Pertimbangkan untuk menambahkan alur penyebaran untuk penyebaran otomatis dan konsisten. Instruksi tersedia untuk Azure Pipelines, untuk GitHub Actions, dan untuk Jenkins.
Pertimbangkan untuk menggunakan penyebaran penahapan untuk menguji perubahan kode dalam produksi sebelum kode tersebut tersedia untuk beberapa atau semua pengguna akhir Anda. Untuk informasi selengkapnya, lihat Menyiapkan staging environment di Azure Spring Apps.
Pertimbangkan untuk menambahkan pengikatan layanan untuk menyambungkan aplikasi Anda ke database Azure yang didukung. Pengikatan layanan ini akan menghilangkan kebutuhan Anda untuk memberikan informasi koneksi, termasuk info masuk, ke aplikasi Spring Cloud Anda.
Pertimbangkan untuk menggunakan Azure Application Insights untuk memantau performa dan interaksi aplikasi Anda. Untuk informasi selengkapnya, lihat Agen Proses Java Application Insights di Azure Spring Apps.
Pertimbangkan untuk menambahkan aturan peringatan Azure Monitor dan grup tindakan untuk mendeteksi dan menangani kondisi menyimpang dengan cepat. Untuk informasi selengkapnya, lihat Tutorial: Memantau sumber daya Spring Cloud menggunakan peringatan dan grup tindakan.
Pertimbangkan untuk mereplikasi penyebaran Azure Spring Apps di wilayah lain untuk latensi yang lebih rendah dan keandalan dan toleransi kesalahan yang lebih tinggi. Gunakan Azure Traffic Manager untuk menyeimbangkan muatan di antara penyebaran atau gunakan Azure Front Door untuk menambahkan pembongkaran SSL dan Web Application Firewall dengan perlindungan DDoS.
Jika replikasi geografis tidak diperlukan, pertimbangkan untuk menambahkan Azure Application Gateway untuk menambahkan pembongkaran SSL dan Web Application Firewall dengan perlindungan DDoS.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk