Azure İşlevleri 2.x ve üzeri için Azure Cosmos DB giriş bağlaması
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.
Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.
Not
Koleksiyon bölümlendiğinde, arama işlemleri bölüm anahtarı değerini de belirtmelidir.
Önemli
Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.
Azure İşlevleri, Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.
Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.
Bu makale her iki programlama modelini de destekler.
Örnek
Aksi belirtilmediği sürece, bu makaledeki örnekler Azure Cosmos DB uzantısının 3.x sürümünü hedeflemektedir. 4.x uzantı sürümüyle kullanmak için özellik ve öznitelik adlarındaki dizeyi collection
ile container
değiştirmeniz gerekir.
C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
- Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar ad alanlarını kullanır
Microsoft.Azure.Functions.Worker.Extensions.*
. - İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları ad alanlarını kullanır
Microsoft.Azure.WebJobs.Extensions.*
.
Önemli
İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.
Bu bölüm, Azure Cosmos DB uzantısının 3.x sürümünü ve Azure Depolama uzantısının 5.x sürümünü gerektiren örnekler içerir. İşlev uygulamanızda henüz yoksa aşağıdaki NuGet paketlerine başvuru ekleyin:
Örnekler basit ToDoItem
bir türe başvurur:
[Function(nameof(DocByIdFromJSON))]
public void DocByIdFromJSON(
[QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
[CosmosDBInput(
databaseName: "ToDoItems",
containerName: "Items",
Connection = "CosmosDBConnection",
Id = "{ToDoItemId}",
PartitionKey = "{ToDoItemPartitionKeyValue}")] ToDoItem toDoItem)
{
_logger.LogInformation($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId} Key={toDoItemLookup?.ToDoItemPartitionKeyValue}");
if (toDoItem == null)
{
_logger.LogInformation($"ToDo item not found");
}
else
{
_logger.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
}
}
Kuyruk tetikleyicisi, JSON'dan kimlik arama
Aşağıdaki örnekte tek bir belgeyi alan bir işlev gösterilmektedir. İşlev, depolama kuyruğundaki bir JSON iletisi tarafından tetikleniyor. Kuyruk tetikleyicisi, JSON'ı alınacak kimlik ve bölüm anahtarı değerini içeren türünde ToDoItemLookup
bir nesneye ayrıştırıyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
döndürmek için kullanılır.
[Function(nameof(DocByIdFromJSON))]
public void DocByIdFromJSON(
[QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
[CosmosDBInput(
databaseName: "ToDoItems",
containerName: "Items",
Connection = "CosmosDBConnection",
Id = "{ToDoItemId}",
PartitionKey = "{ToDoItemPartitionKeyValue}")] ToDoItem toDoItem)
{
_logger.LogInformation($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId} Key={toDoItemLookup?.ToDoItemPartitionKeyValue}");
if (toDoItem == null)
{
_logger.LogInformation($"ToDo item not found");
}
else
{
_logger.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
}
}
Bu bölüm aşağıdaki örnekleri içerir:
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama - Dize parametresi
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama - POJO parametresi
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- HTTP tetikleyicisi, SqlQuery kullanarak yol verilerinden kimlik arama
- HTTP tetikleyicisi, SqlQuery kullanarak yol verilerinden birden çok belge alın
Örnekler basit ToDoItem
bir türe başvurur:
public class ToDoItem {
private String id;
private String description;
public String getId() {
return id;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "ToDoItem={id=" + id + ",description=" + description + "}";
}
}
HTTP tetikleyicisi, sorgu dizesinden kimlik arama - Dize parametresi
Aşağıdaki örnekte, tek bir belgeyi alan bir Java işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan Dize biçiminde bir belge almak için kullanılır.
public class DocByIdFromQueryString {
@FunctionName("DocByIdFromQueryString")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@CosmosDBInput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
id = "{Query.id}",
partitionKey = "{Query.partitionKeyValue}",
connectionStringSetting = "Cosmos_DB_Connection_String")
Optional<String> item,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
context.getLogger().info("String from the database is " + (item.isPresent() ? item.get() : null));
// Convert and display
if (!item.isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from Cosmos. Alternatively, we can parse the JSON string
// and return an enriched JSON object.
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(item.get())
.build();
}
}
}
Java işlevleri çalışma zamanı kitaplığında, değeri Azure Cosmos DB'den gelen işlev parametrelerinde ek açıklamayı kullanın@CosmosDBInput
. Bu ek açıklama kullanılarak yerel Java türleri, POJO'lar veya null atanabilir değerlerle Optional<T>
kullanılabilir.
HTTP tetikleyicisi, sorgu dizesinden kimlik arama - POJO parametresi
Aşağıdaki örnekte, tek bir belgeyi alan bir Java işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Belirtilen veritabanından ve koleksiyondan belge almak için kullanılan kimlik ve bölüm anahtarı değeri. Belge daha sonra daha önce oluşturulan POJO örneğine ToDoItem
dönüştürülür ve işleve bağımsız değişken olarak geçirilir.
public class DocByIdFromQueryStringPojo {
@FunctionName("DocByIdFromQueryStringPojo")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@CosmosDBInput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
id = "{Query.id}",
partitionKey = "{Query.partitionKeyValue}",
connectionStringSetting = "Cosmos_DB_Connection_String")
ToDoItem item,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
context.getLogger().info("Item from the database is " + item);
// Convert and display
if (item == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(item)
.build();
}
}
}
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir Java işlevi gösterilmektedir. İşlev, aramak için kimlik ve bölüm anahtarı değerini belirtmek için bir yol parametresi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belgeyi almak için kullanılır ve bunu olarak Optional<String>
döndürür.
public class DocByIdFromRoute {
@FunctionName("DocByIdFromRoute")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "todoitems/{partitionKeyValue}/{id}")
HttpRequestMessage<Optional<String>> request,
@CosmosDBInput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
id = "{id}",
partitionKey = "{partitionKeyValue}",
connectionStringSetting = "Cosmos_DB_Connection_String")
Optional<String> item,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
context.getLogger().info("String from the database is " + (item.isPresent() ? item.get() : null));
// Convert and display
if (!item.isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from Cosmos. Alternatively, we can parse the JSON string
// and return an enriched JSON object.
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(item.get())
.build();
}
}
}
HTTP tetikleyicisi, SqlQuery kullanarak yol verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir Java işlevi gösterilmektedir. İşlev, arama kimliğini belirtmek için bir yol parametresi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, sorgu ölçütlerine bağlı olarak birçok belge döndürülebileceğinden, belirtilen veritabanından ve koleksiyondan belgeyi almak için kullanılır ve sonuç kümesi olarak ToDoItem[]
dönüştürülür.
Not
Yalnızca kimlikle sorgulamanız gerekiyorsa, daha az istek birimi kullanacağı için önceki örnekler gibi bir arama kullanmanız önerilir. Nokta okuma işlemleri (GET), kimliğe göre sorgulardan daha verimlidir.
public class DocByIdFromRouteSqlQuery {
@FunctionName("DocByIdFromRouteSqlQuery")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "todoitems2/{id}")
HttpRequestMessage<Optional<String>> request,
@CosmosDBInput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
sqlQuery = "select * from Items r where r.id = {id}",
connectionStringSetting = "Cosmos_DB_Connection_String")
ToDoItem[] item,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
context.getLogger().info("Items from the database are " + item);
// Convert and display
if (item == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(item)
.build();
}
}
}
HTTP tetikleyicisi, SqlQuery kullanarak yol verilerinden birden çok belge alın
Aşağıdaki örnekte birden çok belge alan bir Java işlevi gösterilmektedir. İşlev, alanda aranacak dizeyi belirtmek için description
yol parametresi desc
kullanan bir HTTP isteği tarafından tetikleniyor. Arama terimi, belirtilen veritabanından ve koleksiyondan bir belge koleksiyonu almak için kullanılır, sonuç kümesi öğesine ToDoItem[]
dönüştürülür ve işleve bağımsız değişken olarak geçirilir.
public class DocsFromRouteSqlQuery {
@FunctionName("DocsFromRouteSqlQuery")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "todoitems3/{desc}")
HttpRequestMessage<Optional<String>> request,
@CosmosDBInput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
sqlQuery = "select * from Items r where contains(r.description, {desc})",
connectionStringSetting = "Cosmos_DB_Connection_String")
ToDoItem[] items,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
context.getLogger().info("Number of items from the database is " + (items == null ? 0 : items.length));
// Convert and display
if (items == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("No documents found.")
.build();
}
else {
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(items)
.build();
}
}
}
Bu bölüm, çeşitli kaynaklardan bir kimlik değeri belirterek tek bir belgeyi okuyan aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, JSON'dan kimlik arama
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Kuyruk tetikleyicisi, JSON'dan kimlik arama
Aşağıdaki örnekte, tek bir belgeyi okuyan ve belgenin metin değerini güncelleştiren bir TypeScript işlevi gösterilmektedir.
import { app, input, InvocationContext, output } from '@azure/functions';
const cosmosInput = input.cosmosDB({
databaseName: 'MyDatabase',
collectionName: 'MyCollection',
id: '{queueTrigger}',
partitionKey: '{queueTrigger}',
connectionStringSetting: 'MyAccount_COSMOSDB',
});
const cosmosOutput = output.cosmosDB({
databaseName: 'MyDatabase',
collectionName: 'MyCollection',
createIfNotExists: false,
partitionKey: '{queueTrigger}',
connectionStringSetting: 'MyAccount_COSMOSDB',
});
interface MyDocument {
text: string;
}
export async function storageQueueTrigger1(queueItem: unknown, context: InvocationContext): Promise<void> {
const doc = <MyDocument>context.extraInputs.get(cosmosInput);
doc.text = 'This was updated!';
context.extraOutputs.set(cosmosOutput, doc);
}
app.storageQueue('storageQueueTrigger1', {
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [cosmosInput],
extraOutputs: [cosmosOutput],
handler: storageQueueTrigger1,
});
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir TypeScript işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const cosmosInput = input.cosmosDB({
databaseName: 'ToDoItems',
collectionName: 'Items',
id: '{Query.id}',
partitionKey: '{Query.partitionKeyValue}',
connectionStringSetting: 'CosmosDBConnection',
});
interface ToDoDocument {
description: string;
}
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const toDoItem = <ToDoDocument>context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'ToDo item not found',
};
} else {
return {
body: `Found ToDo item, Description=${toDoItem.description}`,
};
}
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraInputs: [cosmosInput],
handler: httpTrigger1,
});
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir TypeScript işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const cosmosInput = input.cosmosDB({
databaseName: 'ToDoItems',
collectionName: 'Items',
id: '{id}',
partitionKey: '{partitionKeyValue}',
connectionStringSetting: 'CosmosDBConnection',
});
interface ToDoDocument {
description: string;
}
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const toDoItem = <ToDoDocument>context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'ToDo item not found',
};
} else {
return {
body: `Found ToDo item, Description=${toDoItem.description}`,
};
}
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'todoitems/{partitionKeyValue}/{id}',
extraInputs: [cosmosInput],
handler: httpTrigger1,
});
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte, sorgu parametrelerini özelleştirmek için kuyruk tetikleyicisi kullanarak SQL sorgusu tarafından belirtilen birden çok belgeyi alan bir TypeScript işlevi gösterilmektedir.
Kuyruk tetikleyicisi bir parametresi departmentId
sağlar. kuyruk iletisi { "departmentId" : "Finance" }
, finans departmanı için tüm kayıtları döndürür.
import { app, input, InvocationContext } from '@azure/functions';
const cosmosInput = input.cosmosDB({
databaseName: 'MyDb',
collectionName: 'MyCollection',
sqlQuery: 'SELECT * from c where c.departmentId = {departmentId}',
connectionStringSetting: 'CosmosDBConnection',
});
interface MyDocument {}
export async function storageQueueTrigger1(queueItem: unknown, context: InvocationContext): Promise<void> {
const documents = <MyDocument[]>context.extraInputs.get(cosmosInput);
for (const document of documents) {
// operate on each document
}
}
app.storageQueue('storageQueueTrigger1', {
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [cosmosInput],
handler: storageQueueTrigger1,
});
Bu bölüm, çeşitli kaynaklardan bir kimlik değeri belirterek tek bir belgeyi okuyan aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, JSON'dan kimlik arama
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Kuyruk tetikleyicisi, JSON'dan kimlik arama
Aşağıdaki örnekte, tek bir belgeyi okuyan ve belgenin metin değerini güncelleştiren bir JavaScript işlevi gösterilmektedir.
const { app, input, output } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'MyDatabase',
collectionName: 'MyCollection',
id: '{queueTrigger}',
partitionKey: '{queueTrigger}',
connectionStringSetting: 'MyAccount_COSMOSDB',
});
const cosmosOutput = output.cosmosDB({
databaseName: 'MyDatabase',
collectionName: 'MyCollection',
createIfNotExists: false,
partitionKey: '{queueTrigger}',
connectionStringSetting: 'MyAccount_COSMOSDB',
});
app.storageQueue('storageQueueTrigger1', {
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [cosmosInput],
extraOutputs: [cosmosOutput],
handler: (queueItem, context) => {
const doc = context.extraInputs.get(cosmosInput);
doc.text = 'This was updated!';
context.extraOutputs.set(cosmosOutput, doc);
},
});
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir JavaScript işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
const { app, input } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'ToDoItems',
collectionName: 'Items',
id: '{Query.id}',
partitionKey: '{Query.partitionKeyValue}',
connectionStringSetting: 'CosmosDBConnection',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraInputs: [cosmosInput],
handler: (request, context) => {
const toDoItem = context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'ToDo item not found',
};
} else {
return {
body: `Found ToDo item, Description=${toDoItem.Description}`,
};
}
},
});
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir JavaScript işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
const { app, input } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'ToDoItems',
collectionName: 'Items',
id: '{id}',
partitionKey: '{partitionKeyValue}',
connectionStringSetting: 'CosmosDBConnection',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'todoitems/{partitionKeyValue}/{id}',
extraInputs: [cosmosInput],
handler: (request, context) => {
const toDoItem = context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'ToDo item not found',
};
} else {
return {
body: `Found ToDo item, Description=${toDoItem.Description}`,
};
}
},
});
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte, sorgu parametrelerini özelleştirmek için kuyruk tetikleyicisi kullanarak SQL sorgusu tarafından belirtilen birden çok belgeyi alan bir JavaScript işlevi gösterilmektedir.
Kuyruk tetikleyicisi bir parametresi departmentId
sağlar. kuyruk iletisi { "departmentId" : "Finance" }
, finans departmanı için tüm kayıtları döndürür.
const { app, input } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'MyDb',
collectionName: 'MyCollection',
sqlQuery: 'SELECT * from c where c.departmentId = {departmentId}',
connectionStringSetting: 'CosmosDBConnection',
});
app.storageQueue('storageQueueTrigger1', {
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [cosmosInput],
handler: (queueItem, context) => {
const documents = context.extraInputs.get(cosmosInput);
for (const document of documents) {
// operate on each document
}
},
});
- Kuyruk tetikleyicisi, JSON'dan kimlik arama
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Kuyruk tetikleyicisi, JSON'dan kimlik arama
Aşağıdaki örnekte, tek bir Azure Cosmos DB belgesinin nasıl okunduğu ve güncelleştirilecek olduğu gösterilmektedir. Belgenin benzersiz tanımlayıcısı, kuyruk iletisindeki JSON değeri aracılığıyla sağlanır.
Azure Cosmos DB giriş bağlaması, işlevin yapılandırma dosyasında (function.json) bulunan bağlamalar listesinde ilk sırada listelenir.
{
"name": "InputDocumentIn",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id": "{queueTrigger_payload_property}",
"partitionKey": "{queueTrigger_payload_property}",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in"
},
{
"name": "InputDocumentOut",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"createIfNotExists": false,
"partitionKey": "{queueTrigger_payload_property}",
"connectionStringSetting": "CosmosDBConnection",
"direction": "out"
}
run.ps1 dosyasında, gelen belgeyi okuyan ve değişiklikleri çıkaran PowerShell kodu bulunur.
param($QueueItem, $InputDocumentIn, $TriggerMetadata)
$Document = $InputDocumentIn
$Document.text = 'This was updated!'
Push-OutputBinding -Name InputDocumentOut -Value $Document
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte, bir web API'sinden tek bir Azure Cosmos DB belgesinin nasıl okunduğu ve güncelleştirilduğu gösterilmektedir. Belgenin benzersiz tanımlayıcısı, bağlamanın "Id": "{Query.Id}"
özelliğinde tanımlandığı gibi HTTP isteğinden bir querystring parametresi aracılığıyla sağlanır.
Azure Cosmos DB giriş bağlaması, işlevin yapılandırma dosyasında (function.json) bulunan bağlamalar listesinde ilk sırada listelenir.
{
"bindings": [
{
"type": "cosmosDB",
"name": "ToDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"Id": "{Query.id}",
"PartitionKey": "{Query.partitionKeyValue}"
},
{
"authLevel": "anonymous",
"name": "Request",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "Response",
"type": "http",
"direction": "out"
},
],
"disabled": false
}
run.ps1 dosyasında, gelen belgeyi okuyan ve değişiklikleri çıkaran PowerShell kodu bulunur.
using namespace System.Net
param($Request, $ToDoItem, $TriggerMetadata)
Write-Host 'PowerShell HTTP trigger function processed a request'
if (-not $ToDoItem) {
Write-Host 'ToDo item not found'
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::NotFound
Body = $ToDoItem.Description
})
} else {
Write-Host "Found ToDo item, Description=$($ToDoItem.Description)"
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $ToDoItem.Description
})
}
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, bir web API'sinden tek bir Azure Cosmos DB belgesinin nasıl okunduğu ve güncelleştirilduğu gösterilmektedir. Belgenin benzersiz tanımlayıcısı bir yol parametresi aracılığıyla sağlanır. Yol parametresi HTTP isteği bağlamasının route
özelliğinde tanımlanır ve Azure Cosmos DB "Id": "{Id}"
bağlama özelliğinde başvurulur.
Azure Cosmos DB giriş bağlaması, işlevin yapılandırma dosyasında (function.json) bulunan bağlamalar listesinde ilk sırada listelenir.
{
"bindings": [
{
"type": "cosmosDB",
"name": "ToDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"Id": "{id}",
"PartitionKey": "{partitionKeyValue}"
},
{
"authLevel": "anonymous",
"name": "Request",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
],
"route": "todoitems/{partitionKeyValue}/{id}"
},
{
"name": "Response",
"type": "http",
"direction": "out"
}
],
"disabled": false
}
run.ps1 dosyasında, gelen belgeyi okuyan ve değişiklikleri çıkaran PowerShell kodu bulunur.
using namespace System.Net
param($Request, $ToDoItem, $TriggerMetadata)
Write-Host 'PowerShell HTTP trigger function processed a request'
if (-not $ToDoItem) {
Write-Host 'ToDo item not found'
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::NotFound
Body = $ToDoItem.Description
})
} else {
Write-Host "Found ToDo item, Description=$($ToDoItem.Description)"
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $ToDoItem.Description
})
}
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte birden çok Azure Cosmos DB belgesinin nasıl okunduğu gösterilmektedir. İşlevin yapılandırma dosyası (function.json) bağlama özelliklerini tanımlar ve bu da öğesini sqlQuery
içerir. özelliğine sqlQuery
sağlanan SQL deyimi, işleve sağlanan belge kümesini seçer.
{
"name": "Documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
run1.ps1 dosyasında, gelen belgeleri okuyan PowerShell kodu bulunur.
param($QueueItem, $Documents, $TriggerMetadata)
foreach ($Document in $Documents) {
# operate on each document
}
Bu bölüm, çeşitli kaynaklardan bir kimlik değeri belirterek tek bir belgeyi okuyan aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, JSON'dan kimlik arama
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Örnekler, v1 veya v2 Python programlama modelini kullanıp kullanmadığınıza bağlıdır.
Kuyruk tetikleyicisi, JSON'dan kimlik arama
Aşağıdaki örnekte bir Azure Cosmos DB giriş bağlaması gösterilmektedir. işlevi tek bir belgeyi okur ve belgenin metin değerini güncelleştirir.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.queue_trigger(arg_name="msg",
queue_name="outqueue",
connection="AzureWebJobsStorage")
@app.cosmos_db_input(arg_name="documents",
database_name="MyDatabase",
collection_name="MyCollection",
id="{msg.payload_property}",
partition_key="{msg.payload_property}",
connection_string_setting="MyAccount_COSMOSDB")
@app.cosmos_db_output(arg_name="outputDocument",
database_name="MyDatabase",
collection_name="MyCollection",
connection_string_setting="MyAccount_COSMOSDB")
def test_function(msg: func.QueueMessage,
inputDocument: func.DocumentList,
outputDocument: func.Out[func.Document]):
document = documents[id]
document["text"] = "This was updated!"
doc = inputDocument[0]
doc["text"] = "This was updated!"
outputDocument.set(doc)
print(f"Updated document.")
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte tek bir belgeyi alan bir işlev gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte tek bir belgeyi alan bir işlev gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte bağlamayı kullanan bir Azure Cosmos DB giriş bağlama Python işlevi gösterilmektedir. İşlev, sorgu parametrelerini özelleştirmek için bir kuyruk tetikleyicisi kullanarak SQL sorgusu tarafından belirtilen birden çok belgeyi alır.
Kuyruk tetikleyicisi bir parametresi departmentId
sağlar. kuyruk iletisi { "departmentId" : "Finance" }
, finans departmanı için tüm kayıtları döndürür.
Özellikler
hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları işlevi tanımlamak için öznitelikleri kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.
Öznitelik özelliği | Açıklama |
---|---|
Bağlantı | Sorgulanan Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
DatabaseName | Kapsayıcının izlendiği Azure Cosmos DB veritabanının adı. |
ContainerName | İzlenen kapsayıcının adı. |
PartitionKey | Arama için bölüm anahtarı değerini belirtir. Bağlama parametreleri içerebilir. Bölümlenmiş kapsayıcılardaki aramalar için gereklidir. |
Kimlik | Alınacak belgenin kimliği. Bu özellik bağlama ifadelerini destekler. hem hem SqlQuery de Id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
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 hem SqlQuery de Id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
PreferredLocations | (İsteğe bağlı) Azure Cosmos DB hizmetinde coğrafi olarak çoğaltılan veritabanı hesapları için tercih edilen konumları (bölgeleri) tanımlar. Değerler virgülle ayrılmış olmalıdır. Örneğin, East US,South Central US,North Europe . |
Dekoratörler
Yalnızca Python v2 programlama modeli için geçerlidir.
Python v2 işlevleri, uzantı sürümüne cosmos_db_input
bağlı olarak bu özellikleri destekleyen dekoratör kullanılarak tanımlanır:
Özellik | Açıklama |
---|---|
arg_name |
Değişiklikleri olan belgelerin listesini temsil eden işlev kodunda kullanılan değişken adı. |
database_name |
Koleksiyonun izlendiği Azure Cosmos DB veritabanının adı. |
container_name |
İzlenen Azure Cosmos DB koleksiyonunun adı. |
connection |
İzlenen Azure Cosmos DB'nin bağlantı dizesi. |
partition_key |
İzlenen Azure Cosmos DB'nin bölüm anahtarı. |
id |
Alınacak belgenin kimliği. |
function.json kullanılarak tanımlanan Python işlevleri için Yapılandırma bölümüne bakın.
Ek Açıklamalar
Java işlevleri çalışma zamanı kitaplığından @CosmosDBInput
Azure Cosmos DB'den okunan parametrelerde ek açıklamayı kullanın. Ek açıklama aşağıdaki özellikleri destekler:
Yapılandırma
Yalnızca Python v1 programlama modeli için geçerlidir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanır ve burada özellikler uzantı sürümüne göre farklılık gösterir:
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır cosmosDB . |
direction | olarak ayarlanmalıdır in . |
ad | Değişiklikleri olan belgelerin listesini temsil eden işlev kodunda kullanılan değişken adı. |
bağlantı | İzlenen Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar kapsayıcısının adı. Daha fazla bilgi için bkz . Bağlantılar. |
databaseName | Kapsayıcının izlendiği Azure Cosmos DB veritabanının adı. |
containerName | İzlenen kapsayıcının adı. |
partitionKey | Arama için bölüm anahtarı değerini belirtir. Bağlama parametreleri içerebilir. Bölümlenmiş kapsayıcılardaki aramalar için gereklidir. |
id | Alınacak belgenin kimliği. Bu özellik bağlama ifadelerini destekler. hem hem sqlQuery de id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
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 hem sqlQuery de id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
preferredLocations | (İsteğe bağlı) Azure Cosmos DB hizmetinde coğrafi olarak çoğaltılan veritabanı hesapları için tercih edilen konumları (bölgeleri) tanımlar. Değerler virgülle ayrılmış olmalıdır. Örneğin, East US,South Central US,North Europe . |
Tam örnekler için Örnek bölümüne bakın.
Kullanım
İşlev başarıyla çıktığında, giriş belgesinde yapılan tüm değişiklikler otomatik olarak kalıcı hale getirilir.
Cosmos DB giriş bağlaması tarafından desteklenen parametre türü İşlevler çalışma zamanı sürümüne, uzantı paketi sürümüne ve kullanılan C# modalitesine bağlıdır.
İşlevin tek bir belgeyi işlemesini istediğinizde Cosmos DB giriş bağlaması aşağıdaki türlere bağlanabilir:
Type | Açıklama |
---|---|
JSON serileştirilebilir türler | İşlevler, belgenin JSON verilerini seri durumdan çıkararak düz eski bir CLR nesnesi (POCO) türüne dönüştürmeye çalışır. |
İşlevin bir sorgudan birden çok belgeyi işlemesini istediğinizde, Cosmos DB giriş bağlaması aşağıdaki türlere bağlanabilir:
Type | Açıklama |
---|---|
IEnumerable<T> burada T JSON serileştirilebilir bir türdür |
Sorgu tarafından döndürülen varlıkların numaralandırması. Her girdi bir belgeyi temsil eder. |
CosmosClient1 | Cosmos DB hesabına bağlı bir istemci. |
Veritabanı1 | Cosmos DB veritabanına bağlı bir istemci. |
Kapsayıcı1 | Cosmos DB kapsayıcısına bağlı bir istemci. |
1 Bu türleri kullanmak için Microsoft.Azure.Functions.Worker.Extensions.CosmosDB 4.4.0 veya sonraki sürümlerine ve SDK türü bağlamalarına yönelik ortak bağımlılıklara başvurmanız gerekir.
Java işlevleri çalışma zamanı kitaplığından @CosmosDBInput ek açıklaması Azure Cosmos DB verilerini işleve sunar. Bu ek açıklama kullanılarak yerel Java türleri, POJO'lar veya null atanabilir değerlerle Optional<T>
kullanılabilir.
Belgelerde güncelleştirmeler işlev çıkışında otomatik olarak yapılmaz. bir işlevdeki belgeleri güncelleştirmek için çıkış bağlaması kullanın. Daha fazla ayrıntı için Bkz. PowerShell örneği.
Veriler bir DocumentList
parametre aracılığıyla işlevin kullanımına sunulur. Belgede yapılan değişiklikler otomatik olarak kalıcı olmaz.
Bağlantılar
connectionStringSetting
/connection
ve leaseConnectionStringSetting
/leaseConnection
özellikleri, uygulamanın Azure Cosmos DB'ye nasıl bağlanması gerektiğini belirten ortam yapılandırmasına başvurulardır. Bunlar şunları belirtebilir:
- bağlantı dizesi içeren bir uygulama ayarının adı
- Birden çok uygulama ayarı için paylaşılan ön ekin adı ve birlikte kimlik tabanlı bağlantı tanımlama. Bu seçenek yalnızca uzantının
connection
leaseConnection
4.x veya sonraki sürümlerinde kullanılabilir.
Yapılandırılan değer hem tek bir ayar için tam eşleşme hem de diğer ayarlar için bir ön ek eşleşmesiyse, tam eşleşme kullanılır.
Connection string
Veritabanı hesabınızın bağlantı dizesi, bağlama yapılandırmasının bağlantı özelliği tarafından belirtilen değerle eşleşen bir adla bir uygulama ayarında depolanmalıdır.
Kimlik tabanlı bağlantılar
Uzantının 4.x veya üzeri bir sürümünü kullanıyorsanız, gizli dizi içeren bir bağlantı dizesi kullanmak yerine uygulamanın bir Microsoft Entra kimliği kullanmasını sağlayabilirsiniz. Bunu yapmak için, tetikleyici ve bağlama yapılandırmasındaki bağlantı özelliğine eşlenen ortak bir ön ek altında ayarları tanımlayabilirsiniz.
Bu modda uzantı aşağıdaki özellikleri gerektirir:
Özellik | Ortam değişkeni şablonu | Açıklama | Örnek değer |
---|---|---|---|
Hesap Uç Noktası | <CONNECTION_NAME_PREFIX>__accountEndpoint |
Azure Cosmos DB hesap uç noktası URI'si. | <https:// database_account_name.documents.azure.com:443/> |
Bağlantıyı özelleştirmek için ek özellikler ayarlanabilir. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.
Azure İşlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar yönetilen kimlik kullanır. Ve özellikleriyle credential
clientID
kullanıcı tarafından atanan bir kimlik belirtilse de, sistem tarafından atanan kimlik varsayılan olarak kullanılır. Kullanıcı tarafından atanan kimliği kaynak kimliğiyle yapılandırmanın desteklenmediğini unutmayın. Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında, bunun yerine geliştirici kimliğiniz kullanılır, ancak bu özelleştirilebilir. Bkz. Kimlik tabanlı bağlantılarla yerel geliştirme.
Kimliğe izin verme
Hangi kimlik kullanılıyorsa, hedeflenen eylemleri gerçekleştirmek için izinlere sahip olmalıdır. Çoğu Azure hizmeti için bu, bu izinleri sağlayan yerleşik veya özel rolleri kullanarak Azure RBAC'de bir rol atamanız gerektiği anlamına gelir.
Önemli
Bazı izinler, tüm bağlamlar için gerekli olmayan hedef hizmet tarafından gösterilebilir. Mümkün olduğunda, kimliğe yalnızca gerekli ayrıcalıkları sağlayarak en az ayrıcalık ilkesine uyun. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma izni olan bir rol kullanın. Okuma işlemi için aşırı izin olduğundan, bu hizmete yazmaya da izin veren bir rol atamak uygun olmaz. Benzer şekilde, rol atamasının kapsamının yalnızca okunması gereken kaynaklara göre ayarlandığından emin olmak istersiniz.
Cosmos DB, veri işlemleri için Azure RBAC kullanmaz. Bunun yerine, benzer kavramlar üzerine oluşturulmuş bir Cosmos DB yerleşik RBAC sistemi kullanır. Çalışma zamanında veritabanı hesabınıza erişim sağlayan bir rol ataması oluşturmanız gerekir. Sahip gibi Azure RBAC Yönetimi rolleri yeterli değildir. Aşağıdaki tabloda, Azure Cosmos DB uzantısı normal işlemde kullanılırken önerilen yerleşik roller gösterilmektedir. Uygulamanız, yazdığınız koda göre ek izinler gerektirebilir.
Bağlama türü | Örnek yerleşik roller1 |
---|---|
Tetikleyici2 | Cosmos DB Yerleşik Veri Katkıda Bulunanı |
Giriş bağlaması | Cosmos DB Yerleşik Veri Okuyucusu |
Çıkış bağlaması | Cosmos DB Yerleşik Veri Katkıda Bulunanı |
1 Bu roller Azure RBAC rol atamasında kullanılamaz. Bu rolleri atama hakkında ayrıntılı bilgi için Cosmos DB yerleşik RBAC sistemi belgelerine bakın.
2 Cosmos DB, kimlik kullanırken kapsayıcı oluşturmayı bir yönetim işlemi olarak ele alır. Tetikleyici için veri düzlemi işlemi olarak kullanılamaz. İşlevinizi ayarlamadan önce tetikleyicinin ihtiyaç duyduğu kapsayıcıları (kira kapsayıcısı dahil) oluşturduğunuzdan emin olmanız gerekir.