Bagikan melalui


Memigrasikan aplikasi Spring Boot ke Azure App Service

Panduan ini menjelaskan apa yang harus Anda ketahui ketika Anda ingin memigrasikan aplikasi Spring Boot yang ada ke Azure App Service.

Pra-migrasi

Untuk memastikan keberhasilan migrasi, sebelum memulai, selesaikan langkah-langkah penilaian dan inventaris yang dijelaskan di bagian berikut.

Beralih ke platform yang didukung

App Service menawarkan versi Java SE tertentu. Untuk memastikan kompatibilitas, migrasikan aplikasi Anda ke salah satu versi lingkungannya saat ini yang didukung sebelum Anda melanjutkan salah satu langkah yang tersisa. Pastikan untuk sepenuhnya menguji konfigurasi yang dihasilkan. Gunakan rilis stabil terbaru dari distribusi Linux dalam pengujian tersebut.

Nota

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

Di Azure App Service, biner untuk Java 8 disediakan dari Eclipse Temurin. Untuk Java 11, 17, dan semua rilis LTS Java di masa mendatang, App Service menyediakan Microsoft Build of OpenJDK. Biner ini tersedia untuk diunduh secara gratis di situs-situs berikut:

Inventarisasi sumber daya eksternal

Identifikasi sumber daya eksternal, seperti sumber data, broker pesan JMS, dan URL layanan lainnya. Di 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. Selain itu, periksa variabel lingkungan implementasi produksi untuk pengaturan konfigurasi yang relevan.

Database

Untuk aplikasi Spring Boot, string koneksi biasanya muncul dalam file konfigurasi ketika bergantung pada database eksternal. 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.4.0.5")
      ...
    }

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.

Nota

Microsoft merekomendasikan penggunaan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini, seperti untuk database, cache, olahpesan, atau layanan AI, memerlukan tingkat kepercayaan yang sangat tinggi dalam aplikasi dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya ketika opsi yang lebih aman, seperti identitas terkelola untuk koneksi tanpa kata sandi atau tanpa kunci, tidak layak. Untuk operasi komputer lokal, lebih suka identitas pengguna untuk koneksi tanpa kata sandi atau tanpa kunci.

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=<password>

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: <password>

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

Penyedia identitas

Identifikasi penyedia identitas apa pun yang digunakan oleh aplikasi Anda. Untuk informasi tentang bagaimana penyedia identitas dapat dikonfigurasi, konsultasikan hal berikut:

Semua sumber daya eksternal lainnya

Tidak memungkinkan untuk mendokumentasikan setiap kemungkinan dependensi eksternal dalam panduan ini. Tim Anda bertanggung jawab untuk memverifikasi bahwa setiap dependensi eksternal aplikasi Anda dapat dipenuhi setelah migrasi App Service.

Rahasia inventaris

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, string tersebut kemungkinan akan ditemukan di 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>

Menentukan apakah dan bagaimana sistem berkas digunakan

Setiap penggunaan sistem file pada server aplikasi akan memerlukan konfigurasi ulang atau, dalam kasus yang jarang terjadi, perubahan arsitektur. Anda dapat mengidentifikasi beberapa atau semua skenario berikut.

Konten statis hanya-baca

Jika aplikasi Anda saat ini menyajikan konten statis, Anda memerlukan lokasi alternatif untuk aplikasi tersebut. Anda harus mempertimbangkan untuk memindahkan konten statis ke Azure Blob Storage dan menambahkan Azure Front Door untuk unduhan cepat secara global. Untuk informasi selengkapnya, lihat hosting situs web Statis di Azure Storage dan Mengintegrasikan akun Azure Storage dengan Azure Front Door.

Kasus Khusus

Skenario produksi tertentu mungkin memerlukan perubahan tambahan atau memberlakukan batasan tambahan. Meskipun skenario seperti itu jarang terjadi, penting untuk memastikan bahwa skenario tersebut tidak berlaku pada aplikasi Anda atau telah diselesaikan dengan benar.

Tentukan apakah aplikasi bergantung pada pekerjaan terjadwal

Pekerjaan terjadwal, seperti tugas Quartz Scheduler atau pekerjaan cron, tidak dapat digunakan dengan App Service. App Service 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.

Inventarkan pekerjaan terjadwal apa pun, di dalam atau di luar proses aplikasi.

Tentukan apakah aplikasi Anda berisi kode khusus OS

Jika aplikasi Anda berisi kode apa pun dengan dependensi pada OS host, maka Anda perlu merefaktornya untuk menghapus dependensi tersebut. Misalnya, Anda mungkin perlu mengganti penggunaan / atau \ di jalur sistem file dengan File.Separator atau Paths.get jika aplikasi Anda berjalan di Windows.

Mengidentifikasi semua proses/daemon luar yang berjalan di server produksi

Proses yang berjalan di luar Server Aplikasi, seperti memantau daemon, perlu dimigrasikan di tempat lain atau dihilangkan.

Mengidentifikasi penanganan permintaan non-HTTP atau beberapa port

App Service hanya mendukung satu titik akhir HTTP pada satu port. Jika aplikasi Anda mendengarkan beberapa port atau menerima permintaan menggunakan protokol selain HTTP, jangan gunakan Azure App Service.

Migrasi

Parameterisasi konfigurasi

Pastikan bahwa semua koordinat sumber daya eksternal (seperti string koneksi database) dan pengaturan lain yang dapat disesuaikan dapat dibaca dari variabel lingkungan. Jika Anda memigrasikan Aplikasi Spring Boot, semua pengaturan konfigurasi harus sudah dapat diekstomisasi. Untuk informasi selengkapnya, lihat Konfigurasi Eksternalisasi dalam dokumentasi Spring Boot.

Berikut adalah contoh yang mereferensikan SERVICEBUS_CONNECTION_STRING variabel lingkungan dari file application.properties :

spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000

Menyediakan paket App Service

Dari daftar paket layanan yang tersedia, pilih paket yang spesifikasinya memenuhi atau melebihi perangkat keras produksi saat ini.

Nota

Jika Anda berencana untuk menjalankan penyebaran pementasan/kenari atau menggunakan slot penyebaran, paket App Service harus menyertakan kapasitas tambahan tersebut. Sebaiknya gunakan paket Premium atau yang lebih tinggi untuk aplikasi Java.

Buat paket App Service.

Membuat dan Menyebarkan Aplikasi Web

Anda harus membuat Aplikasi Web pada Paket App Service Anda (memilih "Java SE" sebagai tumpukan runtime) untuk setiap file JAR yang dapat dieksekusi yang ingin Anda jalankan.

Aplikasi Maven

Jika aplikasi Anda dibangun dari file POM Maven, gunakan plugin Webapp untuk Maven untuk membuat Aplikasi Web dan menyebarkan aplikasi Anda. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat aplikasi Java di Azure App Service .

Aplikasi Non-Maven

Jika Anda tidak dapat menggunakan plugin Maven, Anda harus memprovisikan Aplikasi Web melalui mekanisme lain, seperti:

Setelah Aplikasi Web dibuat, gunakan salah satu mekanisme penyebaran yang tersedia untuk menyebarkan aplikasi Anda. Jika memungkinkan, aplikasi Anda harus diunggah ke /home/site/wwwroot/app.jar. Jika Anda tidak ingin mengganti nama JAR menjadi app.jar, Anda dapat mengunggah skrip shell dengan perintah untuk menjalankan JAR Anda. Kemudian tempelkan jalur lengkap ke skrip ini di kotak teks File Startup di bagian Konfigurasi portal. Skrip startup tidak berjalan dari direktori tempatnya berada. Oleh karena itu, selalu gunakan jalur absolut untuk mereferensikan file dalam skrip startup Anda (misalnya: java -jar /home/myapp/myapp.jar ).

Memigrasikan opsi runtime JVM

Jika aplikasi Anda memerlukan opsi runtime tertentu, gunakan mekanisme yang paling tepat untuk menentukannya.

Mengonfigurasi domain dan SSL kustom

Jika aplikasi Anda akan terlihat di domain kustom, Anda harus memetakan aplikasi web Anda ke sana. Untuk informasi, lihat Tutorial: Memetakan nama DNS kustom yang sudah ada ke Azure App Service.

Kemudian, Anda harus mengikat sertifikat SSL untuk domain tersebut ke Aplikasi Web App Service Anda. Untuk informasi selengkapnya, lihat Mengamankan nama DNS kustom dengan pengikatan data TLS/SSL di Azure App Service.

Mengimpor sertifikat backend

Semua sertifikat untuk berkomunikasi dengan sistem backend, seperti database, harus tersedia untuk App Service. Untuk informasi selengkapnya, lihat Menambahkan sertifikat TLS/SSL di Azure App Service.

Memigrasikan koordinat sumber daya eksternal dan pengaturan lainnya

Ikuti langkah-langkah ini untuk memigrasikan string koneksi dan pengaturan lainnya.

Nota

Untuk setiap pengaturan aplikasi Spring Boot yang diparameterkan dengan variabel di bagian Parameterisasi konfigurasi , variabel lingkungan tersebut harus ditentukan dalam konfigurasi aplikasi. Setiap pengaturan aplikasi Spring Boot yang tidak ditentukan secara eksplisit dengan variabel lingkungan masih dapat diubah melalui Konfigurasi Aplikasi. Contohnya:

spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000

Konfigurasi Aplikasi App Service

Memigrasikan pekerjaan terjadwal

Untuk menjalankan pekerjaan terjadwal di Azure, pertimbangkan untuk menggunakan Pemicu Timer untuk Azure Functions. Anda tidak perlu memigrasikan kode pekerjaan itu sendiri ke dalam suatu fungsi. Fungsi ini cukup memanggil URL di aplikasi Anda untuk memicu pekerjaan. Jika eksekusi pekerjaan tersebut harus dipanggil secara dinamis dan/atau dilacak secara terpusat, pertimbangkan untuk menggunakan Spring Batch.

Atau, Anda dapat membuat aplikasi Logika dengan pemicu Pengulangan untuk memanggil URL tanpa menulis kode apa pun di luar aplikasi Anda. Untuk informasi selengkapnya, lihat Gambaran Umum - Apa itu Azure Logic Apps? dan Buat, jadwalkan, dan jalankan tugas dan alur kerja berulang dengan pemicu Pengulangan di Azure Logic Apps.

Nota

Untuk mencegah penggunaan berbahaya, Anda mungkin perlu memastikan bahwa titik akhir pemanggilan pekerjaan memerlukan info masuk. Dalam hal ini, fungsi pemicu perlu memberikan info masuk.

Memigrasikan dan mengaktifkan penyedia identitas

Jika aplikasi Anda memerlukan autentikasi atau otorisasi, pastikan aplikasi dikonfigurasi untuk mengakses Penyedia Identitas dengan menggunakan panduan berikut:

  • 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 Connect untuk mengonfigurasi federasi dengan ID Microsoft Entra. Atau, pertimbangkan untuk menggunakan Spring Security untuk menggunakan penyedia identitas Anda melalui OAuth2/OpenID Koneksi atau SAML.

Mulai ulang dan pengujian awal

Terakhir, Anda harus memulai ulang Aplikasi Web untuk menerapkan semua perubahan konfigurasi. Setelah selesai memulai ulang, verifikasi bahwa aplikasi Anda berjalan dengan benar.

Pasca-migrasi

Sekarang setelah memigrasikan aplikasi Anda ke Azure App Service, Anda harus memverifikasi bahwa aplikasi tersebut berfungsi sesuai harapan. Setelah Anda melakukannya, kami memiliki beberapa rekomendasi untuk Anda yang dapat membuat aplikasi Anda lebih cloud-native.

Rekomendasi