Bagikan melalui


Menyebarkan aplikasi Java dengan Open Liberty di Azure Container Apps

Artikel ini memperlihatkan kepada Anda cara menjalankan Open Liberty di Azure Container Apps. Anda melakukan aktivitas berikut dalam artikel ini:

  • Jalankan aplikasi Java, Java Enterprise Edition (EE), Jakarta EE, atau MicroProfile Anda pada runtime Open Liberty.
  • Buat gambar Docker aplikasi menggunakan gambar kontainer Liberty.
  • Sebarkan aplikasi dalam kontainer ke Azure Container Apps.

Untuk informasi selengkapnya tentang Open Liberty, lihat halaman proyek Open Liberty. Artikel ini dimaksudkan untuk membantu Anda dengan cepat mencapai implementasi. Sebelum masuk ke lingkungan produksi, Anda harus menjelajahi Tuning Liberty.

Jika Anda tertarik untuk memberikan umpan balik atau bekerja erat pada skenario migrasi Anda dengan tim teknik yang mengembangkan solusi Java di Azure, isi survei singkat ini tentang migrasi Azure dan sertakan informasi kontak Anda. Tim manajer program, arsitek, dan insinyur akan segera menghubungi Anda untuk memulai kolaborasi yang erat.

Prasyarat

  • Langganan Azure. Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
  • Siapkan komputer lokal dengan sistem operasi seperti Windows atau Unix yang terinstal - misalnya, Ubuntu, macOS, atau Subsistem Windows untuk Linux.
  • Instal Azure CLI 2.62.0 atau lebih tinggi untuk menjalankan perintah Azure CLI.
  • Instal implementasi Java Standard Edition (SE) versi 17 - misalnya, Microsoft build OpenJDK.
  • Instal Maven 3.9.8 atau yang lebih tinggi.
  • Pastikan Git diinstal.

Masuk ke Azure

Masuk ke langganan Azure Anda dengan menggunakan perintah az login dan ikuti petunjuk di layar.

az login

Catatan

Anda dapat menjalankan sebagian besar perintah Azure CLI di PowerShell sama seperti di Bash. Perbedaan hanya ada saat menggunakan variabel. Di bagian berikut, perbedaan ditangani di tab yang berbeda saat diperlukan.

Jika Anda memiliki beberapa tenant Azure yang terkait dengan kredensial Azure Anda, Anda harus menentukan tenant mana yang ingin Anda akses. Anda dapat menentukan penyewa dengan menggunakan opsi --tenant - misalnya, az login --tenant contoso.onmicrosoft.com.

Jika Anda memiliki beberapa langganan dalam satu tenant, pastikan Anda masuk dengan langganan yang ingin Anda gunakan dengan menggunakan az account set --subscription <subscription-id>.

Buat grup sumber daya

Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola.

Buat grup sumber daya yang disebut java-liberty-project menggunakan perintah az group create di lokasi eastus2. Grup sumber daya ini digunakan nanti untuk membuat instans Azure Container Registry (ACR) dan instans Azure Container Apps.

export RESOURCE_GROUP_NAME=java-liberty-project
export LOCATION=eastus2
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

Membuat sebuah instance ACR

Gunakan perintah az acr create untuk membuat instans ACR. Contoh berikut membuat instans ACR bernama youruniqueacrname. Pastikan youruniqueacrname unik dalam Azure.

Catatan

Artikel ini menggunakan mekanisme autentikasi tanpa kata sandi yang direkomendasikan untuk Container Registry. Masih dimungkinkan untuk menggunakan nama pengguna dan kata sandi dengan docker login setelah menggunakan az acr credential show untuk mendapatkan nama pengguna dan kata sandi. Menggunakan nama pengguna dan kata sandi kurang aman daripada autentikasi tanpa kata sandi.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Setelah beberapa saat, Anda akan melihat output JSON yang berisi baris berikut:

"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",

Selanjutnya, gunakan perintah berikut untuk mengambil server masuk untuk instans Container Registry. Anda memerlukan nilai ini saat menyebarkan gambar aplikasi ke Azure Container Apps nanti.

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

Membuat lingkungan

Lingkungan di Aplikasi Kontainer Azure menciptakan batas aman di sekitar sekelompok aplikasi kontainer. Aplikasi Kontainer yang disebarkan ke lingkungan yang sama disebarkan di jaringan virtual yang sama dan menulis log ke ruang kerja Log Analytics yang sama. Gunakan perintah az containerapp env create untuk membuat lingkungan. Contoh berikut membuat lingkungan bernama youracaenvname:

export ACA_ENV=youracaenvname
az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION \
    --name $ACA_ENV

Jika Anda diminta untuk menginstal ekstensi, jawab Y.

