Menyebarkan aplikasi Java tanpa server dengan Quarkus di Azure Functions
Dalam artikel ini, Anda akan mengembangkan, membangun, dan menyebarkan aplikasi Java tanpa server ke Azure Functions dengan menggunakan Quarkus. Artikel ini menggunakan Quarkus Funqy dan dukungan bawaannya untuk pemicu HTTP Azure Functions untuk Java. Menggunakan Quarkus dengan Azure Functions memberi Anda kekuatan model pemrograman Quarkus dengan skala dan fleksibilitas Azure Functions. Setelah selesai, Anda akan menjalankan aplikasi Quarkus tanpa server di Azure Functions dan terus memantau aplikasi Anda di Azure.
Prasyarat
- Azure CLI diinstal di komputer Anda sendiri.
- Akun Azure. Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
- Java JDK 17 dengan
JAVA_HOME
dikonfigurasi dengan tepat. Artikel ini ditulis dengan tinjauan Java 17, tetapi Azure Functions dan Quarkus juga mendukung versi Java yang lebih lama. - Apache Maven 3.8.1+.
Membuat proyek aplikasi
Gunakan perintah berikut untuk mengkloning sampel proyek Java untuk artikel ini. Sampelnya ada di GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Jika Anda melihat pesan tentang berada dalam status HEAD yang terlepas, pesan ini aman untuk diabaikan. Karena artikel ini tidak memerlukan penerapan apa pun, status HEAD yang dilepas sesuai.
Jelajahi fungsi sampel. Buka file functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.
Jalankan perintah berikut. Anotasi @Funq
membuat metode Anda (dalam hal ini, funqyHello
) fungsi tanpa server.
@Funq
public String funqyHello() {
return "hello funqy";
}
Azure Functions Java memiliki sekumpulan anotasi khusus Azure sendiri, tetapi anotasi ini tidak diperlukan saat Anda menggunakan Quarkus di Azure Functions dalam kapasitas sederhana seperti yang kami lakukan di sini. Untuk informasi selengkapnya tentang anotasi Azure Functions Java, lihat panduan pengembang Azure Functions Java.
Kecuali Anda menentukan sebaliknya, nama fungsi sama dengan nama metode. Anda juga dapat menggunakan perintah berikut untuk menentukan nama fungsi dengan parameter ke anotasi:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Nama itu penting. Ini menjadi bagian dari REST URI untuk memanggil fungsi, seperti yang ditunjukkan nanti dalam artikel.
Uji fungsi secara lokal
Gunakan mvn
untuk menjalankan mode dev Quarkus di terminal lokal Anda. Menjalankan Quarkus dengan cara ini memungkinkan pemuatan ulang langsung dengan kompilasi latar belakang. Saat Anda memodifikasi file Java dan/atau file sumber daya anda dan me-refresh browser, perubahan ini akan secara otomatis berlaku.
Refresh browser memicu pemindaian ruang kerja. Jika pemindaian mendeteksi perubahan apa pun, file Java dikompilasi ulang dan aplikasi disebarkan ulang. Permintaan aplikasi yang disebarkan ulang. Jika ada masalah dengan kompilasi atau penyebaran, halaman kesalahan akan memberi tahu Anda.
Dalam prosedur berikut, ganti yourResourceGroupName
dengan nama grup sumber daya. Nama aplikasi fungsi harus unik secara global di semua Azure. Nama grup sumber daya harus unik secara global dalam langganan. Artikel ini mencapai keunikan yang diperlukan dengan menambahkan nama grup sumber daya ke nama fungsi. Pertimbangkan untuk menambahkan pengidentifikasi unik ke nama apa pun yang Anda buat yang harus unik. Teknik yang berguna adalah menggunakan inisial Anda diikuti dengan tanggal hari ini dalam mmdd
format.
Grup sumber daya tidak diperlukan untuk bagian instruksi ini, tetapi diperlukan nanti. Untuk kesederhanaan, proyek Maven mengharuskan Anda untuk menentukan properti .
Panggil mode dev Quarkus:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
Output akan terlihat seperti ini:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx] -- Tests paused Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Akses fungsi dengan menggunakan
CURL
perintah di terminal lokal Anda:curl localhost:8080/api/funqyHello
Output akan terlihat seperti ini:
"hello funqy"
Menambahkan injeksi dependensi ke fungsi
Teknologi standar terbuka Jakarta Konteks EE dan Injeksi Dependensi (CDI) menyediakan injeksi dependensi di Quarkus. Untuk gambaran umum injeksi tingkat tinggi, dan CDI secara khusus, lihat tutorial EE Jakarta.
Tambahkan fungsi baru yang menggunakan injeksi dependensi.
Buat file GreetingService.java di direktori functions-quarkus/src/main/java/io/quarkus . Gunakan kode berikut sebagai kode sumber file:
package io.quarkus; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class GreetingService { public String greeting(String name) { return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name; } }
Simpan file.
GreetingService
adalah biji suntik yang mengimplementasikangreeting()
metode . Metode mengembalikanWelcome...
pesan string denganname
parameter.Buka file functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java yang ada. Ganti kelas dengan kode berikut untuk menambahkan bidang baru
gService
dangreeting
metode :package io.quarkus; import javax.inject.Inject; import io.quarkus.funqy.Funq; public class GreetingFunction { @Inject GreetingService gService; @Funq public String greeting(String name) { return gService.greeting(name); } @Funq public String funqyHello() { return "hello funqy"; } }
Simpan file.
Akses fungsi baru
greeting
dengan menggunakancurl
perintah di terminal lokal Anda:curl -d '"Dan"' -X POST localhost:8080/api/greeting
Output akan terlihat seperti ini:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Penting
Live Coding (juga disebut mode dev) memungkinkan Anda menjalankan aplikasi dan membuat perubahan dengan cepat. Quarkus akan secara otomatis mengkombinasi ulang dan memuat ulang aplikasi saat perubahan dilakukan. Ini adalah gaya pengembangan yang kuat dan efisien yang akan Anda gunakan di seluruh artikel ini.
Sebelum Anda melanjutkan ke langkah berikutnya, hentikan mode dev Quarkus dengan memilih Ctrl+C.
Menyebarkan aplikasi ke Azure
Jika Anda belum melakukannya, masuk ke langganan Azure Anda dengan menggunakan perintah az login berikut dan ikuti petunjuk di layar:
az login
Catatan
Jika beberapa penyewa Azure dikaitkan dengan kredensial Azure, Anda harus menentukan penyewa mana yang ingin Anda masuki. Anda dapat melakukan ini dengan menggunakan
--tenant
opsi . Misalnya:az login --tenant contoso.onmicrosoft.com
.Lanjutkan proses di browser web. Jika tidak ada browser web yang tersedia atau jika browser web gagal dibuka, gunakan alur kode perangkat dengan
az login --use-device-code
.Setelah Anda berhasil masuk, output di terminal lokal Anda akan terlihat mirip dengan yang berikut ini:
xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft' [ { "cloudName": "AzureCloud", "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx", "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "isDefault": true, "managedByTenants": [], "name": "Contoso account services", "state": "Enabled", "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx", "user": { "name": "user@contoso.com", "type": "user" } } ]
Membangun dan menyebarkan fungsi ke Azure.
File pom.xml yang Anda buat di langkah sebelumnya menggunakan
azure-functions-maven-plugin
. Menjalankanmvn install
menghasilkan file konfigurasi dan direktori penahapan yangazure-functions-maven-plugin
diperlukan. UntukyourResourceGroupName
, gunakan nilai yang Anda gunakan sebelumnya.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Selama penyebaran, masuk ke Azure.
azure-functions-maven-plugin
Plug-in dikonfigurasi untuk meminta masuk Azure setiap kali proyek disebarkan. Selama build, output yang mirip dengan yang berikut ini muncul:[INFO] Auth type: DEVICE_CODE To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
Lakukan seperti yang dikatakan output dan autentikasi ke Azure dengan menggunakan browser dan kode perangkat yang disediakan. Banyak opsi autentikasi dan konfigurasi lainnya tersedia. Dokumentasi referensi lengkap untuk
azure-functions-maven-plugin
tersedia di Azure Functions: Detail Konfigurasi.Setelah autentikasi, build harus dilanjutkan dan selesai. Pastikan output menyertakan
BUILD SUCCESS
di dekat akhir.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
Anda juga dapat menemukan URL untuk memicu fungsi Anda di Azure di log output:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Perlu waktu beberapa saat agar penyebaran selesai. Sementara itu, mari kita jelajahi Azure Functions di portal Azure.
Mengakses dan memantau fungsi tanpa server di Azure
Masuk ke portal dan pastikan Anda telah memilih penyewa dan langganan yang sama dengan yang Anda gunakan di Azure CLI.
Ketik aplikasi fungsi pada bilah pencarian di bagian atas portal Azure dan pilih tombol Enter. Aplikasi fungsi Anda harus disebarkan dan muncul dengan nama
<yourResourceGroupName>-function-quarkus
.Pilih aplikasi fungsi untuk menampilkan informasi terperinci, seperti Lokasi, Langganan, URL, Metrik, dan Paket App Service. Kemudian, pilih nilai URL .
Konfirmasikan bahwa halaman selamat datang mengatakan aplikasi fungsi Anda "aktif dan berjalan."
Panggil
greeting
fungsi dengan menggunakan perintah berikutcurl
di terminal lokal Anda.Penting
Ganti
YOUR_HTTP_TRIGGER_URL
dengan URL fungsi Anda sendiri yang Anda temukan di portal Azure atau output.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
Output akan terlihat mirip dengan contoh berikut:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
Anda juga dapat mengakses fungsi lain (
funqyHello
) dengan menggunakan perintah berikutcurl
:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
Output harus sama dengan apa yang Anda amati sebelumnya:
"hello funqy"
Jika Anda ingin menjalankan kemampuan metrik dasar dalam portal Azure, coba panggil fungsi dalam perulangan shell
for
:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Setelah beberapa saat, Anda akan melihat beberapa data metrik di portal.
Sekarang setelah Anda membuka fungsi Azure di portal, berikut adalah lebih banyak fitur yang dapat Anda akses dari portal:
- Pantau performa fungsi Azure Anda. Untuk informasi selengkapnya, lihat Pemantauan Azure Functions.
- Jelajahi telemetri. Untuk informasi selengkapnya, lihat Menganalisis telemetri Azure Functions di Application Insights.
- Menyiapkan pengelogan. Untuk informasi selengkapnya, lihat Mengaktifkan log eksekusi streaming di Azure Functions.
Membersihkan sumber daya
Jika Anda tidak memerlukan sumber daya ini, Anda dapat menghapusnya dengan menjalankan perintah berikut:
az group delete --name <yourResourceGroupName> --yes
Langkah berikutnya
Di artikel ini, Anda telah mempelajari cara:
- Jalankan mode dev Quarkus.
- Sebarkan aplikasi Funqy ke fungsi Azure dengan menggunakan
azure-functions-maven-plugin
. - Periksa performa fungsi di portal.
Untuk mempelajari selengkapnya tentang Azure Functions dan Quarkus, lihat artikel dan referensi berikut ini: