Bağlan Azure İşlevleri kullanarak Azure Depolama'e Visual Studio Code

Azure Işlevleri, kendi tümleştirme kodunuzu yazmak zorunda kalmadan Azure hizmetlerini ve diğer kaynakları işlevlere bağlamanıza olanak tanır. Hem giriş hem de çıktıyı temsil eden bu bağlamalar, işlev tanımı içinde bildirilmiştir. Bağlamalardan alınan veriler işleve parametre olarak sağlanır. Tetikleyici özel bir giriş bağlama türüdür. Bir işlevde yalnızca bir tetikleyici olsa da, birden çok giriş ve çıkış bağlaması olabilir. Daha fazla bilgi için bkz. Azure işlevleri Tetikleyicileri ve bağlamaları kavramları.

Bu makalede, Azure Visual Studio Code'Depolama önceki hızlı başlangıç makalesinde oluşturduğunuz işleve bağlamak için Depolama nasıl kullanabileceğiniz gösterir. Bu işleve ekley istediğiniz çıkış bağlaması, HTTP isteğinden Azure Kuyruk depolama kuyruğunda bir iletiye veri yazar.

Bağlamaların çoğu, İşlevlerin bağlı hizmete erişmek için kullandığı depolanmış bir bağlantı dizesi gerektirir. Bunu kolaylaştırmak için işlev Depolama oluşturduğunuz bir hesap kullanırsınız. Bu hesaba bağlantı zaten adlı bir uygulama ayarında AzureWebJobsStorage depolanır.

Yerel ortamınızı yapılandırma

Bu makaleye başlamadan önce aşağıdaki gereksinimleri karşılamanız gerekir:

Bu makalede, azure aboneliğiniz için azure aboneliğinde önceden oturum Visual Studio Code. Komut paletinde komutunu Azure: Sign In çalıştırarak oturumabilirsiniz.

İşlev uygulaması ayarlarını indirme

Önceki hızlı başlangıç makalesinde,Azure'da gerekli hesap ile birlikte bir işlev Depolama oluşturduğunuz. Bu hesabın bağlantı dizesi Azure'daki uygulama ayarlarında güvenli bir şekilde depolanır. Bu makalede, aynı hesapta bir Depolama bir kuyruğa ileti yazarsınız. İşlevi yerel Depolama uygulama hesabınıza bağlanmak için uygulama ayarlarını local.settings.json dosyasına indirmeniz gerekir.

  1. F1 tuşuna basarak komut paletini açın, ardından komutunu arayın ve Azure Functions: Download Remote Settings.... çalıştırın.

  2. Önceki makalede oluşturduğunuz işlev uygulamasını seçin. Mevcut yerel ayarların üzerine yazmak için Evet 'i seçin.

    Önemli

    Gizli diziler içerdiğinden local.settings.json dosyası hiçbir zaman yayımlanmaz ve kaynak denetiminden dışlanır.

  3. Hesap bağlantı AzureWebJobsStorage dizesi değerinin anahtarı olan Depolama değerini kopyalayın. Çıkış bağlamanın beklendiği gibi çalıştığını doğrulamak için bu bağlantıyı kullanırsiniz.

Bağlama uzantılarını kaydetme

Kuyruk depolama çıkış bağlaması kullanıyorsanız projeyi çalıştırmadan önce Depolama bağlamaları uzantısını yüklemiş olması gerekir.

Projeniz, önceden tanımlanmış bir uzantı paketleri kümesi otomatikolarak yüken uzantı paketlerini kullanmak üzere yapılandırıldı.

Uzantı paketleri kullanımı, projenin kökünde yer alan host.json dosyasında etkindir ve şu şekilde görünür:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  } 
}

HTTP ve zamanlayıcı tetikleyicileri dışında bağlamalar uzantı paketleri olarak uygulanır. Terminal penceresinde aşağıdaki dotnet add package komutunu çalıştırarak projenize Depolama paketi ekleyin.

dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage 

Şimdi depolama çıkış bağlamasını projenize eklemek için kullanabilirsiniz.

Şimdi depolama çıkış bağlamasını projenize eklemek için kullanabilirsiniz.

