Bağlamaları kullanarak işlevleri Azure hizmetlerine bağlama

Bir işlev oluşturduğunuzda, proje ortamınıza bir dizi tetikleyici şablonundan dile özgü tetikleyici kodu eklenir. İşlevinizi giriş veya çıkış bağlamalarını kullanarak diğer hizmetlere bağlamak istiyorsanız, işlevinize belirli bağlama tanımları eklemeniz gerekir. Bağlamalar hakkında daha fazla bilgi edinmek için bkz. Azure İşlevleri tetikleyicileri ve bağlamaları kavramları.

Yerel geliştirme

İşlevleri yerel olarak geliştirirken, bağlama eklemek için işlev kodunu güncelleştirmeniz gerekir. function.jsonkullanan diller için Visual Studio Code işlevine bağlama eklemek için araçlar sağlar.

Örneklere göre bağlamaları el ile ekleme

Var olan bir işleve bağlama eklerken, koddaki işlev tanımına bağlamaya özgü öznitelikler eklemeniz gerekir.

Var olan bir işleve bağlama eklerken, koddaki işlev tanımına bağlamaya özgü ek açıklamalar eklemeniz gerekir.

Var olan bir işleve bağlama eklerken işlev kodunu güncelleştirmeniz ve function.json yapılandırma dosyasına bir tanım eklemeniz gerekir.

Var olan bir işleve bağlama eklerken, modelinize bağlı olarak işlev tanımını güncelleştirmeniz gerekir:

Koddaki işlev tanımına bağlama özgü ek açıklamalar eklemeniz gerekir.

Go'da, işlevinizdeki akıcı kayıt API'sini kullanarak desteklenen tetikleyicileri yapılandırabilirsiniz main() . Her tetikleyici türü, yapılandırma için işlevsel seçenekler içeren ayrılmış bir kayıt yöntemine sahiptir. Ayrı bağlama yapılandırma dosyası gerekmez.

Aşağıdaki örnekte HTTP ile tetiklenen bir işlev gösterilmektedir. Go işlevinden Kuyruk Depolama'ya yazmanız gerekiyorsa, Kuyruk Depolama çıkış bağlamaları şu anda Go çalışanı tarafından desteklenmediğinden doğrudan Go için Azure SDK kullanın:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"

    "github.com/azure/azure-functions-golang-worker/sdk"
    "github.com/azure/azure-functions-golang-worker/worker"
)

func main() {
    app := sdk.FunctionApp()
    app.HTTP("HttpExample", httpHandler,
        sdk.WithMethods("GET", "POST"),
        sdk.WithAuth("anonymous"),
    )
    worker.Start(app)
}

func httpHandler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
        var body struct{ Name string }
        json.NewDecoder(r.Body).Decode(&body)
        name = body.Name
    }
    if name == "" {
        w.WriteHeader(http.StatusBadRequest)
        fmt.Fprint(w, "Please pass a name on the query string or in the request body.")
        return
    }
    // Queue output bindings are not yet supported in the Go worker.
    // Use the Azure SDK for Go to write to Queue Storage directly.
    fmt.Fprintf(w, "Hello, %s!", name)
}

Note

Go çalışanı şu anda yalnızca tetikleyicileri destekler. Kuyruk Depolama çıkış bağlamaları gibi giriş ve çıkış bağlamaları henüz kullanılamıyor. Go için Azure SDK kullanarak doğrudan işlev kodunuzdan diğer Azure hizmetleriyle etkileşime geçin.

Go çalışanı şu anda aşağıdaki tetikleyici türlerini destekler:

Tetikleyici türü Kayıt yöntemi Örnekler
HTTP app.HTTP() HTTP örnekleri
Zamanlayıcı app.Timer() Timer örnekleri
Azure Cosmos DB app.CosmosDB() Cosmos DB örnekleri
Azure Service Bus (Kuyruk) app.ServiceBusQueue() Service Bus kuyruk örnekleri
Azure Service Bus (Konu) app.ServiceBusTopic() Service Bus konu örnekleri
Etkinlik Merkezleri app.EventHub() Event Hubs örnekleri
Event Grid app.EventGrid() Event Grid örnekleri
Blob Depolama app.Blob() Blob örnekleri

Daha fazla bilgi için Bkz. Go geliştirici başvurusu.

Aşağıdaki örnekte, HTTP ile tetiklenen bir işleve Queue Storage çıkış bağlaması eklendikten sonra işlev tanımı gösterilmektedir:

HTTP ile tetiklenen bir işlev bir HTTP yanıtı da döndürdüğünden, işlev hem HTTP hem de kuyruk çıkışını temsil eden bir MultiResponse nesne döndürür.

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)

Bu örnek, çıkış bağlamasını MultiResponse içeren nesnenin tanımıdır:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public IActionResult HttpResponse { get; set; }
}

Bu örnekte ASP.NET Core integration kullanılır. ASP.NET Core tümleştirme kullanmıyorsanız, HttpRequestHttpRequestData ve IActionResultHttpResponseData olarak değiştirmeniz gerekir.

İşlev tamamlandığında iletiler kuyruğa gönderilir. Çıkış bağlamasını tanımlama şekliniz işlem modelinize bağlıdır. Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

@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) {

Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

const { app, output } = require('@azure/functions');

const sendToQueue = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

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

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (name) {
        const msg = `Name passed to the function ${name}`;
        context.extraOutputs.set(sendToQueue, [msg]);
        return { body: msg };
      } else {
        context.log('Missing required data');
        return { status: 404, body: 'Missing required data' };
      }
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Çıkış bağlamasını tanımlama şekliniz, Node.js modelinizin sürümüne bağlıdır. Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

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

Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

Çıkış bağlamasını tanımlama şekliniz Python modelinizin sürümüne bağlıdır. Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

import {
  app,
  output,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
  StorageQueueOutput,
} from '@azure/functions';

const sendToQueue: StorageQueueOutput = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

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

    const name = request.query.get('name') || (await request.text());
    context.log(`Name: ${name}`);

    if (name) {
      const msg = `Name passed to the function ${name}`;
      context.extraOutputs.set(sendToQueue, [msg]);
      return { body: msg };
    } else {
      context.log('Missing required data');
      return { status: 404, body: 'Missing required data' };
    }
  } catch (error) {
    context.log(`Error: ${error}`);
    return { status: 500, body: 'Internal Server Error' };
  }
}

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: HttpExample,
});

Çıkış bağlamasını tanımlama şekliniz, Node.js modelinizin sürümüne bağlıdır. Daha fazla bilgi ve başvurabileceğiniz örnek bağlama kodlarının bağlantıları için İşleve bağlama ekleme konusuna bakın.

Mevcut bir işlevi güncelleştirmede size yol göstermek için kullanabileceğiniz belirli bağlama türlerinin örneklerini bulmak için aşağıdaki tabloyu kullanın. İlk olarak, projenize karşılık gelen dil sekmesini seçin.

C# için bağlama kodu, belirli işlem modeline bağlıdır.

Hizmet Örnekler Örnekler
Blob Depolama (Blob Depolama) Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Veri Gezgini Input
Output
Link
Azure SQL Trigger
Input
Output
Link
Etkinlik Ağı Trigger
Output
Link
Event Hubs Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Kuyruk Depolama Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Hizmeti Trigger
Input
Output
Tablo Depolama Input
Output
Zamanlayıcı Trigger Link
Twilio Output Link
Hizmet Örnekler Örnekler
Blob Depolama (Blob Depolama) Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Veri Gezgini Input
Output
Link
Azure SQL Trigger
Input
Output
Etkinlik Ağı Trigger
Output
Link
Event Hubs Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Kuyruk Depolama Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Hizmeti Trigger
Input
Output
Tablo Depolama Input
Output
Zamanlayıcı Trigger Link
Twilio Output
Hizmet Örnekler Örnekler
Blob Depolama (Blob Depolama) Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Veri Gezgini Input
Output
Azure SQL Trigger
Input
Output
Link
Etkinlik Ağı Trigger
Output
Event Hubs Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Kuyruk Depolama Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Hizmeti Trigger
Input
Output
Tablo Depolama Input
Output
Zamanlayıcı Trigger
Twilio Output
Hizmet Örnekler Örnekler
Blob Depolama (Blob Depolama) Trigger
Input
Output
Azure Cosmos DB Trigger
Input
Output
Azure SQL Trigger
Input
Output
Etkinlik Ağı Trigger
Output
Event Hubs Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Kuyruk Depolama Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Azure SignalR Hizmeti Trigger
Input
Output
Tablo Depolama Input
Output
Zamanlayıcı Trigger
Twilio Output

Python için bağlama kodu, Python modeli sürümüne bağlıdır.

Hizmet Örnekler Örnekler
Blob Depolama (Blob Depolama) Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Veri Gezgini Input
Output
Azure SQL Trigger
Input
Output
Link
Etkinlik Ağı Trigger
Output
Event Hubs Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Kuyruk Depolama Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Hizmeti Trigger
Input
Output
Tablo Depolama Input
Output
Zamanlayıcı Trigger
Twilio Output

Visual Studio Kodu

İşlevinizi geliştirmek için Visual Studio Code kullandığınızda ve işleviniz function.json bir dosya kullandığında, Azure İşlevleri uzantısı otomatik olarak var olan bir function.json dosyasına bağlama ekleyebilir. Daha fazla bilgi edinmek için bkz. Giriş ve çıkış bağlamaları ekleme.

Azure portal

İşlevlerinizi Azure portal içinde geliştirdiğinizde, belirli bir işlevin Integrate sekmesine giriş ve çıkış bağlamaları eklersiniz. Yeni bağlamalar, dilinize bağlı olarak function.json dosyasına veya yöntem özniteliklerine eklenir. Aşağıdaki makalelerde portalda var olan bir işleve bağlama ekleme örnekleri gösterilmektedir:

Sonraki Adımlar