Azure İşlevleri 1.x için Azure Cosmos DB bağlamaları

Bu makalede, Azure İşlevleri'da Azure Cosmos DB bağlamalarıyla çalışma adımları açıklanmaktadır. Azure İşlevleri, Azure Cosmos DB için tetikleyici, giriş ve çıkış bağlamalarını destekler.

Not

Bu makale Azure İşlevleri 1.x içindir. İşlevler 2.x ve üzeri sürümlerde bu bağlamaların nasıl kullanılacağı hakkında bilgi için bkz. Azure İşlevleri 2.x için Azure Cosmos DB bağlamaları.

Bu bağlama ilk olarak DocumentDB olarak adlandırıldı. Azure İşlevleri sürüm 1.x'te yalnızca tetikleyici Azure Cosmos DB olarak yeniden adlandırıldı; giriş bağlaması, çıkış bağlaması ve NuGet paketi DocumentDB adını korur.

Not

Azure Cosmos DB bağlamaları yalnızca SQL API ile kullanım için desteklenir. Diğer tüm Azure Cosmos DB API'leri için, MongoDB için Azure Cosmos DB, Apache Cassandra için Azure Cosmos DB, Apache Gremlin için Azure Cosmos DB ve Tablo için Azure Cosmos DB de dahil olmak üzere API'nizin statik istemcisini kullanarak işlevinizden veritabanına erişmeniz gerekir.

Paketler - İşlevler 1.x

İşlevler sürüm 1.x için Azure Cosmos DB bağlamaları Microsoft.Azure.WebJobs.Extensions.DocumentDB NuGet paketi, sürüm 1.x'te sağlanır. Bağlamaların kaynak kodu azure-webjobs-sdk-extensions GitHub deposundadır.

Aşağıdaki tabloda, her geliştirme ortamında bu bağlama için nasıl destek ekleneceği açıklanır.

Geliştirme ortamı 'da destek eklemek için
İşlevler 1.x
Yerel geliştirme - C# sınıf kitaplığı Paketi yükleme
Yerel geliştirme - C# betiği, JavaScript, F# Automatic
Portal geliştirme Automatic

Tetikleyici

Azure Cosmos DB Tetikleyicisi, bölümler arasında eklemeleri ve güncelleştirmeleri dinlemek için Azure Cosmos DB Değişiklik Akışı'nı kullanır. Değişiklik akışı silmeleri değil eklemeleri ve güncelleştirmeleri yayımlar.

Tetikleyici - örnek

Aşağıdaki örnekte, belirtilen veritabanı ve koleksiyonda eklemeler veya güncelleştirmeler olduğunda çağrılan işlem içi bir C# işlevi gösterilmektedir.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;

namespace CosmosDBSamplesV1
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Info($"Documents modified: {documents.Count}");
                log.Info($"First document Id: {documents[0].Id}");
            }
        }
    }
}

Tetikleyici - öznitelikler

İşlem içi C# sınıf kitaplıkları için CosmosDBTrigger özniteliğini kullanın.

Özniteliğin oluşturucusunun veritabanı adı ve koleksiyon adı alır. Yapılandırabileceğiniz ayarlar ve diğer özellikler hakkında bilgi için bkz . Tetikleyici - yapılandırma. Yöntem imzasında bir CosmosDBTrigger öznitelik örneği aşağıda verilmiştir:

    [FunctionName("DocumentUpdates")]
    public static void Run(
        [CosmosDBTrigger("database", "collection", ConnectionStringSetting = "myCosmosDB")]
    IReadOnlyList<Document> documents,
        TraceWriter log)
    {
        ...
    }

Tam bir örnek için bkz . Tetikleyici - C# örneği.

Tetikleyici - yapılandırma

Aşağıdaki tabloda function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri ve CosmosDBTrigger özniteliği açıklanmaktadır.

