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

Bu makalede, HTTP isteklerine yanıt veren bir işlev oluşturmak için yerel komut satırı araçlarını kullanırsınız. Kodunuzu yerel olarak doğruladıktan sonra Azure İşlevleri'nde sunucusuz flex consumption barındırma planına dağıtırsınız.

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.

Makalenin üst kısmında tercih ettiğiniz geliştirme dilini seçtiğinizden emin olun.

Important

Azure İşlevleri için git desteği şu anda genel önizleme aşamasındadır. Önizleme sırasında Go işlev uygulamaları yalnızca Flex Consumption planında desteklenir.

Prerequisites

  • rustup kullanan Rust araç zinciri. rustc --version komutunu kullanarak sürümünüzü kontrol edin.

Azure İşlevleri 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 Core Tools README belgesine bakın.

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.

Tavsiye

Linux için Windows Alt Sistemi'ne (WSL) Çekirdek Araçları yüklemek için Linux sekmesindeki yönergeleri izleyin.

Sanal ortam oluşturma ve etkinleştirme

Uygun bir klasörde aşağıdaki komutları çalıştırarak adlı .venvbir sanal ortam oluşturun ve etkinleştirin. Azure İşlevleri tarafından desteklenen Python sürümlerinden birini kullandığınızdan emin olun.

python -m venv .venv
source .venv/bin/activate

Python venv paketini Linux dağıtımınıza yüklemediyse aşağıdaki komutu çalıştırın:

sudo apt-get install python3-venv

Bu etkinleştirilmiş sanal ortamda sonraki tüm komutları çalıştırırsınız.

Yerel kod projesi ve işlevi oluşturma

Azure İşlevleri'nde kod projeniz, her biri belirli bir tetikleyiciye yanıt veren bir veya daha fazla işlev içeren bir uygulamadır. Projedeki tüm işlevler aynı yapılandırmaları paylaşır ve Azure'a birim olarak dağıtılır. Bu bölümde, tek bir işlev içeren bir kod projesi oluşturacaksınız.

  1. func init Go işlevleri projesi oluşturmak için komutunu çalıştırın:

    func init MyGoFunctionApp --worker-runtime go
    

    Bu komut, aşağıdaki dosyaları içeren adlı MyGoFunctionApp bir proje klasörü oluşturur:

    Dosya Description
    host.json İşlev uygulaması için konak yapılandırması.
    local.settings.json Yerel olarak çalıştırılırken kullanılan ayarlar.
    main.go HTTP ile tetiklenen örnek bir işleve sahip giriş noktası.
    go.mod Bağımlılık yönetimi için modül dosyasına gidin.
    go.sum Go modülü sağlama toplamı dosyası.
  2. Proje klasörüne gidin:

    cd MyGoFunctionApp
    
  3. Oluşturulan kodu gözden geçirmek için açın main.go . Http ile tetiklenen örnek bir işlev içerir:

    package main
    
    import (
        "log"
        "net/http"
    
        "github.com/azure/azure-functions-golang-worker/sdk"
        "github.com/azure/azure-functions-golang-worker/worker"
    )
    
    // HTTPTriggerHandler handles standard HTTP requests
    func HTTPTriggerHandler(w http.ResponseWriter, r *http.Request) {
        log.Printf("Processing HTTP Trigger for %s", r.URL.Path)
        w.WriteHeader(http.StatusOK)
        w.Write([]byte("Hello from Go Worker!"))
    }
    
    func main() {
        app := sdk.FunctionApp()
        app.HTTP("hello", HTTPTriggerHandler,
            sdk.WithMethods("GET", "POST"),
            sdk.WithAuth("anonymous"),
        )
        worker.Start(app)
    }
    

    Go işlevleri HTTP tetikleyicileri için standart net/http türleri (http.ResponseWriter ve *http.Request) kullanır. İşlevler Go çalışan SDK'sı main() ve işlevsel seçenekleri kullanılarak kaydedilir ve hiçbir function.json dosya gerekmez.

  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime dotnet-isolated 
    
  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime node --language javascript 
    
  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime powershell 
    
  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime python 
    
  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime node --language typescript 
    
  1. Terminalde veya komut isteminde şu func init komutu çalıştırarak geçerli klasörde bir işlev uygulaması projesi oluşturun:

    func init --worker-runtime custom 
    
  1. Boş bir klasörde şu mvn komutu çalıştırarak bir Azure İşlevleri Maven arketipinden kod projesi oluşturun:

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

    Important

    • İş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.
    • JAVA_HOME Bu makaleyi tamamlamak için ortam değişkenini doğru JDK sürümünün yükleme konumuna ayarlayın.
  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:

    Prompt Value Description
    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ı içermeyen jar'ın adı olarak bir değer.
    version 1.0-SNAPSHOT Varsayılan değeri seçin.
    package com.fabrikam Oluşturulan işlev kodu için Java paketi olan bir değer. Varsayılan değeri kullanın.
  3. Yazın Y veya onaylamak için Enter tuşuna basın.

    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
    

    \src\main\java\com\fabrikam proje dizinindeki Function.java yeni HTTP tetikleyici işleviniz için şablon tarafından oluşturulan kodu gözden geçirebilirsiniz.

  1. Projenize işlev eklemek için şu func new komutu kullanın:

    func new --name HttpExample --template "HTTP trigger" --authlevel "function"
    

    Projenize yeni bir kod dosyası eklenir. Bu durumda bağımsız değişken işlevinizin --name benzersiz adıdır (HttpExample) ve --template bağımsız değişken bir HTTP tetikleyicisi belirtir.

Proje kök klasörü, local.settings.jsonvehost.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.

İşlevinizi oluşturun ve derleyin

HttpExample klasöründeki function.json dosyası bir HTTP tetikleyici işlevi bildirir. bir işleyici ekleyerek ve bir yürütülebilir dosyaya derleyerek işlevi tamamlarsınız.

  1. VS Code'da yeni bir tümleşik terminal açmak için Ctrl + Shift + ' tuşlarına basın veya Terminal menüsünden Yeni Terminal'i seçin.

  2. İşlev uygulaması kökünde (host.json ile aynı klasör), adlı handlerbir Rust projesi başlatın.

    cargo init --name handler
    
  3. Cargo.toml dosyasına bu hızlı başlangıcı tamamlamak için gereken aşağıdaki bağımlılıkları ekleyin. Örnekte warp web sunucusu çerçevesi kullanılır.

    [dependencies]
    warp = "0.3"
    tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }
    
  4. src/main.rs dosyasına aşağıdaki kodu ekleyin ve dosyayı kaydedin. Bu sizin Rust özel işleyiciniz.

    use std::collections::HashMap;
    use std::env;
    use std::net::Ipv4Addr;
    use warp::{http::Response, Filter};
    
    #[tokio::main]
    async fn main() {
        let example1 = warp::get()
            .and(warp::path("api"))
            .and(warp::path("HttpExample"))
            .and(warp::query::<HashMap<String, String>>())
            .map(|p: HashMap<String, String>| match p.get("name") {
                Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)),
                None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")),
            });
    
        let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT";
        let port: u16 = match env::var(port_key) {
            Ok(val) => val.parse().expect("Custom Handler port is not a number!"),
            Err(_) => 3000,
        };
    
        warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await
    }
    
  5. Özel işleyiciniz için bir ikili dosya derleyin. handler adlı yürütülebilir dosya (handler.exe Windows'ta) işlev uygulamasının kök klasöründe oluşturulur.

    cargo build --release
    cp target/release/handler .
    

İşlev uygulamanızı yapılandırma

İşlev ana bilgisayarı, başlatıldığında özel işleyici ikili dosyanızı çalıştıracak şekilde yapılandırılmalıdır.

  1. host.json'i açın.

  2. customHandler.description bölümünde, defaultExecutablePath değerini handler olarak ayarlayın (Windows'ta handler.exe olarak ayarlayın).

  3. customHandler bölümünde, enableForwardingHttpRequest adlı bir özellik ekleyin ve değerini true olarak ayarlayın. Yalnızca BIR HTTP tetikleyicisi içeren işlevler için bu ayar, özel işleyici isteği yükü yerine tipik bir HTTP isteğiyle çalışmanıza olanak tanıyarak programlamayı basitleştirir.

  4. customHandler bölümünün bu örnekteki gibi göründüğünü onaylayın. Dosyayı kaydedin.

    "customHandler": {
      "description": {
        "defaultExecutablePath": "handler",
        "workingDirectory": "",
        "arguments": []
      },
      "enableForwardingHttpRequest": true
    }
    

İşlev uygulaması, özel işleyici yürütülebilir dosyanızı başlatacak şekilde yapılandırılmıştır.

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

Projeyi yerel olarak çalıştırıp işlev uç noktasını çağırarak yeni işlevinizi doğrulayın.

  1. Proje klasörünün kökünde yerel Azure İşlevleri çalışma zamanı ortamını başlatmak için şu komutu kullanın:

    func start  
    
    npm install
    npm start
    
    mvn clean package  
    mvn azure-functions:run
    

    Çıkışın sonuna doğru aşağıdaki satırlar görüntülenir:

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

    Çıkışın sonuna doğru işlevinizin HTTP uç noktası görüntülenir:

     Functions:
    
             hello: [GET,POST] http://localhost:7071/api/hello
     
  2. İşlev uç noktasını çağırarak çalıştığını doğrulayın:

    Bu çıkıştan işlevinizin HttpExample URL'sini bir tarayıcıya kopyalayın ve işlev URL'sine göz atın. Başarılı bir yanıt olarak "merhaba dünya" iletisini almanız gerekir.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, döndürülen işlev URL'si erişim anahtarı değerini içermez ve işlevinizi çağırmak için buna ihtiyacınız yoktur.

    İşlev yerel olarak çalışırken bir tarayıcı açın ve aşağıdaki URL'ye gidin:

    http://localhost:7071/api/hello
    

    Aşağıdaki yanıtı görmeniz gerekir:

    Hello from Go Worker!
    
  3. İşiniz bittiğinde Ctrl+C tuşlarını kullanın ve işlevler konağını durdurmak için seçim yapın.y

İşleviniz için destekleyici Azure kaynakları oluşturma

İşlev kodunuzu Azure'a dağıtmadan önce şu kaynakları oluşturmanız gerekir:

Gerekli kaynakları oluşturmak için bu adımlardaki Azure CLI komutlarını kullanın.

  1. Henüz yapmadıysanız Azure'da oturum açın:

    az login
    

    az login komutu, Azure hesabınızda oturum açmanızı sağlar. Azure Cloud Shell'de çalışırken bu adımı atlayın.

  2. Henüz yapmadıysanız, Application Insights uzantısını yüklemek için şu az extension add komutu kullanın:

    az extension add --name application-insights
    
  3. Seçtiğiniz bölgede adlı bir kaynak grubu oluşturmak için şu AzureFunctionsQuickstart-rg komutunu kullanın:

    az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"
    

    Bu örnekte, Flex Consumption planını destekleyen, yakınınızdaki bir bölgeyle <REGION> değerini değiştirin. Şu anda desteklenen bölgelerin listesini görüntülemek için az functionapp list-flexconsumption-locations komutunu kullanın.

  4. Kaynak grubunuz ve bölgenizde genel amaçlı bir depolama hesabı oluşturmak için bu az storage account create komutunu kullanın:

    az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \
    --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access false
    

    Bu örnekte, <STORAGE_NAME> değerini size uygun ve Azure Depolama'da benzersiz bir adla değiştirin. Adlar yalnızca üç ile 24 karakter arasında sayı ve küçük harf içermelidir. Standard_LRSİşlevler tarafından desteklenen genel amaçlı bir hesap belirtir. Bu yeni hesaba yalnızca belirli kaynaklar için izin verilmiş Microsoft Entra-authenticated kimlikleri kullanılarak erişilebilir.

  5. Kullanıcı tarafından atanan bir yönetilen kimlik oluşturmak, nesne arasından döndürülen JSON özelliklerini jq ile ayrıştırmak ve varsayılan depolama hesabında Storage Blob Data Owner izinlerini vermek için bu betiği kullanın.

    output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \
    --query "{userId:id, principalId: principalId, clientId: clientId}" -o json)
    
    userId=$(echo $output | jq -r '.userId')
    principalId=$(echo $output | jq -r '.principalId')
    clientId=$(echo $output | jq -r '.clientId')
    
    storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv)
    az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \
    --role "Storage Blob Data Owner" --scope $storageId
    

    Eğer jq yardımcı programı yerel Bash kabuğunuzda yoksa, Azure Cloud Shell'de kullanılabilir. Bu örnekte, <STORAGE_NAME> değerini varsayılan depolama hesap adınızla ve <REGION> değerini bölgenizle değiştirin.

    az identity create komutu adlı func-host-storage-userbir kimlik oluşturur. Döndürülen principalId , komutunu kullanarak az role assignment create varsayılan depolama hesabında bu yeni kimliğe izin atamak için kullanılır. az storage account show komutu, depolama hesabı kimliğini almak için kullanılır.

  6. Azure'da işlev uygulamasını oluşturmak için şu az functionapp create komutunu kullanın:

    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime other --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    

    Bu örnekte, bu yer tutucuları uygun değerlerle değiştirin:

    • <APP_NAME>: size uygun genel olarak benzersiz bir ad. <APP_NAME> aynı zamanda işlev uygulamasının varsayılan DNS etki alanıdır.
    • <STORAGE_NAME>: Önceki adımda kullandığınız hesabın adı.
    • <REGION>: geçerli bölgeniz.
    • <LANGUAGE_VERSION>: Uygun olduğunda yerel olarak doğruladığınız desteklenen dil yığını sürümünü kullanın.

    Bu komut , Flex Tüketim Planı'nda Linux'ta belirtilen dil çalışma zamanınızda çalışan bir işlev uygulaması oluşturur ve bu uygulama burada tahakkuk ettiğiniz kullanım miktarı için ücretsizdir. Komut aynı kaynak grubunda, işlev uygulaması yürütmelerinizi izlemek ve günlükleri görüntülemek için kullanabileceğiniz ilişkili bir Azure Uygulaması Insights örneği de oluşturur. Daha fazla bilgi için bkz. Azure İşlevlerini İzleme. Örneği etkinleştirene kadar herhangi bir ücret ödemezsiniz.

  7. Kullanıcı tarafından atanan yönetilen kimliğinizi Application Insights örneğinizdeki İzleme Ölçümleri Yayımcısı rolüne eklemek için bu betiği kullanın:

    appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \
        --app <APP_NAME> --query "id" --output tsv)
    principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \
        --query principalId -o tsv)
    az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsights
    

    Bu örnekte <APP_NAME> ifadesini işlev uygulamanızın adıyla değiştirin. az role assignment create komutu, kullanıcınızı role ekler. Application Insights örneğinizin kaynak kimliği ve kullanıcınızın asıl kimliği sırasıyla az monitor app-insights component show ve az identity show komutları kullanılarak elde edilir.

Uygulama ayarlarını güncelleştirme

İşlevler ana bilgisayarının paylaşılan sırları kullanarak varsayılan depolama hesabına bağlanmasını sağlamak için AzureWebJobsStorage bağlantı dizesi ayarını ön ekli birkaç ayar ile değiştirin AzureWebJobsStorage__. Bu ayarlar, uygulamanızın depolamaya ve Application Insights'a kullanıcı tarafından atanan yönetilen bir kimlikle bağlanmak için kullandığı karmaşık bir ayarı tanımlar.

  1. Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliğini almak için bu betiği kullanın ve hem depolamaya hem de Application Insights'a yönetilen kimlik bağlantıları tanımlamak için bu betiği kullanın:

    clientId=$(az identity show --name func-host-storage-user \
        --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv)
    az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \
        --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \
        AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \
        APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"
    

    Bu betikte, <APP_NAME> ve <STORAGE_NAME> öğelerini sırasıyla işlev uygulamanızın ve depolama hesabınızın adlarıyla değiştirin.

  2. Paylaşılan gizli dizi anahtarı içeren mevcut bağlantı dizesi ayarını kaldırmak için AzureWebJobsStorage komutunu çalıştırın:

    az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorage
    

    Bu örnekte <APP_NAME> değerini uygulama işlevinizin adıyla değiştirin.

Bu noktada Functions ana bilgisayarı, paylaşılan sırlar yerine yönetilen kimlikleri kullanarak depolama hesabına güvenli bir şekilde bağlanabilir. Artık proje kodunuzu Azure kaynaklarına dağıtabilirsiniz.

İşleviniz için destekleyici Azure kaynakları oluşturma

İşlev kodunuzu Azure dağıtabilmeniz için önce bir kaynak grubu, depolama hesabı ve işlev uygulaması oluşturmanız gerekir. Gerekli kaynakları oluşturmak için bu adımlardaki Azure CLI komutlarını kullanın.

  1. Henüz yapmadıysanız Azure'da oturum açın:

    az login
    

    az login komutu, Azure hesabınızda oturum açmanızı sağlar. Azure Cloud Shell'de çalışırken bu adımı atlayın.

  2. az group create Seçtiğiniz bölgede adlı AzureFunctionsQuickstart-rg bir kaynak grubu oluşturmak için komutunu kullanın:

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    Bu örnekte, Flex Consumption planını destekleyen, yakınınızdaki bir bölgeyle <REGION> değerini değiştirin. az functionapp list-flexconsumption-locations Şu anda desteklenen bölgelerin listesini görüntülemek için komutunu kullanın.

  3. az storage account create Komutunu kullanarak kaynak grubunuz ve bölgenizde genel amaçlı bir depolama hesabı oluşturun:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    Bu örnekte, <STORAGE_NAME> öğesini küresel olarak benzersiz bir adla değiştirin. Adlar üç ile 24 karakter arasında olmalı ve yalnızca küçük harf ve sayı içermelidir.

  4. Azure'da işlev uygulamasını oluşturun:

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4
    

    <APP_NAME> değerini küresel olarak benzersiz bir adla ve <STORAGE_NAME> değerini önceki adımda kullandığınız hesap adıyla değiştirin. Bu komut aynı kaynak grubunda, işlev uygulamanızı izleyip günlükleri görüntüleyebileceğiniz ilişkili bir Azure Uygulaması Insights örneği de oluşturur. Daha fazla bilgi için bkz. Azure İşlevlerini İzleme.

  5. Go genel önizlemesi sırasında gerekli olan işlev uygulamasında HTTP/2'yi devre dışı bırakın:

    az resource update --resource-group AzureFunctionsQuickstart-rg --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
    

İşlev projesini Azure'a dağıtma

İşlev uygulamanızı Azure'da başarıyla oluşturduktan sonra, komutunu kullanarak yerel işlevler projenizi dağıtmaya func azure functionapp publish hazır olursunuz.

  1. Kök proje klasörünüzde şu func azure functionapp publish komutu çalıştırın:

    func azure functionapp publish <APP_NAME>
    

    Bu örnekte <APP_NAME> yerine uygulamanızın adını yazın. Başarılı bir dağıtım, aşağıdaki çıkışa benzer sonuçlar gösterir (basitlik için kesilmiş):

     ...
    
     Getting site publishing info...
     Creating archive for current directory...
     Performing remote build for functions project.
    
     ...
    
     Deployment successful.
     Remote build succeeded!
     Syncing triggers...
     Functions in msdocs-azurefunctions-qs:
         HttpExample - [httpTrigger]
             Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
     
  2. Yerel terminalinizde veya komut isteminizde, erişim anahtarı da dahil olmak üzere URL uç noktası değerini almak için şu komutu çalıştırın:

    func azure functionapp list-functions <APP_NAME> --show-keys
    

    Bu örnekte <APP_NAME> ifadesini uygulamanızın adıyla tekrar değiştirin.

  3. İşlev uç noktasını çağırmak için kullandığınız döndürülen uç nokta URL'sini ve anahtarını kopyalayın.

pom.xml dosyasını güncelleştirme

İşlev uygulamanızı Azure'da başarıyla oluşturduktan sonra maven'in yeni uygulamanıza dağıtabilmesi için pom.xml dosyasını güncelleştirin. Aksi takdirde Maven dağıtım sırasında yeni bir Azure kaynakları kümesi oluşturur.

  1. Azure Cloud Shell'de, dağıtım kapsayıcısı URL'sini ve kullanıcı tarafından atanan yeni yönetilen kimliği almak için şu az functionapp show komutu kullanın:

    az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg  \
        --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \
        containerUrl: properties.functionAppConfig.deployment.storage.value}"
    

    Bu örnekte <APP_NAME> değerini uygulama işlevinizin adıyla değiştirin.

  2. Proje kök dizininde, pom.xml dosyasını bir metin düzenleyicisinde açın, öğesini bulun properties ve şu özel özellik değerlerini güncelleştirin:

    Özellik adı Value
    java.version Yerel olarak doğruladığınız desteklenen dil yığını sürümünü kullanın, örneğin 17.
    azure.functions.maven.plugin.version 1.37.1
    azure.functions.java.library.version 3.1.0
    functionAppName Azure'daki işlev uygulamanızın adı.
  3. öğesinin configurationazure-functions-maven-plugin bölümünü bulun ve şu XML parçasıyla değiştirin:

    <configuration>
        <appName>${functionAppName}</appName>
        <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup>
        <pricingTier>Flex Consumption</pricingTier>
        <region>....</region>
        <runtime>
            <os>linux</os>
            <javaVersion>${java.version}</javaVersion>
        </runtime>
        <deploymentStorageAccount>...</deploymentStorageAccount>
        <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup>
        <deploymentStorageContainer>...</deploymentStorageContainer>
        <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod>
        <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    
  4. Yeni configuration öğede, üç nokta (...) değerlerinin belirli değişikliklerini yapın:

    Configuration Value
    region Mevcut işlev uygulamanızın bölge kodu, örneğin eastus.
    deploymentStorageAccount Depolama hesabınızın adı.
    deploymentStorageContainer Aldığınız değer sonrası \ gelen containerUrl dağıtım paylaşımının adı.
    userAssignedIdentityResourceId Aldığınız yönetilen kimliğinizin tam nitelikli kaynak kimliği.
  5. Değişikliklerinizi pom.xml dosyasına kaydedin.

Artık kod projenizi mevcut uygulamanıza dağıtmak için Maven'ı kullanabilirsiniz.

İşlev projesini Azure'a dağıtma

  1. Komut isteminden şu komutu çalıştırın:

    mvn clean package azure-functions:deploy
    
  2. Dağıtımınız başarılı olduktan sonra, erişim anahtarı da dahil olmak üzere URL uç noktası değerini almak için bu Core Tools komutunu çalıştırın:

    func azure functionapp list-functions <APP_NAME> --show-keys
    

    Bu örnekte <APP_NAME> ifadesini uygulamanızın adıyla tekrar değiştirin.

  3. İşlev uç noktasını çağırmak için kullandığınız döndürülen uç nokta URL'sini ve anahtarını kopyalayın.

İşlev projesini Azure'a dağıtma

İşlev uygulamanızı Azure başarıyla oluşturduktan sonra yerel işlevler projenizi dağıtmaya hazırsınız demektir. Projenizi Azure dağıtmak için func azure functionapp publish komutunu kullanın:

func azure functionapp publish <APP_NAME>

<APP_NAME> değerini işlev uygulamanızın adıyla değiştirin.

İşlevi Azure'da çağırma

İşleviniz bir HTTP tetikleyicisi kullandığından ve GET isteklerini desteklediğinden, işlev düzeyi erişim anahtarını kullanarak URL'sine http isteğinde bulunarak bu tetikleyiciyi çağırırsınız. Tarayıcıda GET isteği yürütmek en kolayıdır.

Kopyaladığınız URL'yi ve erişim anahtarını bir tarayıcı adres çubuğuna yapıştırın.

Uç nokta URL'si şu örneğe benzer olmalıdır:

https://contoso-app.azurewebsites.net/api/httpexample?code=aabbccdd...

Bu durumda, uç nokta URL'sine GET isteğinde bulunurken sorgu dizesinde bir erişim anahtarı da sağlamanız gerekir. Rastgele istemcilerden erişimi sınırlamak için erişim anahtarı kullanılması önerilir. HTTP istemcisi kullanarak POST isteğinde bulunurken, bunun yerine üst bilgide x-functions-key erişim anahtarını sağlamanız gerekir.

Bu URL'ye gittiğinizde, tarayıcı işlevi yerel olarak çalıştırdığınızda olduğu gibi benzer bir çıkış görüntülemelidir.

İşlevi Azure'da çağırma

Dağıtım tamamlandıktan sonra, işlevin Azure çalıştığını doğrulamak için tarayıcıda aşağıdaki URL'yi açın:

https://<APP_NAME>.azurewebsites.net/api/hello

İşlevi yerel olarak çalıştırdığınızda gördüğünüz yanıtın aynısını Hello from Go Worker! görmeniz gerekir.

Kaynakları temizle

Bir sonraki adıma devam edip bir Azure Depolama kuyruğu çıkış bağlayıcısı eklediğinizde, daha önce yaptıklarınızın üzerine inşa edeceğiniz için tüm kaynaklarınızı yerinde koruyun.

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 AzureFunctionsQuickstart-rg

Kaynakları temizle

Sonraki adıma geçerseniz, daha önce oluşturduklarınızın üzerine inşa ederken tüm kaynakları olduğu gibi bırakın.

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 AzureFunctionsQuickstart-rg

Sonraki Adımlar

Go işlevlerini geliştirme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: