Hızlı Başlangıç: Komut satırından Azure'da Java işlevi oluşturma

Bu makalede, KOMUT satırı araçlarını kullanarak HTTP isteklerine yanıt veren bir Java işlevi oluşturacaksınız. Kodu yerel olarak test ettikten sonra bunu Azure İşlevleri’nin sunucusuz ortamına dağıtacaksınız.

Maven tercih ettiğiniz geliştirme aracı değilse Java geliştiricilerine yönelik benzer öğreticilerimize göz atın:

Bu hızlı başlangıcı tamamladığınızda Azure hesabınıza birkaç sentlik (ABD doları cinsinden) veya daha düşük bir ücret yansıtılır.

Yerel ortamınızı yapılandırma

Başlamadan önce aşağıdakilere sahip olmanız gerekir:

Azure Functions Core Tools’u Yükleme

Çekirdek Araçları'nı yüklemenin önerilen yolu, yerel geliştirme bilgisayarınızın işletim sistemine bağlıdır.

Aşağıdaki adımlarda Core Tools v4.x'i yüklemek için bir Windows yükleyicisi (MSI) kullanılır. Diğer paket tabanlı yükleyiciler hakkında daha fazla bilgi için bkz . Çekirdek Araçları benioku.

Windows sürümünüz temelinde Core Tools yükleyicisini indirin ve çalıştırın:

Daha önce Windows'a Core Tools yüklemek için Windows installer (MSI) kullandıysanız, en son sürümü yüklemeden önce Program Ekle Kaldır'dan eski sürümü kaldırmanız gerekir.

Yerel işlev projesi oluşturma

Azure İşlevleri işlev projesi, her birinin belirli bir tetikleyiciye yanıt verdiği bir veya daha fazla tek tek işlev için bir kapsayıcıdır. Projedeki tüm işlevler aynı yerel ve barındırma yapılandırmalarını paylaşır. Bu bölümde, tek bir işlev içeren bir işlev projesi oluşturacaksınız.

  1. İşlevler projesini bir Maven arketipinden oluşturmak için boş bir klasörde aşağıdaki komutu çalıştırın.

    mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
    

    Önemli

    • İşlevlerinizin Java 11 üzerinde çalışmasını istiyorsanız -DjavaVersion=11 ifadesini kullanın. Daha fazla bilgi edinmek için bkz . Java sürümleri.
    • Bu JAVA_HOME makaleyi tamamlamak için ortam değişkeni, JDK'nin doğru sürümünün yükleme konumuna ayarlanmalıdır.
  2. Maven, projeyi dağıtımda oluşturma işlemini tamamlamak için gereken değerleri ister.
    İstendiğinde aşağıdaki değerleri sağlayın:

    İstem Value Açıklama
    Groupıd com.fabrikam Java için paket adlandırma kurallarını izleyerek projenizi tüm projelerde benzersiz olarak tanımlayan bir değer.
    Artifactıd fabrikam-functions Sürüm numarası olmayan jar'ın adı olan bir değer.
    version 1.0-SNAPSHOT Varsayılan değeri seçin.
    Paket com.fabrikam Oluşturulan işlev kodu için Java paketi olan bir değer. Varsayılan değeri kullanın.
  3. Onaylamak için Enter tuşuna basın Y .

    Maven, proje dosyalarını artifactId adlı yeni bir klasörde oluşturur. Bu örnekte şöyledirfabrikam-functions: .

  4. Proje klasörüne gidin:

    cd fabrikam-functions
    

    Bu klasör, local.settings.json ve host.json adlı yapılandırma dosyaları da dahil olmak üzere proje için çeşitli dosyalar içerir. local.settings.json Azure'dan indirilen gizli dizileri içerebileceğinden, dosya .gitignore dosyasında varsayılan olarak kaynak denetimin dışında tutulur.

(İsteğe bağlı) Dosya içeriğini inceleme

İsterseniz, İşlevi yerel olarak çalıştır'a atlayabilir ve dosya içeriğini daha sonra inceleyebilirsiniz.

Function.java

Function.java, değişkeninde request istek verilerini alan bir run yöntem içerir; tetikleyici davranışını tanımlayan HttpTrigger ek açıklamasıyla donatılmış bir HttpRequestMessage'dır.

package com.fabrikam;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import java.util.Optional;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET, HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

Yanıt iletisi HttpResponseMessage.Builder API'si tarafından oluşturulur.

pom.xml

Uygulamanızı barındırmak için oluşturulan Azure kaynakları için Ayarlar, eklentinin yapılandırma öğesinde oluşturulan pom.xml dosyasında groupId com.microsoft.azure değeriyle tanımlanır. Örneğin, aşağıdaki yapılandırma öğesi Maven tabanlı bir dağıtıma bölgedeki kaynak grubunda bir işlev uygulaması java-functions-group oluşturma talimatını westus vemektedir. İşlev uygulamasının kendisi, varsayılan olarak sunucusuz tüketim planı olan planda barındırılan java-functions-app-service-plan Windows üzerinde çalışır.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <version>${azure.functions.maven.plugin.version}</version>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>java-functions-group</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
        <region>westus</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->
        <!-- Whether to disable application insights, default is false -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
        <!-- <disableAppInsights></disableAppInsights> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <javaVersion>8</javaVersion>
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Azure'da kaynakların nasıl oluşturulduğunu denetlemek için bu ayarları değiştirebilirsiniz; örneğin ilk dağıtımdan windows önceye geçiş runtime.os yapabilirsinizlinux. Maven eklentisi tarafından desteklenen ayarların tam listesi için yapılandırma ayrıntılarına bakın.

FunctionTest.java

Arketip ayrıca işleviniz için bir birim testi oluşturur. İşlevinizi bağlama eklemek veya projeye yeni işlevler eklemek üzere değiştirdiğinizde, FunctionTest.java dosyasındaki testleri de değiştirmeniz gerekir.

İşlevi yerel olarak çalıştırma

  1. LocalFunctionProj klasöründen yerel Azure İşlevleri çalışma zamanı ana bilgisayarını başlatarak işlevinizi çalıştırın:

    mvn clean package
    mvn azure-functions:run
    

    Çıktının sonuna doğru aşağıdaki satırlar görünmelidir:

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Not

    HttpExample yukarıda gösterildiği gibi görünmüyorsa, konağı büyük olasılıkla projenin kök klasörünün dışından başlatmış olursunuz. Bu durumda, konağı durdurmak için Ctrl+C tuşunu kullanın, projenin kök klasörüne gidin ve önceki komutu yeniden çalıştırın.

  2. İşlevinizin HttpExample URL'sini bu çıktıdan bir tarayıcıya kopyalayın ve sorgu dizesini ?name=<YOUR_NAME>ekleyin ve tam URL'yi gibi yapın http://localhost:7071/api/HttpExample?name=Functions. Tarayıcı, sorgu dizesi değerinizi geri döndüren bir ileti görüntülemelidir. Projenizi başlattığınız terminal, istekte bulunurken günlük çıkışını da gösterir.

  3. İşiniz bittiğinde Ctrl+C tuşunu kullanın ve işlevler konasını durdurmayı seçin.y

İşlev projesini Azure'a dağıtma

İşlevler projenizi ilk dağıttığınızda Azure'da bir işlev uygulaması ve ilgili kaynaklar oluşturulur. Uygulamanızı barındırmak için oluşturulan Azure kaynaklarının Ayarlar pom.xml dosyasında tanımlanır. Bu makalede varsayılan değerleri kabul edersiniz.

İpucu

Windows yerine Linux üzerinde çalışan bir işlev uygulaması oluşturmak için, pom.xml dosyasındaki öğesini olarak windowslinuxdeğiştirinruntime.os. Linux'un bir tüketim planında çalıştırılması bu bölgelerde desteklenir. Linux üzerinde çalışan uygulamaları ve Windows üzerinde çalışan uygulamaları aynı kaynak grubunda kullanamazsınız.

  1. Dağıtabilmeniz için önce Azure CLI veya Azure PowerShell kullanarak Azure aboneliğinizde oturum açın.

    az login
    

    az login komutu sizi Azure hesabınızda oturum açar.

  2. Projenizi yeni bir işlev uygulamasına dağıtmak için aşağıdaki komutu kullanın.

    mvn azure-functions:deploy
    

    Bu, Azure'da aşağıdaki kaynakları oluşturur:

    • Kaynak grubu. java-functions-group olarak adlandırılır.
    • Depolama hesabı. İşlevler tarafından gereklidir. Ad, Depolama hesap adı gereksinimlerine göre rastgele oluşturulur.
    • Barındırma planı. westus bölgesinde işlev uygulamanız için sunucusuz barındırma. Ad java-functions-app-service-plan şeklindedir.
    • İşlev uygulaması. İşlev uygulaması, işlevlerinizin dağıtım ve yürütme birimidir. Ad, artifactId değerinize göre rastgele oluşturulur ve rastgele oluşturulan bir sayı eklenir.

    Dağıtım, proje dosyalarını paketler ve zip dağıtımını kullanarak bunları yeni işlev uygulamasına dağıtır. Kod, Azure'daki dağıtım paketinden çalıştırılır.

Önemli

Depolama hesabı, bazen uygulama kodunun kendisi de dahil olmak üzere önemli uygulama verilerini depolamak için kullanılır. Diğer uygulama ve kullanıcılardan depolama hesabına erişimi sınırlamanız gerekir.

İşlevi Azure'da çağırma

İşleviniz bir HTTP tetikleyicisi kullandığından, tarayıcıda URL'sine http isteğinde bulunarak veya curl gibi bir araçla çağırabilirsiniz.

Yayımla komutunun çıkışında gösterilen tam Çağırma URL'sini tarayıcı adres çubuğuna kopyalayın ve sorgu parametresini ?name=Functionsekleyin. Tarayıcı, işlevi yerel olarak çalıştırdığınızda olduğu gibi benzer bir çıkış görüntülemelidir.

The output of the function run on Azure in a browser

Gerçek zamanlıya yakın akış günlüklerini görüntülemek için aşağıdaki komutu çalıştırın:

func azure functionapp logstream <APP_NAME> 

Ayrı bir terminal penceresinde veya tarayıcıda uzak işlevi yeniden çağırın. Terminalde Azure'da işlev yürütme işleminin ayrıntılı bir günlüğü gösterilir.

Kaynakları temizleme

Bir sonraki adıma devam edip bir Azure Depolama kuyruğu çıkış bağlaması eklerseniz, daha önce yaptıklarınıza göre derleyeceğiniz gibi tüm kaynaklarınızı yerinde tutun.

Aksi takdirde, daha fazla maliyet oluşmasını önlemek için kaynak grubunu ve içerdiği tüm kaynakları silmek için aşağıdaki komutu kullanın.

az group delete --name java-functions-group

Sonraki adımlar