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.

Ön koşullar

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) funqyHellosunucusuz 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.

  1. 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>
    
  2. 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.

  1. 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 bir greeting() fasulyedir. yöntemi, parametresiyle bir Welcome...name dize iletisi döndürür.

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

  3. Yerel terminalinizde komutunu kullanarak yeni greeting işleve curl 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

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

    Dekont

    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-codecihaz 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"
            }
        }
    ]
    
  2. İş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ırma mvn install , yapılandırma dosyaları ve gerektiren bir hazırlama dizini azure-functions-maven-plugin oluşturur. için yourResourceGroupName, daha önce kullandığınız değeri kullanın.

    mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
    
  3. 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.

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

  1. 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-quarkusgösterilmesi gerekir.

    Screenshot that shows the function app in the portal.

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

    Screenshot that shows a URL and other function app details.

  3. Hoş geldiniz sayfasında işlev uygulamanızın "çalışır durumda" olduğunu onaylayın.

    Screenshot that shows the welcome page for a function app.

  4. greeting Yerel terminalinizde aşağıdaki curl 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.

    Screenshot that shows function metrics in the portal.

Azure işlevinizi portalda açtığınıza göre portaldan erişebileceğiniz diğer özellikler şunlardır:

Kaynakları temizleme

Bu kaynaklara ihtiyacınız yoksa, Azure Cloud Shell'de veya yerel terminalinizde 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-pluginBir 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: