Memigrasikan aplikasi JBoss EAP ke JBoss EAP di Azure App Service

Panduan ini menjelaskan apa yang harus Anda ketahui saat Anda ingin memigrasikan aplikasi JBoss EAP yang ada untuk dijalankan di JBoss EAP dalam instans Azure App Service.

Pra-migrasi

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

Kapasitas server inventaris

Dokumentasikan perangkat keras (memori, CPU, disk) dari server produksi saat ini dan jumlah permintaan rata-rata dan puncak, serta pemanfaatan sumber daya. Anda akan memerlukan informasi ini terlepas dari jalur migrasi yang Anda pilih. Ini berguna, misalnya, untuk membantu memandu pemilihan ukuran VM di kumpulan simpul Anda, jumlah memori yang akan digunakan oleh kontainer, dan berapa banyak CPU yang berbagi kebutuhan kontainer.

Anda dapat mengubah ukuran kumpulan simpul di AKS. Untuk mempelajari caranya, lihat Mengubah ukuran kumpulan simpul di Azure Kubernetes Service (AKS).

Inventaris semua rahasia

Periksa semua properti dan file konfigurasi di server produksi untuk rahasia dan kata sandi apa pun. Pastikan untuk memeriksa jboss-web.xml di file WAR Anda. File konfigurasi yang berisi kata sandi atau info masuk juga dapat ditemukan di dalam aplikasi Anda.

Pertimbangkan untuk menyimpan rahasia tersebut di Azure KeyVault. Untuk informasi selengkapnya, kunjungi konsep dasar Azure Key Vault.

Anda dapat menggunakan rahasia Key Vault dalam instans App Service dengan referensi Key Vault. Referensi Key Vault memungkinkan Anda menggunakan rahasia dalam aplikasi Anda sambil menjaga mereka tetap aman dan dienkripsi saat istirahat. Untuk mempelajari selengkapnya, lihat Menggunakan referensi Key Vault untuk App Service dan Azure Functions.

Inventaris semua sertifikat

Dokumentasikan semua sertifikat yang digunakan untuk titik akhir SSL publik. Anda bisa melihat semua sertifikat di server produksi dengan menjalankan perintah berikut ini:

keytool -list -v -keystore <path to keystore>

Memvalidasi bahwa versi Java yang didukung berfungsi dengan benar

JBoss EAP di Azure VM memerlukan versi Java yang didukung. Untuk panduan tentang versi JDK mana yang akan digunakan, lihat Konfigurasi yang Didukung dalam dokumentasi Red Hat.

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

Sumber daya eksternal inventaris

Sumber daya eksternal, seperti sumber data, broker pesan JMS, dan lainnya disuntikkan melalui Java Naming and Directory Interface (JNDI). Beberapa sumber daya tersebut mungkin memerlukan migrasi atau konfigurasi ulang.

Di dalam aplikasi Anda

Periksa file WEB-INF/jboss-web.xml dan/atau WEB-INF/web.xml. Carilah elemen <Resource> dalam elemen <Context>.

Datasource

Datasource adalah sumber daya JNDI dengan atribut type yang diatur ke javax.sql.DataSource. Untuk setiap datasource, dokumentasikan informasi berikut:

  • Apa nama sumber datanya?
  • Apa konfigurasi kumpulan koneksinya?
  • Di mana saya dapat menemukan file JAR driver JDBC?

Untuk informasi selengkapnya, lihat Tentang JBoss EAP Datasources dalam dokumentasi JBoss EAP.

Semua sumber daya eksternal lainnya

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

Menentukan apakah replikasi sesi digunakan

Jika aplikasi Anda bergantung pada replikasi sesi, Anda harus mengubah aplikasi untuk menghapus dependensi ini. App Service tidak mengizinkan instans untuk berkomunikasi langsung satu sama lain.

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. Sistem file dapat digunakan oleh modul JBoss EAP atau dengan kode aplikasi Anda. Anda dapat mengidentifikasi beberapa atau semua skenario yang dijelaskan di bagian berikut.

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. Anda juga dapat langsung menyebarkan konten statis ke aplikasi dalam paket Azure Spring Apps Enterprise. Untuk informasi selengkapnya, lihat Menyebarkan file statis web.

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. Anda juga dapat langsung menyebarkan konten statis ke aplikasi dalam paket Azure Spring Apps Enterprise. Untuk informasi selengkapnya, lihat Menyebarkan file statis web.

Konten dinamis atau internal

Untuk file yang sering ditulis dan dibaca oleh aplikasi Anda (seperti file data sementara), atau file statis yang hanya terlihat oleh aplikasi Anda, Anda dapat menggunakan penyimpanan file lokal yang terkait dengan paket layanan aplikasi. Untuk informasi selengkapnya, lihat Fungsionalitas sistem operasi di Azure App Service dan Memahami sistem file Azure App Service.

Menentukan apakah aplikasi Anda bergantung pada pekerjaan terjadwal atau tidak

Pekerjaan terjadwal, seperti tugas Quartz Scheduler atau pekerjaan cron Unix, TIDAK boleh digunakan dengan Azure App Service. Azure 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.

Inventarisasi tugas terjadwal apa pun yang berjalan di server produksi, di dalam atau di luar kode aplikasi Anda.

Menentukan apakah koneksi ke lokal diperlukan

Jika aplikasi Anda perlu mengakses salah satu layanan lokal Anda, Anda harus menyediakan salah satu layanan konektivitas Azure. Untuk informasi selengkapnya, lihat Memilih solusi untuk menyambungkan jaringan lokal ke Azure. Atau, Anda harus memfaktor ulang aplikasi untuk menggunakan API yang tersedia untuk umum yang diekspos sumber daya lokal Anda.

Menentukan apakah Antrean atau Topik Java Message Service (JMS) sedang digunakan

Jika aplikasi Anda menggunakan JMS Queues atau Topik, Anda harus memigrasikannya ke server JMS yang dihosting secara eksternal. Azure Service Bus dan Advanced Message Queuing Protocol (AMQP) dapat menjadi strategi migrasi yang bagus bagi mereka yang menggunakan JMS. Untuk informasi selengkapnya, lihat Menggunakan JMS dengan Azure Service Bus dan AMQP 1.0.

Jika penyimpanan persisten JMS telah dikonfigurasi, Anda harus menangkap konfigurasinya dan menerapkannya setelah migrasi.

Menentukan apakah konektor JCA sedang digunakan

Jika aplikasi Anda menggunakan konektor JCA, validasi bahwa Anda dapat menggunakan konektor JCA di JBoss EAP. Jika Anda dapat menggunakan konektor JCA pada JBoss EAP, maka agar tersedia, Anda harus menambahkan JAR ke classpath server dan menempatkan file konfigurasi yang diperlukan di lokasi yang benar dalam direktori server JBoss EAP.

Menentukan apakah JAAS sedang digunakan

Jika aplikasi Anda menggunakan JAAS, Anda harus mengetahui bagaimana JAAS tersebut dikonfigurasi. Jika konfigurasi tersebut menggunakan database, Anda dapat mengonversikannya menjadi domain JAAS di JBoss EAP. Jika konfigurasi tersebut menggunakan implementasi khusus, Anda harus memvalidasi bahwa konfigurasi tersebut dapat digunakan pada JBoss EAP.

Menentukan apakah aplikasi Anda menggunakan Adaptor Sumber Daya

Jika aplikasi Anda memerlukan Adaptor Sumber Daya (RA), aplikasi tersebut harus kompatibel dengan JBoss EAP. Tentukan apakah RA berfungsi dengan baik pada instans mandiri JBoss EAP dengan menyebarkan RA ke server dan mengonfigurasikannya dengan benar. Jika RA berfungsi dengan baik, Anda harus menambahkan JAR ke classpath server App Service dan menempatkan file konfigurasi yang diperlukan di lokasi yang benar dalam direktori server JBoss EAP agar tersedia.

Menentukan apakah aplikasi Anda terdiri dari beberapa WAR

Jika aplikasi Anda terdiri dari beberapa WAR, Anda harus memperlakukan masing-masing WAR tersebut sebagai aplikasi terpisah dan melalui panduan ini untuk masing-masing WAR.

Menentukan apakah aplikasi Anda dikemas sebagai EAR

Jika aplikasi Anda dikemas sebagai file EAR, pastikan untuk memeriksa file application.xml dan mengambil konfigurasi.

Catatan

Jika Anda ingin dapat menskalakan setiap aplikasi web Anda secara independen untuk penggunaan sumber daya App Service dengan lebih baik, Anda harus memecah EAR menjadi aplikasi web terpisah.

Identifikasi semua proses dan daemon luar yang berjalan di server produksi

Jika Anda memiliki proses yang berjalan di luar server aplikasi, seperti memantau daemon, Anda harus menghilangkannya atau memigrasikannya di tempat lain.

Melakukan pengujian di tempat

Sebelum membuat gambar kontainer Anda, migrasikan aplikasi Anda ke versi JDK dan JBoss EAP yang ingin Anda gunakan di App Service. Uji aplikasi secara menyeluruh untuk memastikan kompatibilitas dan performa.

Catatan fitur JBoss EAP di App Service

Saat menggunakan JBoss EAP di App Service, pastikan untuk mempertimbangkan catatan berikut.

  • Konsol manajemen JBoss EAP: Konsol web JBoss tidak terekspos di App Service. Sebagai gantinya, portal Microsoft Azure menyediakan API manajemen untuk aplikasi Anda, dan Anda harus menyebarkannya menggunakan Azure CLI, Plugin Azure Maven, atau alat pengembang Azure lainnya.

  • Transaksi: Instans aplikasi dijalankan dengan cara tanpa status, sehingga API Transaksi saat ini tidak didukung. Untuk informasi selengkapnya, lihat Mengelola transaksi di JBoss EAP dalam dokumentasi Red Hat.

  • Mode domain terkelola: Dalam lingkungan produksi multi-server, mode Domain Terkelola di JBoss EAP menawarkan kemampuan terkelola terpusat. Namun dengan JBoss EAP pada App Service, platform App Service bertanggung jawab atas konfigurasi dan manajemen instans server Anda. App Service menghilangkan kebutuhan akan mode domain terkelola JBoss EAP. Mode domain adalah pilihan yang baik untuk penyebaran multi-server berbasis mesin virtual. Untuk informasi selengkapnya, lihat Tentang domain terkelola di dokumentasi Red Hat.

  • Pengklusteran server-ke-server: Mulai 15 Maret 2022, penyebaran berkluster JBoss EAP didukung dalam Pratinjau Umum. Dukungan ini berarti Anda tidak lagi harus menghapus fitur berikut dari aplikasi Anda sebelum dapat menyebarkannya ke App Service:

    • Buncis sesi stateful.
    • Transaksi terdistribusi.
    • Fitur serupa yang memerlukan komunikasi instans ke instans atau ketersediaan tinggi.

    Untuk informasi selengkapnya, lihat pengumuman rilis dan pengklusteran di bagian JBoss EAP di Mengonfigurasi aplikasi Java untuk Azure App Service.

Migration

Perangkat Migrasi Red Hat untuk Aplikasi

The Red Hat Migration Toolkit untuk Aplikasi adalah ekstensi gratis untuk Visual Studio Code. Ekstensi ini menganalisis kode dan konfigurasi aplikasi Anda guna memberikan rekomendasi untuk bermigrasi ke cloud dari lokal. Untuk informasi selengkapnya, lihat Gambaran umum Peralatan Migrasi untuk aplikasi.

Isi panduan ini akan membantu Anda mengatasi komponen lain dari perjalanan migrasi, seperti memilih tipe Paket App Service yang benar, mengeksternalisasi keadaan sesi Anda, dan menggunakan Azure untuk mengelola instans EAP Anda, alih-alih antarmuka Manajemen JBoss.

Provisikan Azure App Service untuk runtime JBoss EAP

Gunakan perintah berikut untuk membuat grup sumber daya dan Paket Azure App Service. Setelah Paket App Service dibuat, paket aplikasi web Linux dibuat menggunakan runtime JBoss EAP. Anda dapat membuat situs JBoss EAP hanya di tingkatan Paket App Service PremiumV3 dan IsolatedV2.

Pastikan variabel lingkungan yang ditentukan memiliki nilai yang sesuai.

Catatan

PremiumV3 dan IsolatedV2 keduanya memenuhi syarat untuk harga Instans Cadangan, yang dapat mengurangi biaya Anda. Untuk informasi selengkapnya tentang tingkatan Paket App Service dan harga Instans Cadangan, lihat Harga App Service.

az group create --resource-group $resourceGroup --location eastus
az acr create --resource-group $resourceGroup --name $acrName --sku Standard
az appservice plan create \
    --resource-group $resourceGroup \
    --name $jbossAppService \
    --is-linux \
    --sku P1V2
az webapp create \
    --resource-group $resourceGroup \
    --name $jbossWebApp \
    --plan $jbossAppServicePlan \
    --runtime "JBOSSEAP|7-java8"
    #  Or use "JBOSSEAP|7-java11" if you're using Java 11

Membangun aplikasi

Buat aplikasi menggunakan perintah Maven berikut.

mvn clean install -DskipTests

Menyebarkan aplikasi

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 .

Untuk mengotomatiskan penyebaran aplikasi JBoss EAP, Anda dapat menggunakan Tugas Azure Pipelines untuk Aplikasi Web atau Tindakan GitHub untuk penyebaran ke Azure WebApp.

Menyiapkan sumber data

Ada tiga langkah inti saat mendaftarkan sumber data dengan JBoss EAP: mengunggah driver JDBC, menambah driver JDBC sebagai modul, dan mendaftarkan modul. Untuk informasi selengkapnya, lihat Manajemen Datasources dalam dokumentasi JBoss EAP. Azure App Service adalah layanan hosting tanpa status, sehingga perintah konfigurasi untuk menambahkan dan mendaftarkan modul sumber data harus ditulis dan diterapkan saat kontainer dimulai.

Untuk menyiapkan sumber data, gunakan langkah-langkah berikut.

  1. Dapatkan driver JDBC database Anda.

  2. Buat file definisi modul XML untuk driver JDBC. Contoh yang ditunjukkan di bawah adalah definisi modul untuk PostgreSQL. Pastikan untuk mengganti nilai resource-root path dengan jalur ke driver JDBC yang Anda gunakan.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT: REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. Masukkan perintah JBoss CLI Anda ke dalam file yang diberi namajboss-cli-commands.cli. Perintah JBoss harus menambah modul dan mendaftarkannya sebagai sumber data. Contoh di bawah menunjukkan perintah CLI JBoss untuk PostgreSQL.

    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. Buat skrip startup yang disebut startup_script.sh yang memanggil perintah CLI JBoss. Contoh di bawah ini menunjukkan cara memanggil file jboss-cli-commands.cli Anda. Nantinya, Anda akan mengonfigurasi App Service untuk menjalankan skrip ini ketika instans dimulai.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Menggunakan klien FTP pilihan Anda, unggah driver JDBC Anda, jboss-cli-commands.cli, startup_script., dan definisi modul ke /site/deployments/tools/.

  6. Konfigurasikan situs Anda untuk menjalankan startup_script.sh saat kontainer dimulai. Di portal Microsoft Azure, navigasikan ke Konfigurasi > Pengaturan Umum > Perintah Startup. Atur bidang perintah startup ke /home/site/deployments/tools/startup_script.sh, lalu pilih Simpan.

  7. Hidupkan ulang aplikasi web, tindakan tersebut akan membuatnya menjalankan skrip konfigurasi.

  8. Perbarui konfigurasi sumber data JTA untuk aplikasi Anda. Buka file src/main/resources/META-INF/persistence.xml untuk aplikasi Anda dan temukan elemennya <jta-data-source>. Ganti isinya seperti yang ditunjukkan di sini:

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    

Membangun aplikasi

Buat aplikasi menggunakan perintah Maven berikut.

mvn clean install -DskipTests

Menyebarkan aplikasi

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 .

Untuk mengotomatiskan penyebaran aplikasi JBoss EAP, Anda dapat menggunakan Tugas Azure Pipelines untuk Aplikasi Web atau Tindakan GitHub untuk penyebaran ke Azure WebApp.

Pasca-migrasi

Sekarang setelah Anda 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 lebih cloud-native.

Rekomendasi