function.json özelliği Öznitelik özelliği Description
Türü yok olarak ayarlanmalıdır cosmosDBTrigger.
Yön yok olarak ayarlanmalıdır in. Bu parametre, tetikleyiciyi Azure portal oluşturduğunuzda otomatik olarak ayarlanır.
Adı yok Değişiklikleri olan belgelerin listesini temsil eden işlev kodunda kullanılan değişken adı.
connectionStringSetting ConnectionStringSetting İzlenen Azure Cosmos DB hesabına bağlanmak için kullanılan bağlantı dizesini içeren uygulama ayarının adı.
veritabanıAdı Databasename Koleksiyonun izlendiği Azure Cosmos DB veritabanının adı.
Toplamaadı Toplamaadı İzlenen koleksiyonun adı.
leaseConnectionStringSetting LeaseConnectionStringSetting (İsteğe bağlı) Kira koleksiyonunu tutan hizmete yönelik bağlantı dizesini içeren bir uygulama ayarının adı. Ayarlanmadığında connectionStringSetting değer kullanılır. Bu parametre, portalda bağlama oluşturulduğunda otomatik olarak ayarlanır. Kira koleksiyonu için bağlantı dizesi yazma izinlerine sahip olmalıdır.
leaseDatabaseName LeaseDatabaseName (İsteğe bağlı) Kiraları depolamak için kullanılan koleksiyonu tutan veritabanının adı. Ayarlanmadığında ayarın databaseName değeri kullanılır. Bu parametre, portalda bağlama oluşturulduğunda otomatik olarak ayarlanır.
leaseCollectionName LeaseCollectionName (İsteğe bağlı) Kiraları depolamak için kullanılan koleksiyonun adı. Ayarlanmadığında değer leases kullanılır.
createLeaseCollectionIfNotExists CreateLeaseCollectionIfNotExists (İsteğe bağlı) olarak trueayarlandığında, kira koleksiyonu henüz mevcut olmadığında otomatik olarak oluşturulur. false varsayılan değerdir.
leasesCollectionThroughput LeasesCollectionThroughput (İsteğe bağlı) Kira koleksiyonu oluşturulduğunda atanacak İstek Birimi miktarını tanımlar. Bu ayar yalnızca olarak createLeaseCollectionIfNotExists ayarlandığında truekullanılır. Bağlama portal kullanılarak oluşturulduğunda bu parametre otomatik olarak ayarlanır.
leaseCollectionPrefix LeaseCollectionPrefix (İsteğe bağlı) Ayarlandığında, bu İşlev için Kira koleksiyonunda oluşturulan kiralara bir ön ek ekler ve etkili bir şekilde iki ayrı Azure İşlevleri farklı ön ekler kullanarak aynı Kira koleksiyonunu paylaşmasına izin verir.
feedPollDelay FeedPollDelay (İsteğe bağlı) Ayarlandığında, tüm geçerli değişiklikler boşaltıldıktan sonra bir bölümü akıştaki yeni değişiklikler için yoklama arasındaki gecikmeyi milisaniye cinsinden tanımlar. Varsayılan değer 5000'dir (5 saniye).
leaseAcquireInterval LeaseAcquireInterval (İsteğe bağlı) Ayarlandığında, bölümlerin bilinen konak örnekleri arasında eşit olarak dağıtılıp dağıtılamadığını hesaplamak için bir görevi başlatma aralığını milisaniye cinsinden tanımlar. Varsayılan değer 13000'dir (13 saniye).
leaseExpirationInterval LeaseExpirationInterval (İsteğe bağlı) Ayarlandığında, bölümü temsil eden bir kirada kiranın alındığı aralığı milisaniye cinsinden tanımlar. Kira bu aralık içinde yenilenmezse süresi dolmasına neden olur ve bölümün sahipliği başka bir örneğe taşınır. Varsayılan değer 60000'dir (60 saniye).
leaseRenewInterval LeaseRenewInterval (İsteğe bağlı) Ayarlandığında, bir örnek tarafından tutulan bölümler için tüm kiralamalar için yenileme aralığını milisaniye cinsinden tanımlar. Varsayılan değer 17000'dir (17 saniye).
checkpointFrequency CheckpointFrequency (İsteğe bağlı) Ayarlandığında, kira denetim noktaları arasındaki aralığı milisaniye cinsinden tanımlar. Varsayılan değer her zaman her İşlev çağrısının ardındandır.
maxItemsPerInvocation MaxItemsPerInvocation (İsteğe bağlı) Ayarlandığında, İşlev çağrısı başına alınan en fazla öğe miktarını özelleştirir.
startFromBeginning StartFromBeginning (İsteğe bağlı) Ayarlandığında Tetikleyiciye değişiklikleri geçerli saat yerine koleksiyon geçmişinin başından itibaren okumaya başlamasını bildirir. Bu yalnızca Tetikleyici ilk kez başlatıldığında çalışır; sonraki çalıştırmalarda olduğu gibi denetim noktaları zaten depolanır. true Bu ayarın önceden oluşturulmuş kiralar olduğunda olarak ayarlanmasının hiçbir etkisi yoktur.

