Azure İşlevleri üzerinde Quarkus ile sunucusuz Java uygulamaları dağıtma
Bu makalede, Quarkus kullanarak sunucusuz bir Java uygulaması geliştirecek, oluşturacak ve Azure İşlevleri dağıtacaksınız. Bu makalede Quarkus Funqy ve Java için Azure İşlevleri HTTP tetikleyicisi için yerleşik desteği oluşturulduğunda kullanılır. Quarkus'un Azure İşlevleri ile kullanılması, Azure İşlevleri ölçeği ve esnekliği ile Quarkus programlama modelinin gücünü sağlar. bitirdiğinizde, Azure İşlevleri üzerinde sunucusuz Quarkus uygulamalarını çalıştıracak ve uygulamanızı Azure'da izlemeye devam edersiniz.
Önkoşullar
- Kendi bilgisayarınızda yüklü Azure CLI.
- Bir Azure hesabı. Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
- Uygun şekilde yapılandırılmış Java JDK 17
JAVA_HOME
. Bu makale Java 17 düşünülerek yazılmıştır, ancak Azure İşlevleri ve Quarkus java'nın eski sürümlerini de destekler. - Apache Maven 3.8.1+.
Uygulama projesini oluşturma
Bu makalenin örnek Java projesini kopyalamak için aşağıdaki komutu kullanın. Örnek GitHub'dadır.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Ayrılmış HEAD durumunda olduğunu belirten bir ileti görürseniz, bu iletiyi yoksaymak güvenlidir. Bu makale herhangi bir işleme gerektirmediğinden, ayrılmış HEAD durumu uygundur.
Örnek işlevi keşfedin. functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java dosyasını açın.
Aşağıdaki komutu çalıştırın. Ek @Funq
açıklama yönteminizi (bu örnekte) funqyHello
sunucusuz bir işlev yapar.
@Funq
public String funqyHello() {
return "hello funqy";
}
Azure İşlevleri Java'nın Azure'a özgü ek açıklamaları vardır, ancak burada yaptığımız gibi Azure İşlevleri üzerinde Quarkus'u basit bir kapasitede kullanırken bu ek açıklamalar gerekli değildir. Azure İşlevleri Java ek açıklamaları hakkında daha fazla bilgi için Azure İşlevleri Java geliştirici kılavuzuna bakın.
Aksini belirtmediğiniz sürece, işlevin adı yöntem adıyla aynıdır. Ek açıklama parametresiyle işlev adını tanımlamak için aşağıdaki komutu da kullanabilirsiniz:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Ad önemlidir. Makalenin ilerleyen bölümlerinde gösterildiği gibi, işlevi çağırmak REST URI'sinin bir parçası haline gelir.
İşlevi yerel olarak test etme
Yerel terminalinizde Quarkus geliştirme modunu çalıştırmak için kullanın mvn
. Quarkus'un bu şekilde çalıştırılması, arka plan derlemesi ile canlı yeniden yüklemeyi etkinleştirir. Java dosyalarınızı ve/veya kaynak dosyalarınızı değiştirip tarayıcınızı yenilediğinizde, bu değişiklikler otomatik olarak geçerli olur.
Tarayıcı yenilemesi çalışma alanında bir tarama tetikler. Tarama herhangi bir değişiklik algılarsa Java dosyaları yeniden derlenir ve uygulama yeniden dağıtılır. Yeniden dağıtılan uygulamanız isteği karşılar. Derleme veya dağıtımla ilgili herhangi bir sorun varsa, bir hata sayfası size bildirir.
Aşağıdaki yordamda değerini bir kaynak grubu adıyla değiştirin yourResourceGroupName
. İşlev uygulaması adları tüm Azure'da genel olarak benzersiz olmalıdır. Kaynak grubu adları bir abonelik içinde genel olarak benzersiz olmalıdır. Bu makalede, kaynak grubu adı işlev adına önceden bağlanarak gerekli benzersizliğe ulaşabilirsiniz. Oluşturduğunuz ve benzersiz olması gereken tüm adlara benzersiz bir tanımlayıcıyı önceden eklemeyi göz önünde bulundurun. Yararlı bir teknik, baş harflerinizi ve ardından bugünün tarihini mmdd
biçiminde kullanmaktır.
Kaynak grubu, yönergelerin bu bölümü için gerekli değildir, ancak daha sonra gereklidir. Kolaylık olması için Maven projesi, özelliğini tanımlamanızı gerektirir.
Quarkus geliştirme modunu çağır:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
Çıkış şu şekilde görünmelidir:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 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>
Yerel terminalinizde komutunu kullanarak işleve
CURL
erişin:curl localhost:8080/api/funqyHello
Çıkış şu şekilde görünmelidir:
"hello funqy"
İşleve bağımlılık ekleme
Açık standart teknoloji Jakarta EE Bağlamları ve Bağımlılık Ekleme (CDI), Quarkus'ta bağımlılık ekleme sağlar. Genel olarak eklemeye ve özellikle CDI'ye üst düzey bir genel bakış için Jakarta EE öğreticisine bakın.
Bağımlılık ekleme kullanan yeni bir işlev ekleyin.
functions-quarkus/src/main/java/io/quarkus dizininde bir GreetingService.java dosyası oluşturun. Dosyanın kaynak kodu olarak aşağıdaki kodu kullanın:
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; } }
Dosyayı kaydedin.
GreetingService
bir yöntem uygulayan eklenebilir birgreeting()
fasulyedir. yöntemi, parametresiyle birWelcome...
name
dize iletisi döndürür.Mevcut functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java dosyasını açın. yeni
gService
bir alan ve yöntemi eklemek için sınıfınıgreeting
aşağıdaki kodla değiştirin: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"; } }
Dosyayı kaydedin.
Yerel terminalinizde komutunu kullanarak yeni
greeting
işlevecurl
erişin:curl -d '"Dan"' -X POST localhost:8080/api/greeting
Çıkış şu şekilde görünmelidir:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Önemli
Canlı Kodlama (geliştirme modu olarak da adlandırılır), uygulamayı çalıştırmanıza ve anında değişiklik yapmanıza olanak tanır. Quarkus, değişiklikler yapıldığında uygulamayı otomatik olarak yeniden derler ve yeniden yükler. Bu, bu makale boyunca kullanacağınız güçlü ve verimli bir geliştirme stilidir.
Sonraki adıma geçmeden önce Ctrl+C tuşlarına basarak Quarkus geliştirme modunu durdurun.
Uygulamayı Azure’da dağıtma
Henüz yapmadıysanız aşağıdaki az login komutunu kullanarak Azure aboneliğinizde oturum açın ve ekrandaki yönergeleri izleyin:
az login
Not
Azure kimlik bilgilerinizle birden çok Azure kiracısı ilişkilendirildiyse, hangi kiracıda oturum açmak istediğinizi belirtmeniz gerekir. Seçeneğini kullanarak
--tenant
bunu yapabilirsiniz. Örneğin:az login --tenant contoso.onmicrosoft.com
.İşleme web tarayıcısında devam edin. Kullanılabilir web tarayıcısı yoksa veya web tarayıcısı açılamıyorsa ile
az login --use-device-code
cihaz kodu akışını kullanın.Başarıyla oturum açtığınızda, yerel terminalinizdeki çıkış aşağıdakine benzer görünmelidir:
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" } } ]
İşlevleri derleyin ve Azure'a dağıtın.
Önceki adımda oluşturduğunuz pom.xml dosyası kullanır
azure-functions-maven-plugin
. Çalıştırmamvn install
, yapılandırma dosyaları ve gerektiren bir hazırlama diziniazure-functions-maven-plugin
oluşturur. içinyourResourceGroupName
, daha önce kullandığınız değeri kullanın.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Dağıtım sırasında Azure'da oturum açın.
azure-functions-maven-plugin
Eklenti, proje her dağıtıldığında Azure'da oturum açmayı isteyecek şekilde yapılandırılır. Derleme sırasında aşağıdakine benzer bir çıkış görüntülenir:[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.
Çıktının dediği gibi yapın ve tarayıcıyı ve sağlanan cihaz kodunu kullanarak Azure'da kimlik doğrulaması yapın. Diğer birçok kimlik doğrulaması ve yapılandırma seçeneği mevcuttur. için
azure-functions-maven-plugin
başvuru belgelerinin tamamına Azure İşlevleri: Yapılandırma Ayrıntıları bölümünden ulaşabilirsiniz.Kimlik doğrulamasından sonra derlemenin devam etmesi ve bitmesi gerekir. Çıkışın
BUILD SUCCESS
sonuna yaklaştığından emin olun.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
İşlevinizi Azure'da tetikleme URL'sini çıkış günlüğünde de bulabilirsiniz:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Dağıtımın tamamlanması biraz zaman alır. Bu arada Azure portalında Azure İşlevleri keşfedelim.
Azure'da sunucusuz işleve erişme ve bu işlevi izleme
Portalda oturum açın ve Azure CLI'da kullandığınız kiracıyı ve aboneliği seçtiğinizden emin olun.
Azure portalının üst kısmındaki arama çubuğuna işlev uygulaması yazın ve Enter tuşunu seçin. İşlev uygulamanızın dağıtılması ve adıyla
<yourResourceGroupName>-function-quarkus
gösterilmesi gerekir.Konum, Abonelik, URL, Ölçümler ve App Service Planı gibi ayrıntılı bilgileri göstermek için işlev uygulamasını seçin. Ardından URL değerini seçin.
Hoş geldiniz sayfasında işlev uygulamanızın "çalışır durumda" olduğunu onaylayın.
greeting
Yerel terminalinizde aşağıdakicurl
komutu kullanarak işlevini çağırın.Önemli
değerini Azure portalında veya çıktıda bulduğunuz kendi işlev URL'nizle değiştirin
YOUR_HTTP_TRIGGER_URL
.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
Çıkış aşağıdakine benzer görünmelidir:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
Aşağıdaki komutu kullanarak diğer işleve
curl
(funqyHello
) de erişebilirsiniz:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
Çıktı, daha önce gözlemlediğiniz çıktıyla aynı olmalıdır:
"hello funqy"
Azure portalında temel ölçümler özelliğini kullanmak istiyorsanız, işlevi bir kabuk
for
döngüsü içinde çağırmayı deneyin:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Bir süre sonra portalda bazı ölçüm verileri göreceksiniz.
Azure işlevinizi portalda açtığınıza göre portaldan erişebileceğiniz diğer özellikler şunlardır:
- Azure işlevinizin performansını izleyin. Daha fazla bilgi için, bkz. Azure İşlevleri’ni İzleme.
- Telemetriyi keşfedin. Daha fazla bilgi için bkz. Application Insights'ta Azure İşlevleri telemetrisini analiz etme.
- Günlüğe kaydetmeyi ayarlayın. Daha fazla bilgi için bkz. Azure İşlevleri'da akış yürütme günlüklerini etkinleştirme.
Kaynakları temizleme
Bu kaynaklara ihtiyacınız yoksa, aşağıdaki komutu çalıştırarak bunları silebilirsiniz:
az group delete --name <yourResourceGroupName> --yes
Sonraki adımlar
Bu makalede şunların nasıl yapılacağını öğrendiniz:
- Quarkus geliştirme modunu çalıştırın.
- kullanarak
azure-functions-maven-plugin
Bir Funqy uygulamasını Azure işlevlerine dağıtma. - Portalda işlevin performansını inceleyin.
Azure İşlevleri ve Quarkus hakkında daha fazla bilgi edinmek için aşağıdaki makalelere ve başvurulara bakın: