Aracılığıyla paylaş


Hızlı Başlangıç: Azure İşlevleri kullanarak ölçeklenebilir bir web API'si oluşturma

Bu hızlı başlangıçta, HTTP isteklerine yanıt veren işlev uç noktalarıyla ölçeklenebilir bir web API'si oluşturmak için Azure Geliştirici komut satırı araçlarını kullanacaksınız. Kodu yerel olarak test ettikten sonra, Azure İşlevleri bir Flex Tüketim planında çalıştırarak oluşturduğunuz yeni bir sunucusuz işlev uygulamasına dağıtırsınız.

Proje kaynağı, kodunuzu Azure'a dağıtmayı kolaylaştırmak için Azure Geliştirici CLI'sini (azd) kullanır. Bu dağıtım, güvenli ve ölçeklenebilir Azure İşlevleri dağıtımları için geçerli en iyi yöntemleri izler.

Flex Tüketim planı varsayılan olarak kullandıkça öde faturalama modelini takip eder; yani bu hızlı başlangıcı tamamlamak Azure hesabınızda birkaç Amerikan doları veya daha az bir maliyete neden olur.

Prerequisites

Projeyi başlatma

azd init Komutunu kullanarak şablondan yerel bir Azure İşlevleri kod projesi oluşturun.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnet
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Uygulama klasörüne gitmek için http şu komutu çalıştırın:

    cd http
    
  3. Bu JSON verilerini içeren klasörde local.settings.jsonhttp adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-java 
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Uygulama klasörüne gitmek için http şu komutu çalıştırın:

    cd http
    
  3. Bu JSON verilerini içeren klasörde local.settings.jsonhttp adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template functions-quickstart-javascript-azd -e httpendpoint-js
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template functions-quickstart-powershell-azd -e httpendpoint-ps
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Uygulama klasörüne gitmek için src şu komutu çalıştırın:

    cd src
    
  3. Bu JSON verilerini içeren klasörde local.settings.jsonsrc adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template functions-quickstart-typescript-azd -e httpendpoint-ts
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template functions-quickstart-python-http-azd -e httpendpoint-py
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli -e ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

Sanal ortam oluşturma ve etkinleştirme

Kök klasörde şu komutları çalıştırarak adlı .venvbir sanal ortam oluşturun ve etkinleştirin:

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

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

sudo apt-get install python3-venv

Yerel ortamınızda çalıştırma

  1. Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:

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

    İşlevler konağı yerel proje klasörünüzde başlatıldığında, HTTP ile tetiklenen işlevlerinizin URL uç noktalarını terminal çıkışına yazar.

    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.

  2. Tarayıcınızda şu URL'ye httpget benzeyen uç noktaya gidin:

    http://localhost:7071/api/httpget

  3. Yeni bir terminal veya komut istemi penceresinden şu curl komutu çalıştırarak uç noktaya JSON yüküne httppost sahip bir POST isteği gönderin:

    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
    
    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
    

    Bu komut proje dosyasından testdata.json JSON yük verilerini okur. Her iki HTTP isteğinin test.http örneklerini proje dosyasında bulabilirsiniz.

  4. İşiniz bittiğinde, ana bilgisayar işlemini durdurmak func.exe için terminal penceresinde Ctrl+C tuşlarına basın.

  1. Sanal ortamı kapatmak için komutunu çalıştırın deactivate .

Kodu gözden geçirme (isteğe bağlı)

İki HTTP tetikleyici işlevi uç noktasını tanımlayan kodu gözden geçirebilirsiniz:

       [Function("httpget")]
       public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
         HttpRequest req,
         string name)
       {
           var returnValue = string.IsNullOrEmpty(name)
               ? "Hello, World."
               : $"Hello, {name}.";

           _logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");

           return new OkObjectResult(returnValue);
       }
@FunctionName("httpget")
public HttpResponseMessage run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.FUNCTION)
            HttpRequestMessage<Optional<String>> request,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");

    return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || await request.text() || 'world';

        return { body: `Hello, ${name}!` };
    }
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || await request.text() || 'world';

    return { body: `Hello, ${name}!` };
};

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: httpGetFunction
});

Bu function.json dosya işlevi httpget tanımlar:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get"
      ],
      "route": "httpget"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

Bu run.ps1 dosya işlev kodunu uygular:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters
$name = $Request.Query.name

$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get("name", "World")

    logging.info(f"Processing GET request. Name: {name}")

    return func.HttpResponse(f"Hello, {name}!")

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

İşlevlerinizi yerel olarak doğruladıktan sonra, bunları Azure'da yayımlamanın zamanı geldi.

Azure’a dağıtın

Bu proje, bu projeyi Azure'daki Flex Consumption planındaki yeni bir işlev uygulamasına dağıtmak için komutunu kullanacak azd up şekilde yapılandırılmıştır.

Tip

Proje, en iyi yöntemleri izleyen bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanılan infra klasöründeki bicep dosyası kümesini azd içerir.

  1. Azure'da azd gerekli Azure kaynaklarını oluşturmak ve kod projenizi yeni işlev uygulamasına dağıtmak için şu komutu çalıştırın:

    azd up
    

    Kök klasör, için azure.yamlgereken tanım dosyasını içerirazd.

    Henüz oturum açmadıysanız Azure hesabınızla kimlik doğrulaması yapmanız istenir.

  2. İstendiğinde şu gerekli dağıtım parametrelerini sağlayın:

    Parameter Description
    Azure aboneliği Kaynaklarınızın oluşturulduğu abonelik.
    Azure konumu Yeni Azure kaynaklarını içeren kaynak grubunun oluşturulacağı Azure bölgesi. Yalnızca şu anda Esnek Tüketim planını destekleyen bölgeler gösterilir.
    vnetEnabled Yanlış'ı seçin. True olarak ayarlandığında dağıtım, işlev uygulamanızı yeni bir sanal ağda oluşturur.

    Komut, azd up bu dağıtım görevlerini tamamlamak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtlarınızı kullanır:

    • Bu gerekli Azure kaynaklarını oluşturun ve yapılandırın (eşdeğeri azd provision):

      • Esnek Tüketim planı ve işlev uygulaması
      • Azure Depolama (gerekli) ve Application Insights (önerilir)
      • Hesabınız için ilkelere ve rollere erişme
      • Yönetilen kimlikleri kullanan hizmet-hizmet bağlantıları (depolanan bağlantı dizesi yerine)
      • (Seçenek) Hem işlev uygulamasını hem de diğer Azure kaynaklarını güvenli bir şekilde çalıştırmak için sanal ağ
    • Kodunuzu paketleyin ve dağıtım kapsayıcısına dağıtın (eşdeğeri azd deploy). Ardından uygulama başlatılır ve dağıtılan pakette çalıştırılır.

    Komut başarıyla tamamlandıktan sonra, oluşturduğunuz kaynakların bağlantılarını görürsünüz.

İşlevi Azure'da çağırma

Artık HTTP test aracınızı kullanarak veya tarayıcıdan (GET istekleri için) URL'lerine HTTP isteklerinde bulunarak Azure'daki işlev uç noktalarınızı çağırabilirsiniz. İşlevleriniz Azure'da çalıştırıldığında erişim anahtarı yetkilendirmesi zorlanır ve isteğinizle birlikte bir işlev erişim anahtarı sağlamanız gerekir.

İşlevlerinizin URL uç noktalarını Azure'da çalıştırmak için Çekirdek Araçları'nı kullanabilirsiniz.

  1. Yerel terminalinizde veya komut isteminizde şu komutları çalıştırarak URL uç noktası değerlerini alın:

    SET APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    
    $APP_NAME = azd env get-value AZURE_FUNCTION_NAME
    func azure functionapp list-functions $APP_NAME --show-keys
    

    komut, azd env get-value işlev uygulamanızın adını yerel ortamdan alır. --show-keys seçeneğini func azure functionapp list-functions ile kullandığınızda, döndürülen Çağırma URL’si: değeri, her uç nokta için işlev seviyesinde bir erişim anahtarı içerir.

  2. Daha önce olduğu gibi, Azure'da çalışan işlev uygulamanızda bu URL'leri doğrulamak için HTTP test aracınızı kullanın.

Kodunuzu yeniden dağıtma

azd up Komutunu hem Azure kaynaklarınızı sağlamak hem de işlev uygulamanıza kod güncelleştirmeleri dağıtmak için gerektiği kadar çalıştırın.

Note

Dağıtılan kod dosyalarının üzerine her zaman en son dağıtım paketi yazılır.

İstemlere ve tarafından azd oluşturulan tüm ortam değişkenlerine azd yönelik ilk yanıtlarınız adlandırılmış ortamınızda yerel olarak depolanır. azd env get-values Azure kaynaklarını oluştururken kullandığınız ortamınızdaki tüm değişkenleri gözden geçirmek için komutunu kullanın.

Kaynakları temizleme

İşlev uygulamanızla ve ilgili kaynaklarla çalışmayı bitirdiğinizde, işlev uygulamasını ve ilgili kaynaklarını Azure'dan silmek ve başka maliyetlerle karşılaşmamak için bu komutu kullanın:

azd down --no-prompt

Note

seçeneği, --no-prompt sizden onay almadan kaynak grubunuzu silmenizi belirtir azd .

Bu komut yerel kod projenizi etkilemez.