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:

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:

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.

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:

  1. Navigasi ke Instans Azure Spring Apps dan pilih Aplikasi.
  2. Pilih layanan yang akan dikonfigurasi.
  3. Pilih Konfigurasi.
  4. Masukkan variabel yang akan dikonfigurasi.
  5. Pilih Simpan.

Spring Cloud App Configuration Settings

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:

    1. Di dalam direktori src/main/resources aplikasi, buat file bootstrap.yml dengan konten berikut:

        spring:
          application:
            name: <your-application-name>
      
    2. 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.

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

    4. Terapkan dan dorong perubahan ini ke repositori Git.

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