Yerel olarak geliştirirken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.

Tetikleyici - kullanım

Tetikleyici, bölümler üzerinde kiraları depolamak için kullandığı ikinci bir koleksiyon gerektirir. Tetikleyicinin çalışması için hem izlenen koleksiyon hem de kiraları içeren koleksiyon kullanılabilir olmalıdır.

Önemli

Aynı koleksiyon için bir Azure Cosmos DB tetikleyicisi kullanmak üzere birden çok işlev yapılandırıldıysa, işlevlerin her biri ayrılmış bir kira koleksiyonu kullanmalıdır veya her işlev için farklı LeaseCollectionPrefix bir değer belirtmelidir. Aksi takdirde, işlevlerden yalnızca biri tetiklenir. Ön ek hakkında bilgi için Yapılandırma bölümüne bakın.

Tetikleyici, belgenin güncelleştirildiğini veya eklendiğini göstermez, yalnızca belgenin kendisini sağlar. Güncelleştirmeleri ve eklemeleri farklı şekilde işlemeniz gerekiyorsa, ekleme veya güncelleştirme için zaman damgası alanları uygulayarak bunu yapabilirsiniz.

Giriş

Azure Cosmos DB giriş bağlaması SQL API'sini kullanarak bir veya daha fazla Azure Cosmos DB belgesini getirir ve işlevin giriş parametresine iletir. Belge kimliği veya sorgu parametreleri, işlevi çağıran tetikleyiciye göre belirlenebilir.

Giriş - örnek

Bu bölümde aşağıdaki örnekler yer alır:

Örnekler basit ToDoItem bir türe başvurur:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Kuyruk tetikleyicisi, JSON'dan arama kimliği

Aşağıdaki örnekte, tek bir belgeyi alan bir C# işlevi gösterilmektedir. İşlev, JSON nesnesi içeren bir kuyruk iletisi tarafından tetikleniyor. Kuyruk tetikleyicisi JSON'u, arama kimliğini içeren adlı ToDoItemLookupbir nesneye ayrıştırıyor. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem almak için kullanılır.

namespace CosmosDBSamplesV1
{
    public class ToDoItemLookup
    {
        public string ToDoItemId { get; set; }
    }
}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromJSON
    {
        [FunctionName("DocByIdFromJSON")]
        public static void Run(
            [QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{ToDoItemId}")]ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId}");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
        }
    }
}

HTTP tetikleyicisi, sorgu dizesinden kimlik arama

Aşağıdaki örnekte, tek bir belgeyi alan bir C# işlevi gösterilmektedir. İşlev, bir sorgu dizesi kullanarak aranacak kimliği belirten bir HTTP isteği tarafından tetiklenir. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem almak için kullanılır.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromQueryString
    {
        [FunctionName("DocByIdFromQueryString")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{Query.id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

HTTP tetikleyicisi, rota verilerinden kimlik arama

Aşağıdaki örnekte, tek bir belgeyi alan bir C# işlevi gösterilmektedir. İşlev, arama kimliğini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem almak için kullanılır.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteData
    {
        [FunctionName("DocByIdFromRouteData")]
        public static HttpResponseMessage Run(
            [HttpTrigger(
                AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Giriş örneklerini atla

HTTP tetikleyicisi, SqlQuery kullanarak yol verilerinden kimlik arama

Aşağıdaki örnekte, tek bir belgeyi alan bir C# işlevi gösterilmektedir. İşlev, arama kimliğini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem almak için kullanılır.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteDataUsingSqlQuery
    {
        [FunctionName("DocByIdFromRouteDataUsingSqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems2/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from ToDoItems r where r.id = {id}")] IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Giriş örneklerini atla

SQLQuery kullanarak HTTP tetikleyicisi, birden çok belge alma

Aşağıdaki örnekte belgelerin listesini alan bir C# işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Sorgu öznitelik özelliğinde SqlQuery belirtilir.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocsBySqlQuery
    {
        [FunctionName("DocsBySqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "SELECT top 2 * FROM c order by c._ts desc")]
                IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Giriş örneklerini atla

DOCUMENTClient kullanarak HTTP tetikleyicisi, birden çok belge alma (C#)

Aşağıdaki örnekte belgelerin listesini alan bir C# işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Kod, belge listesini okumak için Azure Cosmos DB bağlaması tarafından sağlanan bir örneği kullanır DocumentClient . Örnek DocumentClient , yazma işlemleri için de kullanılabilir.

using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class DocsByUsingDocumentClient
    {
        [FunctionName("DocsByUsingDocumentClient")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
            string searchterm = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
                .Value;

            if (searchterm == null)
            {
                return req.CreateResponse(HttpStatusCode.NotFound);
            }

            log.Info($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
            IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
                .Where(p => p.Description.Contains(searchterm))
                .AsDocumentQuery();

            while (query.HasMoreResults)
            {
                foreach (ToDoItem result in await query.ExecuteNextAsync())
                {
                    log.Info(result.Description);
                }
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Giriş - öznitelikler

İşlem içi C# sınıf kitaplıklarındaDocumentDB özniteliğini kullanın.

Özniteliğin oluşturucusunun veritabanı adı ve koleksiyon adı alır. Bu ayarlar ve yapılandırabileceğiniz diğer özellikler hakkında bilgi için aşağıdaki yapılandırma bölümüne bakın.

Giriş - yapılandırma

Aşağıdaki tabloda function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri ve DocumentDB özniteliği açıklanmaktadır.

function.json özelliği Öznitelik özelliği Description
Türü yok olarak ayarlanmalıdır documentdb.
Yön yok olarak ayarlanmalıdır in.
Adı yok İşlevdeki belgeyi temsil eden bağlama parametresinin adı.
veritabanıAdı Databasename Belgeyi içeren veritabanı.
Toplamaadı Toplamaadı Belgeyi içeren koleksiyonun adı.
id Kimliği Alınacak belgenin kimliği. Bu özellik bağlama ifadelerini destekler. Hem id hem de sqlQuery özelliklerini ayarlamayın. Bunlardan birini ayarlamazsanız koleksiyonun tamamı alınır.
Sqlquery Sqlquery Birden çok belgeyi almak için kullanılan bir Azure Cosmos DB SQL sorgusu. özelliği, şu örnekte olduğu gibi çalışma zamanı bağlamalarını destekler: SELECT * FROM c where c.departmentId = {departmentId}. Hem id hem de sqlQuery özelliklerini ayarlamayın. Bunlardan birini ayarlamazsanız koleksiyonun tamamı alınır.
bağlantı ConnectionStringSetting Azure Cosmos DB bağlantı dizenizi içeren uygulama ayarının adı.
partitionKey PartitionKey Arama için bölüm anahtarı değerini belirtir. Bağlama parametreleri içerebilir.

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.

Giriş - kullanım

İşlevden başarıyla çıkıldığında, adlandırılmış giriş parametreleri aracılığıyla giriş belgesinde yapılan tüm değişiklikler otomatik olarak kalıcı hale getirilir.

Çıktı

Azure Cosmos DB çıkış bağlaması, SQL API'sini kullanarak Azure Cosmos DB veritabanına yeni bir belge yazmanızı sağlar.

Çıkış - örnek

Bu bölüm aşağıdaki örnekleri içerir:

  • Kuyruk tetikleyicisi, bir belge yazma
  • Kuyruk tetikleyicisi, kullanarak belge yazma IAsyncCollector

Örnekler basit ToDoItem bir türe başvurur:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Kuyruk tetikleyicisi, bir belge yazma

Aşağıdaki örnekte, Kuyruk depolamadan iletide sağlanan verileri kullanarak veritabanına belge ekleyen bir C# işlevi gösterilmektedir.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System;

namespace CosmosDBSamplesV1
{
    public static class WriteOneDoc
    {
        [FunctionName("WriteOneDoc")]
        public static void Run(
            [QueueTrigger("todoqueueforwrite")] string queueMessage,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]out dynamic document,
            TraceWriter log)
        {
            document = new { Description = queueMessage, id = Guid.NewGuid() };

            log.Info($"C# Queue trigger function inserted one row");
            log.Info($"Description={queueMessage}");
        }
    }
}

Kuyruk tetikleyicisi, IAsyncCollector kullanarak belge yazma

Aşağıdaki örnekte, bir kuyruk iletisi JSON'unda sağlanan verileri kullanarak veritabanına belge koleksiyonu ekleyen bir C# işlevi gösterilmektedir.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class WriteDocsIAsyncCollector
    {
        [FunctionName("WriteDocsIAsyncCollector")]
        public static async Task Run(
            [QueueTrigger("todoqueueforwritemulti")] ToDoItem[] toDoItemsIn,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]
                IAsyncCollector<ToDoItem> toDoItemsOut,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

            foreach (ToDoItem toDoItem in toDoItemsIn)
            {
                log.Info($"Description={toDoItem.Description}");
                await toDoItemsOut.AddAsync(toDoItem);
            }
        }
    }
}

Çıkış - öznitelikler

İşlem içi C# sınıf kitaplıklarındaDocumentDB özniteliğini kullanın.

Özniteliğin oluşturucusunun veritabanı adı ve koleksiyon adı alır. Bu ayarlar ve yapılandırabileceğiniz diğer özellikler hakkında bilgi için bkz . Çıkış - yapılandırma. Aşağıda yöntem imzasında bir DocumentDB öznitelik örneği verilmişti:

    [FunctionName("QueueToDocDB")]
    public static void Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string myQueueItem,
        [DocumentDB("ToDoList", "Items", Id = "id", ConnectionStringSetting = "myCosmosDB")] out dynamic document)
    {
        ...
    }

Tam bir örnek için bkz . Çıkış.

Çıkış - yapılandırma

Aşağıdaki tabloda function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri ve DocumentDB özniteliği açıklanmaktadır.

function.json özelliği Öznitelik özelliği Description
Türü yok olarak ayarlanmalıdır documentdb.
Yön yok olarak ayarlanmalıdır out.
Adı yok İşlevdeki belgeyi temsil eden bağlama parametresinin adı.
veritabanıAdı Databasename Belgenin oluşturulduğu koleksiyonu içeren veritabanı.
Toplamaadı Toplamaadı Belgenin oluşturulduğu koleksiyonun adı.
createIfNotExists CreateIfNotExists Koleksiyonun mevcut olmadığında oluşturulup oluşturulmadığını belirten boole değeri. Varsayılan değer false'tur çünkü yeni koleksiyonlar ayrılmış aktarım hızıyla oluşturulur ve bu da maliyeti etkiler. Daha fazla bilgi edinmek için bkz. fiyatlandırma sayfası.
partitionKey PartitionKey True CreateIfNotExists olduğunda, oluşturulan koleksiyon için bölüm anahtarı yolunu tanımlar.
collectionThroughput CollectionThroughput True CreateIfNotExists olduğunda, oluşturulan koleksiyonun aktarım hızını tanımlar.
bağlantı ConnectionStringSetting Azure Cosmos DB bağlantı dizenizi içeren uygulama ayarının adı.

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.

Çıkış - kullanım

Varsayılan olarak, işlevinizdeki çıkış parametresine yazdığınızda veritabanınızda bir belge oluşturulur. Bu belgede, belge kimliği olarak otomatik olarak oluşturulan bir GUID var. Çıkış parametresine geçirilen JSON nesnesinde özelliğini belirterek id çıktı belgesinin belge kimliğini belirtebilirsiniz.

Not

Varolan bir belgenin kimliğini belirttiğinizde, yeni çıktı belgesi bu belgenin üzerine yazılır.

Özel durumlar ve dönüş kodları

Bağlama Başvuru
Azure Cosmos DB Azure Cosmos DB için HTTP durum kodları

Sonraki adımlar