Setelah beberapa saat, Anda akan melihat output JSON yang berisi baris berikut:

"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",

Membuat database tunggal di Azure SQL Database

Di bagian ini, Anda membuat database tunggal di Azure SQL Database, untuk digunakan dengan aplikasi Anda.

Pertama, gunakan perintah berikut untuk mengatur variabel lingkungan terkait database. Ganti <your-unique-sql-server-name> dengan nama unik untuk server Azure SQL Database Anda.

export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb

Selanjutnya, gunakan perintah berikut untuk membuat database tunggal di Azure SQL Database dan atur pengguna yang masuk saat ini sebagai admin Microsoft Entra. Untuk informasi selengkapnya, lihat mulai cepat : Membuat database tunggal - Azure SQL Database.

export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)

az sql server create \
    --name $SQL_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --enable-ad-only-auth \
    --external-admin-principal-type User \
    --external-admin-name $ENTRA_ADMIN_NAME \
    --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name $DB_NAME \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Kemudian, gunakan perintah berikut untuk menambahkan alamat IP lokal ke aturan firewall server Azure SQL Database untuk memungkinkan komputer lokal Anda tersambung ke database untuk pengujian lokal nanti.

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Catatan

Anda membuat server Azure SQL dengan autentikasi SQL dinonaktifkan untuk pertimbangan keamanan. Hanya ID Microsoft Entra yang digunakan untuk mengautentikasi ke server. Jika Anda perlu mengaktifkan autentikasi SQL, lihat az sql server create.

Mengonfigurasi dan membuat gambar aplikasi

Untuk menyebarkan dan menjalankan aplikasi Liberty Anda di Azure Container Apps, kontainerisasi aplikasi Anda sebagai gambar Docker menggunakan gambar kontainer Open Liberty.

Ikuti langkah-langkah dalam bagian ini untuk menyebarkan aplikasi sampel pada runtime Liberty. Langkah-langkah ini menggunakan Maven.

Lihat aplikasinya

Gunakan perintah berikut untuk menyiapkan kode sampel untuk panduan ini. Sampelnya ada di GitHub.

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
export BASE_DIR=$PWD
git checkout 20250327

Jika Anda melihat pesan tentang berada dalam detached HEAD status, pesan ini aman untuk diabaikan. Ini hanya berarti Anda mengecek tag.

Artikel ini menggunakan java-app. Berikut adalah struktur file file penting aplikasi:

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ pom.xml
├─ pom-azure-identity.xml

Direktori java, resources, dan webapp berisi kode sumber dari contoh aplikasi. Kode mendeklarasikan dan menggunakan sumber data bernama jdbc/JavaEECafeDB.

Di direktori akar aplikasi java, ada Dockerfile untuk membuat gambar aplikasi dengan Open Liberty.

Dalam direktori liberty/config, file server.xml digunakan untuk mengonfigurasi koneksi database untuk Open Liberty. Ini mendefinisikan variabel azure.sql.connectionstring yang digunakan untuk menyambungkan ke Azure SQL Database.

File pom.xml adalah file model objek proyek Maven (POM) yang berisi informasi konfigurasi untuk proyek. File pom-azure-identity.xml mendeklarasikan dependensi azure-identity, yang digunakan untuk mengautentikasi ke layanan Azure menggunakan ID Microsoft Entra.

Catatan

Sampel ini menggunakan pustaka azure-identity untuk mengautentikasi ke Azure SQL Database menggunakan autentikasi Microsoft Entra, yang direkomendasikan untuk pertimbangan keamanan. Jika Anda perlu menggunakan autentikasi SQL di aplikasi Liberty Anda, lihat koneksi ke database relasional dengan JDBC.

Membangun proyek

Gunakan perintah berikut untuk membangun aplikasi:

cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Jika build berhasil, Anda akan melihat output yang mirip dengan yang berikut ini di akhir build Anda.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------

Jika Anda tidak melihat output ini, pecahkan masalah dan atasi masalah sebelum melanjutkan.

Menguji proyek Anda secara lokal

Sekarang Anda dapat menggunakan langkah-langkah berikut untuk menjalankan dan menguji proyek secara lokal sebelum menyebarkan ke Azure. Untuk kenyamanan, gunakan liberty-maven-plugin. Untuk mempelajari lebih lanjut tentang liberty-maven-plugin, lihat Membangun aplikasi web dengan Maven. Untuk aplikasi Anda, Anda dapat melakukan sesuatu yang serupa menggunakan mekanisme lain, seperti IDE lokal Anda.

Catatan

Jika Anda memilih penyebaran database "tanpa server", verifikasi bahwa database SQL Anda tidak memasuki mode jeda. Salah satu cara untuk melakukan verifikasi adalah dengan masuk ke editor kueri database seperti yang dijelaskan dalam Panduan Mulai Cepat : Gunakan editor kueri portal Azure (pratinjau) untuk melakukan kueri Azure SQL Database.

  1. Mulai aplikasi menggunakan liberty:run.

    cd $BASE_DIR/java-app
    
    # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml.
    export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
    mvn liberty:run
    
  2. Verifikasi bahwa aplikasi berfungsi seperti yang diharapkan. Jika berhasil, Anda akan melihat pesan yang mirip dengan [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds. dalam output perintah. Buka http://localhost:9080/ di browser Anda untuk memverifikasi bahwa aplikasi dapat diakses dan semua fungsi berfungsi.

  3. Tekan Ctrl+C untuk menghentikan. Pilih Y jika diminta untuk mengakhiri pekerjaan batch.

Setelah selesai, hapus aturan firewall yang memungkinkan alamat IP lokal Anda mengakses Azure SQL Database dengan menggunakan perintah berikut:

az sql server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP

Membangun citra untuk penerapan Azure Container Apps

Sekarang Anda dapat menjalankan az acr build perintah untuk membangun gambar, seperti yang ditunjukkan dalam contoh berikut:

cd $BASE_DIR/java-app

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

Perintah az acr build mengunggah artefak yang ditentukan dalam Dockerfile ke instans Container Registry, membangun gambar, dan menyimpannya dalam instans Container Registry.

Menyebarkan aplikasi ke Azure Container Apps

Gunakan perintah berikut untuk membuat instans Azure Container Apps untuk menjalankan aplikasi setelah menarik gambar dari ACR. Contoh ini membuat instans Azure Container Apps bernama youracainstancename:

export ACA_NAME=youracainstancename
az containerapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
    --environment $ACA_ENV \
    --registry-server $ACR_LOGIN_SERVER \
    --registry-identity system \
    --target-port 9080 \
    --ingress 'external' \
    --min-replicas 1

Output yang berhasil adalah objek JSON termasuk properti "type": "Microsoft.App/containerApps".

Kemudian, sambungkan server Azure SQL Database ke aplikasi kontainer menggunakan Konektor Layanan dengan menggunakan langkah-langkah berikut:

  1. Buka portal Microsoft Azure di browser Anda dan navigasikan ke instans Azure Container Apps yang Anda buat di langkah sebelumnya.
  2. Di panel navigasi, pilih Pengaturan>Konektor Layanan (pratinjau).
  3. Pilih Buat. Anda seharusnya melihat jendela munculan Buat koneksi.
  4. Di panel Dasar, untuk Jenis Layanan, pilih SQL Database. Untuk Jenis klien, pilih Java. Biarkan bidang lain pada nilai defaultnya, lalu pilih Berikutnya: Autentikasi.
  5. Di panel Autentikasi, untuk jenis Autentikasi, pilih identitas terkelola yang ditetapkan sistem, lalu pilih Berikutnya: Jaringan.
  6. Di panel Jaringan, pilih Berikutnya: Tinjau + buat.
  7. Pada panel Tinjau + buat, tunggu hingga validasi selesai, lalu pilih Buat menggunakan Cloud Shell. Cloud Shell terbuka lalu menjalankan perintah untuk membuat koneksi. Tunggu hingga perintah selesai lalu tutup Cloud Shell.

Catatan

Konektor Layanan membuat rahasia di aplikasi kontainer yang berisi nilai untuk AZURE_SQL_CONNECTIONSTRING, yang merupakan string koneksi bebas kata sandi ke Azure SQL Database. Untuk informasi selengkapnya, lihat nilai sampel dari bagian identitas terkelola yang ditetapkan pengguna dalam Integrasi Database SQL Azure dengan Penghubung Layanan.

Uji aplikasi

Gunakan perintah berikut untuk mendapatkan URL yang sepenuhnya memenuhi syarat untuk mengakses aplikasi:

echo https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

Untuk mengakses dan menguji aplikasi, buka browser web ke URL. Cuplikan layar berikut menunjukkan aplikasi yang sedang berjalan:

Cuplikan layar yang memperlihatkan aplikasi Java liberty berhasil disebarkan di Azure Container Apps.

Membersihkan sumber daya

Untuk menghindari biaya Azure, Anda harus membersihkan sumber daya yang tidak diperlukan. Saat kluster tidak lagi diperlukan, gunakan perintah az group delete untuk menghapus grup sumber daya, registri kontainer, aplikasi kontainer, server database, dan semua sumber daya terkait.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Langkah berikutnya

Anda dapat mempelajari lebih lanjut dari referensi yang digunakan dalam panduan ini:

Untuk menjelajahi opsi untuk menjalankan produk WebSphere di Azure, lihat Apa solusi untuk menjalankan keluarga produk WebSphere di Azure?