Çıktı bağlaması ekleme

İşlevler'de her bağlama türü direction type name function.json dosyasında tanımlanmalıdır. Bu öznitelikleri tanımlama yolunuz işlev uygulamanın diline bağlıdır.

Bağlama öznitelikleri, dosyasında function.jsdoğrudan tanımlanmıştır. Bağlama türüne bağlı olarak ek özellikler gerekli olabilir. Kuyruk çıkış yapılandırması , bir Azure depolama kuyruğu bağlaması için gereken alanları açıklar. Uzantı, dosyadaki function.jsbağlama eklemeyi kolaylaştırır.

Bir bağlama oluşturmak için, HttpTrigger klasörünüzdeki dosyayı sağ tıklatın (macOS üzerinde CTRL + tıklama) function.json ve bağlama Ekle... seçeneğini belirleyin. Yeni bağlama yönelik aşağıdaki bağlama özelliklerini tanımlamak için istemleri izleyin:

İstem Değer Açıklama
Bağlama yönünü seçin out Bağlama bir çıkış bağlamadır.
Yön içeren bağlamayı seçin... Azure Queue Storage Bağlama bir Azure depolama kuyruğu bağlamadır.
Kodunuzda bu bağlamayı tanımlamak için kullanılan ad msg Kodunuzda başvurulan bağlama parametresini tanımlayan ad.
İletinin gönderileceği kuyruk outqueue Bağlamanın yazdığı kuyruğun adı. SıraAdı mevcut olmadığında, bağlama ilk kullanımda oluşturulur.
"local.setting.json" ayarını seçin AzureWebJobsStorage Depolama hesabı için bağlantı dizesini içeren bir uygulama ayarının adı. AzureWebJobsStorageAyar, işlev uygulamasıyla oluşturduğunuz depolama hesabı için bağlantı dizesini içerir.

Üzerinde function.jsdizisine eklenen bir bağlama bindings , aşağıdaki gibi görünmelidir:

{
  "type": "queue",
  "direction": "out",
  "name": "msg",
  "queueName": "outqueue",
  "connection": "AzureWebJobsStorage"
}

Bir C# projesinde, bağlamalar işlev yönteminde bağlama öznitelikleri olarak tanımlanır. Belirli tanımlar, uygulamanızın işlem içinde (C# sınıf kitaplığı) veya yalıtılmış bir işlemde çalışmasına bağlıdır.

Httpexample. cs proje dosyasını açın ve Yöntem tanımına aşağıdaki parametreyi ekleyin Run :

[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,

msgParametresi ICollector<T> , işlev tamamlandığında çıkış bağlamaya yazılan bir ileti koleksiyonunu temsil eden bir türdür. Bu durumda, çıktı adlı bir depolama kuyruğudur outqueue . Depolama hesabının bağlantı dizesi tarafından ayarlanır StorageAccountAttribute . bu öznitelik, Depolama hesabı bağlantı dizesini içeren ve sınıf, yöntem veya parametre düzeyinde uygulanabilen ayarı gösterir. Bu durumda, StorageAccountAttribute zaten varsayılan depolama hesabını kullandığınızdan atlayabilirsiniz.

Çalıştırma yöntemi tanımı artık aşağıdaki gibi görünmelidir:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)

Java projesinde bağlamalar, işlev yönteminde bağlama ek açıklamaları olarak tanımlanır. Dosyadaki function.js bu ek açıklamaları temel alınarak otomatik olarak oluşturulur.

Src/Main/Java altındaki işlev kodunuzun konumuna gidin, function. Java proje dosyasını açın ve Yöntem tanımına aşağıdaki parametreyi ekleyin run :

@QueueOutput(name = "msg", queueName = "outqueue", 
connection = "AzureWebJobsStorage") OutputBinding<String> msg,

msgParametresi OutputBinding<T> , işlev tamamlandığında çıkış bağlamaya ileti olarak yazılmış dizeler koleksiyonunu temsil eden bir türdür. Bu durumda, çıktı adlı bir depolama kuyruğudur outqueue . Depolama hesabı için bağlantı dizesi yöntemi tarafından ayarlanır connection . Bağlantı dizesinin kendisi yerine, depolama hesabı bağlantı dizesini içeren uygulama ayarını geçirirsiniz.

runYöntem tanımı şimdi aşağıdaki örnekteki gibi görünmelidir:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {

Çıkış bağlaması kullanan kod ekleme

Bağlama tanımlandıktan sonra, işlev imzasını öznitelik olarak name erişmek için bağlamanın işlevini kullanabilirsiniz. Çıkış bağlaması kullanarak kimlik doğrulaması, kuyruk başvurusu alma Depolama veri yazmak için Azure Depolama SDK kodunu kullanmak zorunda değildir. İşlevler çalışma zamanı ve kuyruk çıkış bağlaması bu görevleri sizin için yapar.

msgKuyruk iletisi oluşturmak için çıkış bağlama nesnesi kullanan kodu ekleyin context.bindings . Bu kodu context.res deyimden önce ekleyin.

// Add a message to the Storage queue,
// which is the name passed to the function.
context.bindings.msg = (req.query.name || req.body.name);

Bu noktada, işleviniz aşağıdaki gibi görünmelidir:

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.name || (req.body && req.body.name)) {
        // Add a message to the Storage queue,
        // which is the name passed to the function.
        context.bindings.msg = (req.query.name || req.body.name);
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

msgKuyruk iletisi oluşturmak için çıkış bağlama nesnesi kullanan kodu ekleyin context.bindings . Bu kodu context.res deyimden önce ekleyin.

context.bindings.msg = name;

Bu noktada, işleviniz aşağıdaki gibi görünmelidir:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));

    if (name) {
        // Add a message to the storage queue, 
        // which is the name passed to the function.
        context.bindings.msg = name; 
        // Send a "hello" response.
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

export default httpTrigger;

Push-OutputBindingÇıkış bağlamayı kullanarak bir metni kuyruğa yazmak için cmdlet 'ini kullanan kodu ekleyin msg . Deyimdeki Tamam durumunu ayarlamadan önce bu kodu ekleyin if .

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

Bu noktada, işleviniz aşağıdaki gibi görünmelidir:

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 or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

if ($name) {
    # Write the $name value to the queue, 
    # which is the name passed to the function.
    $outputMsg = $name
    Push-OutputBinding -name msg -Value $outputMsg

    $status = [HttpStatusCode]::OK
    $body = "Hello $name"
}
else {
    $status = [HttpStatusCode]::BadRequest
    $body = "Please pass a name on the query string or in the request body."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = $status
    Body = $body
})

HttpExample \ _ _ init _ _ .py'yi aşağıdaki kodla eşecek şekilde güncelleştirin, msg parametresini işlev tanımına ve msg.set(name) deyiminin altına if name: ekler.

import logging

import azure.functions as func


def main(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> str:

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        msg.set(name)
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
            "Please pass a name on the query string or in the request body",
            status_code=400
        )

msgparametresi bir azure.functions.Out class örneğidir. yöntemi set kuyruğa bir dize iletisi yazar, bu durumda URL sorgu dizesinde işleve geçirilen ad.

msgBir kuyruk iletisi oluşturmak için çıkış bağlama nesnesini kullanan kodu ekleyin. Metodun döndürüldüğünden önce bu kodu ekleyin.

if (!string.IsNullOrEmpty(name))
{
    // Add a message to the output collection.
    msg.Add(string.Format("Name passed to the function: {0}", name));
}

Bu noktada, işleviniz aşağıdaki gibi görünmelidir:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    if (!string.IsNullOrEmpty(name))
    {
        // Add a message to the output collection.
        msg.Add(string.Format("Name passed to the function: {0}", name));
    }
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Şimdi, msg işlev kodunuzda çıkış bağlamaya yazmak için yeni parametresini kullanabilirsiniz. Değerini çıkış bağlamaya eklemek için, başarı yanıtından önce aşağıdaki kod satırını ekleyin name msg .

msg.setValue(name);

Çıkış bağlamayı kullandığınızda, kimlik doğrulaması, kuyruk başvurusu alma veya veri yazma için Azure depolama SDK kodunu kullanmanız gerekmez. Işlevler çalışma zamanı ve kuyruk çıkış bağlaması bu görevleri sizin için işler.

runYönteminiz aşağıdaki örnekteki gibi görünmelidir:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    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 {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

Testleri güncelleştirme

Ayrıca, aynı zamanda bir test kümesi oluşturduğundan, yöntem imzasında yeni parametreyi işlemek için bu testleri güncelleştirmeniz gerekir msg run .

Src/test/Java altındaki test kodunuzun konumuna gidin, function. Java proje dosyasını açın ve altındaki kod satırını //Invoke aşağıdaki kodla değiştirin.

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

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

Visual Studio Code, Azure'Azure İşlevleri yayımlamadan önce bu projeyi yerel geliştirme bilgisayarınızda çalıştırmanıza izin vermenizi sağlar.

  1. İşlevini çağırarak F5 tuşuna basarak işlev uygulaması projesini başlatabilirsiniz. Temel Araçlar’daki çıktı, Terminal panelinde görüntülenir. Uygulamanız Terminal panelinden başlar. HTTP ile tetiklenen işlevinizin URL uç noktasının yerel olarak çalıştır çalıştırıi olduğunu görüyorsunuz.

    Yerel işlev VS Code çıkış

    Windows'da çalıştırma konusunda sorun Visual Studio Code için varsayılan terminalin WSL Bash olarak ayarlanmay olduğundan emin olun.

  2. Core Tools çalışıyorken Azure: İşlevler alanına gidin. İşlevler'in altında, Yerel Project İşlevler'i > genişletin. İşleve sağ tıklayın (Windows) veya Ctrl tuşunu basılı tutarak (macOS) HttpExample tıklayın ve İşlevi Şimdi Yürüt... öğesini seçin.

    İşlevi şimdi Visual Studio Code

  3. İstek gövdenizi girin içinde, işlevinize bir istek iletisi göndermek için Enter tuşuna basın.

  4. İşlev yerel olarak yürütülür ve bir yanıt döndürülürken, bir bildirim Visual Studio Code. İşlev yürütmesi hakkında bilgiler Terminal panelinde gösterilir.

  5. Core Tools'ı durdurmak ve hata ayıklayıcının bağlantısını kesmek için Ctrl + C tuşlarına basın.

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

  1. Önceki makalede olduğu gibi, işlev uygulaması projesini ve Core Tools'i başlatmak için F5 tuşuna basın.

  2. Core Tools çalışıyorken Azure: İşlevler alanına gidin. İşlevler altında Yerel İşlevler'Project > genişletin. İşleve sağ tıklayın (Mac'e Ctrl tuşunu basılı tutarak HttpExample tıklayın) ve İşlevi Şimdi Yürüt... öğesini seçin.

    İşlevi şimdi Visual Studio Code

  3. İstek gövdeyi girin içinde istek iletisi gövdesi değerini { "name": "Azure" } görüyorsunuz. Bu istek iletiyi işlevinize göndermek için Enter tuşuna basın.

  4. Yanıt döndürüldikten sonra Core Tools'ları durdurmak için Ctrl + C tuşlarına basın.

Depolama bağlantı dizesini kullanmakta olduğunuz için işleviniz yerel olarak çalıştırarak Azure depolama hesabına bağlanır. Çıkış bağlaması ilk kez kullanılırken depolama hesabınıza İşlevler çalışma zamanı tarafından outqueue adlı yeni bir kuyruk oluşturulur. Kuyruğun yeni iletiyle Depolama Gezgini doğrulamak için Depolama Gezgini'i kullanırsınız.

Depolama Gezgini’ni hesabınıza bağlama

Azure hesabınıza önceden yüklemiş ve Azure Depolama Gezgini bu bölümü atlayabilirsiniz.

  1. Uygulama Azure Depolama Gezgini çalıştırın, sol tarafta bağlan simgesini seçin ve Hesap ekle'yi seçin.

    Azure hesabını Microsoft Azure Depolama Gezgini

  2. Oturum Bağlan Azure hesabı ekle'yi seçin, Azure ortamınızı seçin ve Oturum aç... öğesini seçin.

    Azure hesabınızda oturum açma

Hesabınızla başarıyla oturum açmanızın ardından hesabınızla ilişkilendirilmiş tüm Azure aboneliklerini görüyorsunuz.

Çıkış kuyruğunu inceleme

  1. Bu Visual Studio Code F1 tuşuna basarak komut paletini açın, ardından komutu arayın ve çalıştırın ve hesap Azure Storage: Open in Storage Explorer Depolama seçin. Depolama hesabınız Azure Depolama Gezgini.

  2. Kuyruklar düğümünü genişletin ve sonra outqueue adlı kuyruğu seçin.

    Kuyruk, HTTP ile tetiklenen işlevi çalıştırdığınızda kuyruk çıkış bağlamasının oluşturduğu iletiyi içerir. İşlevi varsayılan nameAzure değeri ile çağırdıysanız, kuyruk iletisi İşleve geçirilen ad: Azure şeklinde olur.

    Kuyruk iletisi Azure Depolama Gezgini

  3. İşlevi yeniden çalıştırın, başka bir istek gönderin; kuyrukta yeni bir ileti görüntülenir.

Şimdi güncelleştirilmiş işlev uygulamasını Azure'da yeniden yayımlamanın zamanı geldi.

Güncelleştirilmiş uygulamayı yeniden uygulama ve doğrulama

  1. Komut Visual Studio Code F1 tuşuna basarak komut paletini açın. Komut paletinde öğesini arayın ve öğesini Azure Functions: Deploy to function app... seçin.

  2. İlk makalede oluşturduğunuz işlev uygulamasını seçin. Projenizi aynı uygulamaya yeniden dağıtıyorsanız, dosyaların üzerine yazma uyarısını silmek için Dağıt'ı seçin.

  3. Dağıtım tamamlandıktan sonra işlevi Azure'da tetiklemek için İşlevi Şimdi Yürüt... özelliğini yeniden kullanabilirsiniz.

  4. Çıkış bağlamanın kuyrukta yeniden yeni bir ileti oluşturanı doğrulamak için depolama kuyruğunda iletiyi yeniden görüntüleme.

Kaynakları temizleme

Azure'da kaynaklar işlev uygulamalarına, işlevlere, depolama hesaplarına vb. başvurur. Bunlar kaynak gruplarına ayrılır ve grubu silerek bir gruptaki her şeyi silebilirsiniz.

Bu hızlı başlangıçları tamamlamak için kaynaklar oluşturdunuz. Hesap durumunuza ve hizmet fiyatlandırmanıza bağlı olarak size bu kaynakların ücretleri yansıtılabilir. Kaynaklara artık ihtiyacınız yoksa, şunları yaparak silebilirsiniz:

  1. Visual Studio Code ' de, F1 tuşuna basarak komut paletini açın. Komut paletinde, araması yapın ve seçin Azure Functions: Open in portal .

  2. İşlev uygulamanızı seçin ve ENTERtuşuna basın. İşlev uygulaması sayfası Azure portal açılır.

  3. Genel bakış sekmesinde kaynak grubu' nun yanındaki adlandırılmış bağlantıyı seçin.

    İşlev uygulaması sayfasından silinecek kaynak grubunu seçin.

  4. Kaynak grubu sayfasında, dahil edilen kaynakların listesini gözden geçirin ve silmek istediğiniz kaynakların bunlar olduğunu doğrulayın.

  5. Kaynak grubunu sil’i seçin ve yönergeleri izleyin.

    Silme işlemi birkaç dakika sürebilir. İşlem tamamlandığında, birkaç saniye boyunca bir bildirim görüntülenir. Bildirimi görüntülemek için sayfanın üst kısmındaki zil simgesini de seçebilirsiniz.

Sonraki adımlar

HTTP ile tetiklenen işlevinizi bir veri kuyruğuna veri Depolama güncelleştirildi. Artık Visual Studio Code kullanarak İşlev geliştirme hakkında daha fazla Visual Studio Code: