Aracılığıyla paylaş


Hızlı Başlangıç: Azure Geliştirici CLI'sini kullanarak işlevleri oluşturma ve Azure İşlevleri dağıtma

Bu Hızlı Başlangıçta, HTTP isteklerine yanıt veren işlevler 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 kullansanız ne kadar öde faturalama modelini izler ve bu da bu hızlı başlangıcı tamamlamak için Azure hesabınızda birkaç ABD doları veya daha az bir maliyete neden olur.

Önkoşullar

Projeyi başlatma

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

  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 flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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.json http 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 flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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.json http 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 flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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 flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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.json src 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 flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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-python-http-azd -e flexquickstart-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. içinde azd, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır 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": "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üklemediyse 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.

  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 kaynakları oluşturma

Bu proje, gerekli diğer Azure kaynaklarıyla birlikte Flex Consumption planında işlev uygulaması oluşturmak için komutunu kullanacak azd provision şekilde yapılandırılmıştır.

Not

Bu proje, en iyi yöntemleri izleyen azd bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanan bicep dosyaları kümesini içerir.

azd up ve azd deploy komutları şu anda Java uygulamaları için desteklenmemekte.

  1. Projenin kök klasöründe şu komutu çalıştırarak gerekli Azure kaynaklarını oluşturun:

    azd provision
    

    Kök klasör, için azdgereken tanım dosyasını içerirazure.yaml.

    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:

    Parametre Açıklama
    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.

    Komut, azd provision bu gerekli Azure kaynaklarını oluşturmak ve yapılandırmak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtınızı kullanır:

    • 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)
    • Hem işlev uygulamasını hem de diğer Azure kaynaklarını güvenli bir şekilde çalıştırmak için sanal ağ

    Komut başarıyla tamamlandıktan sonra proje kodunuzu Azure'daki bu yeni işlev uygulamasına dağıtabilirsiniz.

Azure’a dağıtın

Kodunuzu paketlemek ve çıkış klasöründen Azure'a target dağıtmak için Core Tools'ı kullanabilirsiniz.

  1. Çıkış klasöründeki uygulama klasörü eşdeğerine target gidin:

    cd http/target/azure-functions/contoso-functions
    

    Bu klasörde, derlenmiş Java işlev uygulamanızın kökü olduğunu gösteren bir host.json dosyası olmalıdır.

  2. Derlenmiş Java kod projenizi Core Tools kullanarak Azure'daki yeni işlev uygulaması kaynağına dağıtmak için şu komutları çalıştırın:

    APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp publish $APP_NAME
    

    komutu azd env get-value , işlev uygulamanızın adını kullanarak func azure functionapp publishdağıtım için gereken yerel ortamdan alır. Yayımlama başarıyla tamamlandıktan sonra Azure'da HTTP tetikleyici uç noktalarına bağlantılar görürsünüz.

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.

İpucu

Bu proje, en iyi yöntemleri izleyen azd bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanan bicep dosyaları kümesini 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 azdgereken tanım dosyasını içerirazure.yaml.

    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:

    Parametre Açıklama
    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.

    Komut, azd up bu dağıtım görevlerini tamamlamak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtı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)
      • 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.

Azure'da çalışan işlevlerinizin URL uç noktalarını almak için Temel Araçlar'ı 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. ile seçeneğinin --show-keys kullanılması, her uç nokta için döndürülen Invoke URL: değerinin işlev düzeyinde bir erişim anahtarı içerdiği anlamına func azure functionapp list-functions gelir.

  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

Komutu 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ırabilirsiniz azd up .

Not

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ı oluşturulurken kullanılan ortamınızdaki tüm değişkenleri gözden geçirmek için komutunu kullanın.

Kaynakları temizleme

İşlev uygulamanız ve ilgili kaynaklarınızla ç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 kullanabilirsiniz:

azd down --no-prompt

Not

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

Bu komut yerel kod projenizi etkilemez.