Aracılığıyla paylaş


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 ile Java için Azure İşlevleri HTTP tetikleyicisi için yerleşik destek 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

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. @Funq Anotasyonu, 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 yourResourceGroupName 'ü bir kaynak grubu adıyla değiştirin. İş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 makale, kaynak grubunun adını işlev adının önüne ekleyerek gerekli benzersizliğe ulaşır. 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:

    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. Komutunu CURL yerel terminalinizde kullanarak işleve 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.

  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, greeting() yöntemini uygulayan enjekte edilebilir bir bileşendir. Yöntem, bir Welcome... dize iletisini, bir name parametresiyle döndürür.

  2. Mevcut functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java dosyasını açın. Yeni bir gService alan ve greeting yöntemi eklemek için sınıfı 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 greeting komutunu kullanarak yeni curl fonksiyonuna 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
    

    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-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ırıldığında mvn install, azure-functions-maven-plugin için gereken yapılandırma dosyalarını ve bir hazırlama dizinini 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ışta BUILD SUCCESS ifadesinin sona yakın bir yerde olduğundan 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, <yourResourceGroupName>-function-quarkus adıyla dağıtılmalı ve görünmelidir.

    Portalda işlev uygulamasını gösteren ekran görüntüsü.

  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.

    URL'yi ve diğer işlev uygulaması ayrıntılarını gösteren ekran görüntüsü.

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

    İşlev uygulamasının hoş geldiniz sayfasını gösteren ekran görüntüsü.

  4. greeting Yerel terminalinizde aşağıdaki curl komutu kullanarak işlevini çağırın.

    Önemli

    Azure portalında veya çıktıda bulduğunuz kendi işlev URL'nizi YOUR_HTTP_TRIGGER_URL ile değiştirin.

    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"
    

    Ayrıca, aşağıdaki funqyHello komutunu kullanarak diğer işlev (curl) 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.

    Portalda işlev ölçümlerini gösteren ekran görüntüsü.

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, 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: