Bagikan melalui


Memigrasikan aplikasi Tomcat ke Azure Container Apps

Panduan ini memandu Anda melalui proses migrasi aplikasi Tomcat yang ada ke Azure Container Apps. Ini mencakup penilaian pra-migrasi, migrasi itu sendiri, dan pengoptimalan pascamigrasi.

Prasyarat

  • Sebuah langganan Azure. Jika Anda tidak memilikinya, buat akun gratis.
  • Azure CLI terinstal, atau akses ke portal Microsoft Azure.
  • Keakraban dengan administrasi Apache Tomcat, kemasan WAR, dan kontainer Docker.
  • Versi JDK yang didukung (8, 11, 17, atau 21). Untuk informasi selengkapnya, lihat Gambaran umum Java di Azure Container Apps.
  • Docker (opsional - hanya diperlukan jika Anda membuat gambar secara lokal).

penilaian pra-migrasi

Sebelum Anda memulai migrasi, selesaikan langkah-langkah penilaian dan inventori yang dijelaskan di bagian berikut.

Inventarisasi sumber daya eksternal

Anda menyuntikkan sumber daya eksternal, seperti sumber data, broker pesan JMS, dan lainnya, dengan menggunakan Java Naming dan Directory Interface (JNDI). Beberapa sumber daya ini mungkin memerlukan migrasi atau konfigurasi ulang.

Di dalam aplikasi Anda

Periksa file META-INF/context.xml . Cari elemen <Resource> di dalam elemen <Context>.

Pada server aplikasi

Periksa $CATALINA_BASE/conf/context.xml dan $CATALINA_BASE/conf/server.xml files. Periksa juga file .xml di direktori $CATALINA_BASE/conf/<engine-name>/<host-name> .

Dalam file context.xml, Anda menjelaskan sumber daya JNDI dengan menggunakan elemen <Resource> di dalam elemen <Context> pada tingkat atas.

Dalam file server.xml, Anda mendeskripsikan sumber daya JNDI dengan menggunakan elemen <Resource> di dalam elemen <GlobalNamingResources>.

Sumber data

Sumber data merupakan sumber daya JNDI dengan atribut type diatur ke javax.sql.DataSource. Untuk setiap sumber data, dokumentasikan informasi berikut:

  • Apa nama sumber datanya?
  • Apa konfigurasi kumpulan koneksi?
  • Di mana file JAR driver JDBC?

Untuk informasi selengkapnya, lihat PANDUAN Sumber Data JNDI dalam dokumentasi Tomcat.

Semua sumber daya eksternal lainnya

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

Rahasia dan sertifikat inventori

Kata sandi dan string aman

Periksa semua properti dan file konfigurasi di server produksi untuk string dan kata sandi rahasia apa pun. Pastikan untuk memeriksa server.xml dan context.xml di $CATALINA_BASE/conf. Anda mungkin juga menemukan file konfigurasi yang berisi kata sandi atau kredensial di dalam aplikasi Anda, termasuk file META-INF/context.xml dan, untuk aplikasi Spring Boot, application.properties , atau file application.yml .

Certificates

Dokumentasikan semua sertifikat yang digunakan untuk titik akhir SSL publik atau komunikasi dengan database backend dan sistem lainnya. Anda dapat melihat semua sertifikat di server produksi dengan menjalankan perintah berikut:

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

Meninjau penggunaan sistem file

Identifikasi kasus apa pun di mana layanan Anda membaca atau menulis ke sistem file lokal. Perhatikan file mana yang bersifat jangka pendek atau sementara dan file mana yang berumur panjang.

Azure Container Apps menawarkan beberapa jenis penyimpanan. Dengan menggunakan penyimpanan sementara, Anda dapat membaca dan menulis data sementara dalam kontainer atau replika yang sedang berjalan. Dengan menggunakan Azure Files, Anda dapat menyediakan penyimpanan permanen yang dapat dibagikan oleh beberapa kontainer. Untuk informasi selengkapnya, lihat Gunakan pemasangan penyimpanan di Azure Container Apps.

Jika aplikasi Anda menyajikan konten statis baca-saja, pertimbangkan untuk memindahkannya ke Azure Blob Storage dan menambahkan Azure CDN untuk distribusi global. Untuk informasi selengkapnya, lihat hosting situs web Static di Azure Storage dan Quickstart: Mengintegrasikan akun Azure storage dengan Azure CDN.

Jika aplikasi Anda menangani konten statis yang diterbitkan secara dinamis (konten yang diunggah atau dihasilkan yang tidak berubah setelah pembuatan), Anda dapat mengintegrasikan Azure Blob Storage dan Azure CDN. Anda juga dapat menggunakan Fungsi Azure untuk mengelola unggahan dan memicu refresh CDN. Untuk implementasi sampel, lihat Mengunggah dan pra-muat konten statis CDN dengan Azure Functions.

Jika aplikasi Anda saat ini menyajikan konten statis dari direktori webapps/ Tomcat, rencanakan untuk memindahkan konten tersebut ke solusi penyimpanan eksternal sebagai bagian dari migrasi.

Periksa kode khusus OS

Jika aplikasi Anda berisi kode dengan dependensi pada OS host, refaktor untuk menghapus dependensi tersebut. Misalnya, ganti penggunaan / atau \ di jalur sistem file dengan File.Separator atau Paths.get.

Memverifikasi kompatibilitas platform

Jika Anda membuat Dockerfile secara manual dan menyebarkan aplikasi kontainer ke Azure Container Apps, Anda memiliki kontrol penuh atas penyebaran Anda, termasuk versi JRE/JDK dan versi Tomcat.

Sebelum Anda membuat gambar kontainer, migrasikan aplikasi Anda ke versi JDK dan Tomcat yang ingin Anda gunakan di Container Apps. Uji aplikasi Anda secara menyeluruh untuk memastikan kompatibilitas dan performa.

Nota

Validasi ini sangat penting jika server Anda saat ini berjalan pada JDK yang tidak didukung, seperti Oracle JDK atau IBM OpenJ9.

Untuk memeriksa versi Java Anda saat ini, masuk ke server produksi Anda dan jalankan perintah berikut:

java -version

Mengidentifikasi mekanisme persistensi sesi

Untuk mengidentifikasi manajer persistensi sesi yang digunakan, periksa file context.xml dalam aplikasi dan konfigurasi Tomcat Anda. Cari <Manager> elemen , lalu catat nilai className atribut .

Implementasi PersistentManager bawaan Tomcat, seperti StandardManager atau FileStore, tidak dirancang untuk digunakan dengan platform terdistribusi dan berskala seperti Azure Container Apps. Container Apps mungkin melakukan penyeimbangan beban di antara beberapa instans dan secara transparan menghidupkan ulang instans apa pun kapan saja, sehingga menyimpan status yang dapat diubah ke sistem file tidak direkomendasikan.

Jika Anda memerlukan persistensi sesi, gunakan implementasi alternatif PersistentManager yang menulis ke penyimpanan data eksternal, seperti VMware Tanzu Session Manager dengan Redis Cache.

Mengidentifikasi pekerjaan terjadwal

Anda tidak dapat menggunakan pekerjaan terjadwal, seperti tugas Penjadwal Kuarsa atau pekerjaan cron, dengan penyebaran Tomcat dalam kontainer. Jika Anda memperluas skala aplikasi, satu pekerjaan terjadwal mungkin berjalan lebih dari sekali per periode terjadwal, yang dapat menyebabkan konsekuensi yang tidak diinginkan.

Inventarkan pekerjaan terjadwal apa pun, di dalam atau di luar server aplikasi. Tugas berumur pendek atau tugas bergaya batch adalah kandidat yang baik untuk pekerjaan dalam Container Apps. Untuk informasi selengkapnya, lihat Pekerjaan di Azure Container Apps.

