Hızlı Başlangıç: Komut satırıyla Azure'da Java işlevi oluşturma
Bu makalede, HTTP isteklerine yanıt veren bir Java işlevi oluşturmak için komut satırı araçlarını kullanırsiniz. Kodu yerel olarak test ettikten sonra sunucusuz ortamına dağıtabilirsiniz Azure İşlevleri.
Maven tercih ettiğiniz geliştirme aracı değilse Java geliştiricilerine benzer öğreticilerimize göz atabilirsiniz:
Bu hızlı başlangıç tamamladıktan sonra Azure hesabınıza birkaç ABD doları veya daha düşük bir maliyetle sahip oluruz.
Yerel ortamınızı yapılandırma
Başlamadan önce aşağıdakilere sahip olmak gerekir:
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Sürüm Azure Functions Core Tools 4.x.
Java Developer Kit, sürüm 8 veya 11. Ortam
JAVA_HOMEdeğişkeni, JDK'nin doğru sürümünün yükleme konumu olarak ayarmalıdır.Apache Maven, sürüm 3.0 veya üzeri.
Önkoşul denetimi
Terminalde veya komut penceresinde komutunu
func --versionçalıştırarak dosyanın 4.x Azure Functions Core Tools olup ola olduğunu kontrol edin.az --versionAzure CLI sürümünün 2.4 veya sonraki bir sürüm olup olduğunu kontrol etmek için çalıştırın.az loginAzure'da oturum açma ve etkin aboneliği doğrulama için çalıştırın.
Yerel işlev projesi oluşturma
İşlev Azure İşlevleri, her biri belirli bir tetikleyiciye yanıt veren bir veya daha fazla bağımsız işleve yönelik bir kapsayıcıdır. Projede yer alan 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şturabilirsiniz.
İş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=11ifadesini kullanın. Daha fazla bilgi için bkz. Java sürümleri. - Bu
JAVA_HOMEmakaleyi tamamlamak için ortam değişkeninin JDK'nin doğru sürümünün yükleme konumu olarak ayarlanmış olması gerekir.
- İşlevlerinizin Java 11 üzerinde çalışmasını istiyorsanız
Maven, dağıtımda proje oluşturma işlemi tamamlamak için gereken değerleri sorar.
İstendiğinde aşağıdaki değerleri sağlar:İstem Değer Açıklama groupId com.fabrikamJava için paket adlandırma kurallarına uygun olarak projenizi tüm projelerde benzersiz şekilde tanımlayan bir değer. Artifactıd fabrikam-functionsSürüm numarası olmadan jar'ın adı olan bir değer. Sürüm 1.0-SNAPSHOTVarsayılan değeri seçin. Paket com.fabrikamOluşturulan işlev kodu için Java paketi olan bir değer. Varsayılan değeri kullanın. Onaylamak
Yiçin Enter tuşuna basın veya yazın.Maven, bu örnekte olan artifactId adıyla yeni bir klasörde proje dosyalarını
fabrikam-functionsoluşturur.Proje klasörüne gidin:
cd fabrikam-functionsBu klasör, projenin local.settings.json ve host.json adlı yapılandırma dosyaları da dahil olmak üzere çeşitli dosyaları içerir. local.settings.json, Azure'dan indirilen gizli dizileri içereyeneden dosya, .gitignore dosyasında varsayılan olarak kaynak denetiminden dışlanmış olur.
(İsteğe bağlı) Dosya içeriğini inceleme
İsterseniz İşlevi yerel olarak çalıştırma ve dosya içeriğini daha sonra inceleme adımına atlayabilirsiniz.
Function.java
Function.java, değişkende istek verilerini alan bir yöntem içerir. Bu yöntem, tetikleyici davranışını tanımlayan HttpTrigger ek açıklamasıyla bir run request HttpRequestMessage'dır.
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for
* license information.
*/
package com.functions;
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
Ayarlar barındırmak için oluşturulan Azure kaynakları, eklentinin yapılandırma öğesinde, oluşturulan pom.xml dosyasında groupId com.microsoft.azure ile 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 java-functions-group uygulaması oluşturma talimatı westus verir. İşlev uygulaması, varsayılan Windows sunucusuz Tüketim planı olan planda barındırılan java-functions-app-service-plan bir uygulama ü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>${functionResourceGroup}</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>${functionAppRegion}</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>
<!-- for docker function, please set the following parameters -->
<!-- <image>[hub-user/]repo-name[:tag]</image> -->
<!-- <serverId></serverId> -->
<!-- <registryUrl></registryUrl> -->
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~3</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
Kaynakların Azure'da nasıl oluşturulacaklarını kontrol etmek için bu ayarları değiştirebilirsiniz. Örneğin, ilk dağıtımdan önce olarak runtime.os windows olarak linux değiştirebilirsiniz. Maven eklentisi tarafından desteklenen ayarların tam listesi için yapılandırma ayrıntılarına bakın.
FunctionTest.java
Archetype işleviniz için bir birim testi de üretir. İşlevini bağlama eklemek veya projeye yeni işlevler eklemek için değiştirerek FunctionTest.java dosyasındaki testleri de değiştirmeniz gerekir.
İşlevi yerel olarak çalıştırma
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Çıkışın sonuna doğru aşağıdaki satırların görünmesi gerekir:
... 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, ana bilgisayarı büyük olasılıkla projenin kök klasörünün dışından başlatmışsınızdır. Bu durumda, Ctrl C tuşlarını kullanarak ana bilgisayarı durdurun, projenin kök klasörüne gidin ve + önceki komutu yeniden çalıştırın.
İşlevin URL'sini bu çıkıştan bir tarayıcıya kopyalayın ve sorgu dizesini
HttpExample?name=<YOUR_NAME>ekleyin; tam URL'yi gibihttp://localhost:7071/api/HttpExample?name=Functionsyapın. Tarayıcıda sorgu dizesi değerinizi geri yankıya alan bir ileti görüntüleniyor olmalıdır. Projenizi başlatan terminal, istekte bulunurken günlük çıkışını da gösterir.Bitirin, Ctrl C tuşlarını + kullanın ve işlevler
yana bilgisayarlarını durdurmayı seçin.
İşlev projesini Azure'a dağıtma
İşlev projenizi ilk dağıtarak Azure'da bir işlev uygulaması ve ilgili kaynaklar oluşturulur. Ayarlar barındırmak için oluşturulan Azure kaynaklarının kaynakları,pom.xml tanımlanır. Bu makalede varsayılan değerleri kabul edersiniz.
İpucu
Linux üzerinde çalışan bir işlev uygulaması oluşturmak için Windows dosyasındaki öğesini runtime.os olarak pom.xml windows olarak linux değiştirebilirsiniz. Linux'ın bir tüketim planında çalıştır bu bölgelerde de desteklemektedir. Linux üzerinde çalıştıran uygulamalarınız ve aynı kaynak grubunda Windows uygulamalarınız olması gerekir.
Dağıtımdan önce Azure CLI veya azure aboneliğinizi kullanarak Azure aboneliğinde Azure PowerShell.
az loginaz login komutu sizi Azure hesabınızla imzalar.
Projenizi yeni bir işlev uygulamasına dağıtmak için aşağıdaki komutu kullanın.
mvn azure-functions:deployBu işlem Azure'da aşağıdaki kaynakları oluşturur:
- Kaynak grubu. java-functions-group olarak adlandırılmıştır.
- Depolama hesabı. İşlevler için gereklidir. Ad, hesap adı gereksinimlerine göre Depolama 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'dır.
- İşlev uygulaması. İşlev uygulaması, işlevleriniz için dağıtım ve yürütme birimidir. Ad, artifactId'nize göre rastgele olarak oluşturulur ve rastgele oluşturulan bir sayı eklenir.
Dağıtım, proje dosyalarını paketler ve zip dağıtımını kullanarak yeni işlev uygulamasına dağıtır. Kod, Azure'daki dağıtım paketinden çalışır.
Azure 'da işlevi çağırma
İşleviniz bir HTTP tetikleyicisi kullandığından, tarayıcıda URL 'sine veya kıvrıcı gibi bir araçla HTTP isteği yaparak bu uygulamayı çağırabilirsiniz.
Yayımla komutunun çıktısında gösterilen tüm ÇAĞıRMA URL 'sini, sorgu parametresini ekleyerek bir tarayıcı adres çubuğuna kopyalayın &name=Functions . , İşlevi yerel olarak çalıştırdığınızda tarayıcı benzer bir çıktı görüntülemelidir.

Neredeyse gerçek zamanlı akış günlüklerinigö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. Azure 'da işlev yürütmenin ayrıntılı günlüğü terminalde gösterilir.
Kaynakları temizleme
Bir sonraki adıma devam eder ve bir Azure Depolama kuyruğu çıkış bağlaması eklersanız, tüm kaynaklarınızı hazır durumda tutmanız gerekir.
Aksi takdirde, daha fazla maliyete neden olmaktan kaçınmak için aşağıdaki komutu kullanarak kaynak grubunu ve içerdiği tüm kaynakları silin.
az group delete --name java-functions-group
