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:
Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
Azure CLI sürüm 2.4 veya üzeri.
Java Geliştirici Seti, sürüm 8, 11, 17, 21 (yalnızca Linux). Ortam değişkeni,
JAVA_HOME
JDK'nin doğru sürümünün yükleme konumuna ayarlanmalıdır.Apache Maven, sürüm 3.0 veya üzeri.
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:
- v4.x - Windows 64 bit (Önerilir. Visual Studio Code hata ayıklaması 64 bit gerektirir.)
- v4.x - Windows 32 bit
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.
İş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.
- İşlevlerinizin Java 11 üzerinde çalışmasını istiyorsanız
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 groupId com.fabrikam
Java için paket adlandırma kurallarını izleyerek projenizi tüm projelerde benzersiz olarak tanımlayan bir değer. artifactId 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. Onaylamak için Enter tuşuna basın
Y
.Maven, proje dosyalarını artifactId adlı yeni bir klasörde oluşturur. Bu örnekte şöyledir
fabrikam-functions
: .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ının 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
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.
İş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ınhttp://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.İş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 windows
linux
değ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.
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.
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 hesabı 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=Functions
ekleyin. Tarayıcı, işlevi yerel olarak çalıştırdığınızda olduğu gibi benzer bir çıkış görüntülemelidir.
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ızı 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