Menentukan apakah MemoryRealm digunakan

MemoryRealm memerlukan file XML yang bertahan. Di Azure Container Apps, Anda perlu menambahkan file ini ke gambar kontainer atau mengunggahnya ke penyimpanan bersama yang Anda sediakan untuk kontainer. Untuk informasi selengkapnya, lihat bagian Mengidentifikasi mekanisme persistensi sesi . Anda harus mengubah parameter pathName sesuai.

Untuk menentukan apakah MemoryRealm saat ini digunakan, periksa fileserver.xml dan context.xml Anda. Cari elemen <Realm> dengan atribut className yang diatur ke org.apache.catalina.realm.MemoryRealm.

Parameterisasi konfigurasi

Selama pra-migrasi, Anda mungkin mengidentifikasi rahasia dan dependensi eksternal, seperti sumber data, dalam server.xml dan context.xml files. Untuk setiap item, ganti nama pengguna, kata sandi, string koneksi, atau URL apa pun dengan variabel lingkungan.

Nota

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

Misalnya, file context.xml berisi elemen berikut:

<Resource
    name="jdbc/dbconnection"
    type="javax.sql.DataSource"
    url="jdbc:postgresql://postgresdb.contoso.com/wickedsecret?ssl=true"
    driverClassName="org.postgresql.Driver"
    username="postgres"
    password="{password}"
/>

Anda dapat mengubahnya seperti yang ditunjukkan dalam contoh berikut:

<Resource
    name="jdbc/dbconnection"
    type="javax.sql.DataSource"
    url="${postgresdb.connectionString}"
    driverClassName="org.postgresql.Driver"
    username="${postgresdb.username}"
    password="${postgresdb.password}"
/>

Menilai pencatatan log dan APM

Identifikasi solusi agregasi log apa pun yang digunakan aplikasi yang Anda migrasikan. Anda perlu mengonfigurasi pengaturan diagnostik selama migrasi sehingga peristiwa yang dicatat tersedia untuk dikonsumsi. Untuk informasi selengkapnya, lihat bagian Mengonfigurasi pengelogan dan diagnostik .

Identifikasi agen manajemen performa aplikasi (APM) apa pun yang digunakan aplikasi Anda. Azure Container Apps tidak menawarkan dukungan APM bawaan. Siapkan gambar kontainer Anda atau integrasikan alat APM langsung ke dalam kode Anda. Jika Anda ingin mengukur performa aplikasi tetapi belum mengintegrasikan APM apa pun, pertimbangkan untuk menggunakan Azure Application Insights dengan agen Java instrumentasi otomatis. Untuk informasi selengkapnya, lihat Mengaktifkan Azure Monitor OpenTelemetry untuk aplikasi Java.

Arsitektur penyebaran dokumen

Dokumentasikan informasi berikut untuk aplikasi Tomcat Anda:

  • Jumlah instance yang berjalan.
  • Jumlah CPU yang dialokasikan untuk setiap instans.
  • Jumlah RAM yang dialokasikan untuk setiap instans.

Tentukan juga apakah Anda mendistribusikan instans aplikasi di antara beberapa wilayah atau pusat data. Dokumentasikan persyaratan waktu aktif dan SLA untuk aplikasi yang Anda migrasikan.

Migration

Buat lingkungan Aplikasi Kontainer

Buat lingkungan Container Apps di langganan Azure Anda. Untuk informasi selengkapnya, lihat Quickstart: Menyebarkan aplikasi kontainer pertama Anda menggunakan portal Azure.

Mengonfigurasi pengelogan dan diagnostik

Konfigurasikan pengelogan Anda untuk merutekan semua output ke konsol alih-alih ke file.

Setelah menyebarkan aplikasi ke Azure Container Apps, Anda dapat mengonfigurasi opsi pengelogan dalam lingkungan Container Apps Anda untuk menentukan satu atau beberapa tujuan log. Tujuan ini dapat mencakup Azure Monitor Log Analytics, Azure Event Hubs, atau solusi pemantauan non-Microsoft. Anda juga dapat menonaktifkan penyimpanan data log dan melihat log hanya pada runtime. Untuk petunjuk konfigurasi, lihat Opsi penyimpanan dan pemantauan log di Azure Container Apps.

Mengonfigurasi penyimpanan persisten

Jika ada bagian dari aplikasi Anda yang membaca atau menulis ke sistem file lokal, konfigurasikan penyimpanan persisten untuk menggantinya. Misalnya, jika aplikasi Tomcat Anda menulis log atau mengunggah ke /opt/tomcat/data, buat berbagi Azure Files dan pasang ke jalur yang sama:

az containerapp update \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --set-env-vars "UPLOAD_DIR=/opt/tomcat/data"

Tentukan jalur yang akan dipasang dalam kontainer melalui pengaturan aplikasi dan selaraskan dengan jalur yang digunakan aplikasi Anda. Untuk informasi selengkapnya, lihat Gunakan pemasangan penyimpanan di Azure Container Apps.

Memigrasikan sertifikat ke Azure Key Vault

Azure Container Apps mendukung komunikasi yang aman antar aplikasi. Aplikasi Anda tidak perlu mengelola proses membangun komunikasi yang aman. Anda dapat mengunggah sertifikat privat ke Azure Container Apps atau menggunakan sertifikat terkelola gratis. Menggunakan Azure Key Vault untuk mengelola sertifikat adalah pendekatan yang direkomendasikan.

Untuk menyimpan sertifikat di Key Vault dan mereferensikannya dari aplikasi kontainer Anda:

  1. Impor sertifikat ke Azure Key Vault. Untuk informasi selengkapnya, lihat Mengimpor sertifikat di Azure Key Vault.
  2. Aktifkan identitas terkelola di aplikasi kontainer Anda dan berikan peran Pengguna Rahasia Key Vault di vault.
  3. Konfigurasikan aplikasi kontainer untuk menggunakan sertifikat Key Vault untuk domain kustom.

Untuk informasi selengkapnya, lihat Certificates di Azure Container Apps.

Mempersiapkan artefak penyebaran

Clone repositori GitHub Tomcat on Containers Quickstart. Repositori ini berisi file konfigurasi Dockerfile dan Tomcat dengan banyak pengoptimalan yang direkomendasikan. Langkah-langkah berikut menguraikan modifikasi yang mungkin perlu Anda lakukan pada file-file ini sebelum membangun gambar kontainer dan menyebarkan ke Container Apps.

Nota

Beberapa instalasi Tomcat mengoperasikan beberapa aplikasi pada satu server Tomcat. Jika penyiapan ini cocok dengan penyebaran Anda, jalankan setiap aplikasi di aplikasi kontainer terpisah. Dengan menggunakan pendekatan ini, Anda dapat mengoptimalkan pemanfaatan sumber daya untuk setiap aplikasi sambil meminimalkan kompleksitas dan konektor.

Menambahkan sumber daya JNDI

Edit server.xml untuk menambahkan sumber daya yang Anda siapkan dalam langkah-langkah pramigrasi, seperti sumber data, seperti yang diperlihatkan dalam contoh berikut:

Nota

Gunakan 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 tinggi pada 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.

<!-- Global JNDI resources
      Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml"
               />

    <!-- Migrated datasources here: -->
    <Resource
        name="jdbc/dbconnection"
        type="javax.sql.DataSource"
        url="${postgresdb.connectionString}"
        driverClassName="org.postgresql.Driver"
        username="${postgresdb.username}"
        password="${postgresdb.password}"
    />
    <!-- End of migrated datasources -->
</GlobalNamingResources>

Untuk instruksi sumber data selengkapnya, lihat bagian berikut dari Panduan Sumber Data JNDI dalam dokumentasi Tomcat:

Membangun dan mendorong citra

Cara paling sederhana untuk membangun dan mengunggah gambar ke Azure Container Registry (ACR) untuk digunakan oleh Container Apps adalah dengan menggunakan az acr build perintah . Perintah ini tidak mengharuskan Docker diinstal pada komputer Anda. Misalnya, jika Anda memiliki Dockerfile dari repositori tomcat-container-quickstart dan paket aplikasi petclinic.war di direktori saat ini, Anda dapat membangun gambar kontainer di ACR dengan perintah berikut:

az acr build \
    --registry $acrName \
    --image "${acrName}.azurecr.io/petclinic:{{.Run.ID}}" \
    --build-arg APP_FILE=petclinic.war \
    --build-arg SERVER_XML=prod.server.xml .

Anda dapat menghilangkan --build-arg APP_FILE... parameter jika file WAR Anda bernama ROOT.war. Anda dapat menghilangkan --build-arg SERVER_XML... parameter jika file XML server Anda diberi nama server.xml. Kedua file harus berada di direktori yang sama dengan Dockerfile.

Atau, Anda dapat menggunakan Docker CLI untuk membangun gambar secara lokal dengan menggunakan perintah berikut. Pendekatan ini dapat menyederhanakan pengujian dan penyempurnaan gambar sebelum penyebaran awal ke ACR. Namun, itu mengharuskan Docker CLI untuk diinstal dan daemon Docker berjalan.

# Build the image locally.
docker build . --build-arg APP_FILE=petclinic.war -t "${acrName}.azurecr.io/petclinic:1"

# Run the image locally.
docker run -d -p 8080:8080 "${acrName}.azurecr.io/petclinic:1"

# You can now access your application with a browser at http://localhost:8080.

# Sign in to ACR.
az acr login --name $acrName

# Push the image to ACR.
docker push "${acrName}.azurecr.io/petclinic:1"

Nota

Di Linux, Anda mungkin perlu mengawali docker perintah dengan sudo jika pengguna Anda tidak berada dalam docker grup.

Untuk informasi selengkapnya, lihat Membuat dan menyimpan gambar kontainer dengan Azure Container Registry.

Menyebarkan ke Azure Container Apps

Perintah berikut menunjukkan contoh penyebaran:

az containerapp create \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --environment <ENVIRONMENT_NAME> \
    --image <IMAGE_NAME> \
    --target-port 8080 \
    --ingress 'external' \
    --registry-server <REGISTRY_SERVER> \
    --min-replicas 1

Untuk panduan memulai yang lebih mendalam, lihat Panduan Memulai: Menyebarkan aplikasi kontainer pertama Anda.

Mengonfigurasi rahasia dan variabel lingkungan

Masukkan pengaturan konfigurasi ke setiap aplikasi sebagai variabel lingkungan. Atur variabel ini sebagai entri manual atau sebagai referensi ke rahasia. Untuk informasi selengkapnya, lihat Mengelola variabel lingkungan di Azure Container Apps dan Mengelola rahasia di Azure Container Apps.

Menyiapkan identitas dan autentikasi

Jika aplikasi Tomcat Anda memerlukan otentikasi atau otorisasi, pastikan konfigurasi disetel untuk mengakses penyedia identitas (IdP):

  • Jika penyedia identitas (IdP) adalah Microsoft Entra ID, jangan melakukan perubahan apa pun.
  • Jika penyedia identitas adalah forest Active Directory on-premises, pertimbangkan untuk menerapkan solusi identitas hibrid dengan Microsoft Entra ID. Untuk informasi selengkapnya, lihat Dokumentasi identitas hibrid.
  • Jika penyedia identitas adalah solusi lokal lainnya, seperti PingFederate, lihat Penginstalan kustom Microsoft Entra Connect untuk mengonfigurasi federasi dengan ID Microsoft Entra.

Jika aplikasi Anda menggunakan Tomcat Realm untuk autentikasi (misalnya, MemoryRealm atau JDBCRealm), rencanakan untuk bermigrasi ke penyedia identitas eksternal atau mengonfigurasi realm di dalam citra kontainer Anda.

Mengekspos aplikasi

Secara default, aplikasi yang disebarkan ke Azure Container Apps tidak dapat diakses dari luar lingkungan. Untuk mengaktifkan akses eksternal, konfigurasikan ingress:

az containerapp ingress enable \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --type external \
    --target-port 8080 \
    --transport auto

Jika Anda menyebarkan aplikasi di lingkungan terkelola dengan jaringan virtualnya sendiri, tentukan tingkat aksesibilitas aplikasi untuk memungkinkan masuk atau masuknya publik dari jaringan virtual Anda saja. Untuk informasi selengkapnya, lihat Jaringan di lingkungan Azure Container Apps.

Pasca-migrasi

Setelah Anda menyelesaikan migrasi, verifikasi bahwa aplikasi Anda berfungsi seperti yang diharapkan. Bagian berikut menjelaskan rekomendasi untuk membuat aplikasi Anda lebih cloud-asli dan kuat secara operasional.

Meningkatkan kesiapan operasional

Rekomendasi berikut membantu Anda memperkuat praktik keandalan, pengamatan, dan penyebaran untuk aplikasi yang dimigrasikan.

  • Alur CI/CD: Tambahkan alur penyebaran untuk penyebaran otomatis dan konsisten. Instruksi tersedia untuk Azure Pipelines dan GitHub Actions.
  • Penyebaran biru-hijau: Gunakan revisi aplikasi kontainer, label revisi, dan bobot lalu lintas masuk untuk menguji perubahan kode dalam produksi sebelum membuatnya tersedia untuk pengguna akhir. Untuk informasi selengkapnya, lihat Penyebaran Blue-Green di Azure Container Apps.
  • Pengikatan layanan: Tambahkan pengikatan layanan untuk menyambungkan aplikasi Anda ke database Azure yang didukung. Pengikatan layanan menghilangkan kebutuhan untuk memberikan informasi koneksi, termasuk info masuk, ke aplikasi Spring Boot Anda.
  • Metrik JVM: Aktifkan tumpukan pengembangan Java untuk mengumpulkan metrik inti JVM. Untuk informasi selengkapnya, lihat Metrik Java untuk aplikasi Java di Azure Container Apps.
  • Pemberitahuan: Tambahkan aturan pemberitahuan Azure Monitor dan grup tindakan untuk mendeteksi dan mengatasi kondisi yang menyimpang dengan cepat. Untuk informasi selengkapnya, lihat Siapkan pemberitahuan di Azure Container Apps.
  • Redundansi zona: Replikasi aplikasi Anda di seluruh zona ketersediaan dengan mengaktifkan redundansi zona. Lalu lintas diseimbangkan bebannya dan secara otomatis dirutekan ke replika jika terjadi pemadaman zona. Untuk informasi selengkapnya, lihat Keandalan di Azure Container Apps.
  • Web Application Firewall: Lindungi aplikasi kontainer Anda dari eksploitasi dan kerentanan umum dengan menggunakan Web Application Firewall di Application Gateway. Untuk informasi selengkapnya, lihat Melindungi Aplikasi Kontainer Azure dengan Web Application Firewall di Application Gateway.

Rekomendasi khusus Tomcat

  • Untuk meningkatkan performa, evaluasi item dalam file logging.properties . Pertimbangkan untuk menghilangkan atau mengurangi beberapa output pengelogan.

  • Pertimbangkan untuk memantau ukuran cache kode dan menambahkan parameter -XX:InitialCodeCacheSize dan -XX:ReservedCodeCacheSize ke JAVA_OPTS variabel di Dockerfile untuk mengoptimalkan performa lebih lanjut. Untuk informasi selengkapnya, lihat Penyetelan Codecache dalam dokumentasi Oracle.