Azure Cosmos DB入力バインドでは、SQL API を使用して 1 つ以上のAzure Cosmos DB ドキュメントを取得し、それらを関数の入力パラメーターに渡します。 ドキュメント ID またはクエリ パラメーターは、関数を呼び出したトリガーに基づいて決定することができます。
セットアップと構成の詳細については、概要に関するページをご覧ください。
注
コレクションがパーティション分割されている場合、検索操作では、パーティション キーの値も指定する必要があります。
重要
この記事では、タブを使用して、Node.js プログラミング モデルの複数のバージョンに対応しています。 v4 モデルは一般提供されており、JavaScript と TypeScript の開発者にとって、より柔軟で直感的なエクスペリエンスが得られるように設計されています。 v4 モデルの動作の詳細については、Azure Functions Node.js 開発者ガイドを参照してください。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。
Azure Functionsでは、Python用の 2 つのプログラミング モデルがサポートされています。 バインドを定義する方法は、選択したプログラミング モデルによって異なります。
Python v2 プログラミング モデルを使用すると、Python関数コードでデコレーターを使用してバインドを直接定義できます。 詳細については、Python 開発者ガイドを参照してください。
この記事は、両方のプログラミング モデルをサポートしています。
例
特に明記されていない限り、この記事の例では、Azure Cosmos DB 拡張機能のバージョン 3.x を対象とします。 拡張機能バージョン 4.x で使用するには、プロパティ名や属性名の文字列 collection を container に置き換える必要があります。
このバインドに関しては現在、Goのサポートは利用できません。
A C# 関数は、次の C# モードのいずれかを使用して作成できます。
-
分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、.NETおよび .NET Framework の LTS および LTS 以外のバージョンで実行されている C# 関数をサポートするために必要です。 分離ワーカー プロセス関数の拡張機能では、
Microsoft.Azure.Functions.Worker.Extensions.*名前空間が使用されます。 -
インプロセス モデル: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。 このモデルの一部では、主に C# ポータルの編集のためにサポートされている C# スクリプトを使用して Functions を実行できます。 インプロセス関数の拡張機能では、
Microsoft.Azure.WebJobs.Extensions.*名前空間を使用します。
重要
インプロセス モデルのサポートは 2026 年 11 月 10 日に終了します。 完全なサポートのために、分離ワーカー モデルにアプリを移行することを強くお勧めします。
このセクションには、バージョン 3.x のAzure Cosmos DB拡張機能と 5.x のAzure Storage拡張機能が必要な例が含まれています。 関数アプリにない場合は、次の NuGet パッケージへの参照を追加します。
例では、次のようなシンプルな ToDoItem タイプを参照します。
キュー トリガー、JSON からの ID の検索
次の例は、単一のドキュメントを取得する関数を示しています。 この関数は、ストレージ キュー内の JSON メッセージによってトリガーされます。 キュー トリガーにより、取得する ID とパーティション キー値を含む、ToDoItemLookup 型のオブジェクトに JSON が解析されます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを返すために使用されます。
このセクションには、次の例が含まれています。
- HTTP トリガー、クエリ文字列からの ID の検索 - String パラメーター
- HTTP トリガー、クエリ文字列からの ID の検索 - POJO パラメーター
- HTTP トリガー、ルート データからの ID の検索
- HTTP トリガー、SqlQuery を使用したルート データからの ID の検索
- HTTP トリガー、ルート データからの複数のドキュメントの取得、SqlQuery を使用
例では、次のようなシンプルな ToDoItem タイプを参照します。
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 トリガー、クエリ文字列からの ID の検索 - String パラメーター
次の例は、1 つのドキュメントを取得するJava関数を示しています。 関数は、クエリ文字列を使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションからドキュメントを String 形式で取得するために使用されます。
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関数ランタイム ライブラリで、Azure Cosmos DBから取得される値を持つ関数パラメーターに対して @CosmosDBInput 注釈を使用します。 この注釈は、Optional<T> を使用して、ネイティブ Java型、POJO、または null 許容値と共に使用できます。
HTTP トリガー、クエリ文字列からの ID の検索 - POJO パラメーター
次の例は、1 つのドキュメントを取得するJava関数を示しています。 関数は、クエリ文字列を使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションからドキュメントを取得するために使用されます。 このドキュメントはその後、前に作成した ToDoItem POJO のインスタンスに変換され、引数として関数に渡されます。
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 トリガー、ルート データからの ID の検索
次の例は、1 つのドキュメントを取得するJava関数を示しています。 関数は、ルート パラメーターを使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションからドキュメントを取得し、Optional<String> として返すために使用されます。
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 トリガー、SqlQuery を使用したルート データからの ID の検索
次の例は、1 つのドキュメントを取得するJava関数を示しています。 この関数は、ルート パラメーターを使用して検索する ID を指定する HTTP 要求によってトリガーされます。 クエリ条件によっては多数のドキュメントが返される可能性があるため、その ID は、指定されたデータベースとコレクションからドキュメントを取得し、結果セットを ToDoItem[] に変換するために使用されます。
注
ID だけを使用してクエリを実行する必要がある場合は、 前の例のように検索を使用することをお勧めします。これは、 要求ユニットの消費量が少ないためです。 ポイント読み取り操作 (GET) は ID によるクエリより効率性に優れています。
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 トリガー、ルート データからの複数のドキュメントの取得、SqlQuery を使用
次の例は、複数のドキュメントを取得するJava関数を示しています。 この関数は、ルート パラメーター desc を使用して description フィールドで検索する文字列を指定する HTTP 要求によってトリガーされます。 この検索用語は、指定されたデータベースとコレクションからドキュメントのコレクションを取得し、結果セットを ToDoItem[] に変換して、それを引数として関数に渡すために使用されます。
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();
}
}
}
このセクションには、次の例が含まれています。各例では、さまざまなソースから ID 値を指定して単一のドキュメントを読み取ります。
- キュー トリガー、JSON からの ID の検索
- HTTP トリガー、クエリ文字列からの ID の検索
- HTTP トリガー、ルート データからの ID の検索
- キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
キュー トリガー、JSON からの ID の検索
次の例は、単一のドキュメントを読み取り、そのドキュメントのテキスト値を更新する TypeScript 関数を示しています。
HTTP トリガー、クエリ文字列からの ID の検索
次の例は、単一のドキュメントを取得する TypeScript 関数を示しています。 関数は、クエリ文字列を使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
HTTP トリガー、ルート データからの ID の検索
次の例は、単一のドキュメントを取得する TypeScript 関数を示しています。 関数は、ルート データを使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
次の例は、SQL クエリで指定されている複数のドキュメントを、キュー トリガーを使用してクエリ パラメーターをカスタマイズすることで取得する TypeScript 関数を示しています。
キュー トリガーがパラメーター departmentId を提供します。
{ "departmentId" : "Finance" } のキュー メッセージは、金融部門のすべてのレコードを返します。
このセクションには、次の例が含まれています。各例では、さまざまなソースから ID 値を指定して単一のドキュメントを読み取ります。
- キュー トリガー、JSON からの ID の検索
- HTTP トリガー、クエリ文字列からの ID の検索
- HTTP トリガー、ルート データからの ID の検索
- キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
キュー トリガー、JSON からの ID の検索
次の例は、単一のドキュメントを読み取り、そのドキュメントのテキスト値を更新する JavaScript 関数を示しています。
HTTP トリガー、クエリ文字列からの ID の検索
次の例は、単一のドキュメントを取得する JavaScript 関数を示しています。 関数は、クエリ文字列を使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
HTTP トリガー、ルート データからの ID の検索
次の例は、単一のドキュメントを取得する JavaScript 関数を示しています。 関数は、ルート データを使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
次の例は、SQL クエリで指定されている複数のドキュメントを、キュー トリガーを使用してクエリ パラメーターをカスタマイズすることで取得する JavaScript 関数を示しています。
キュー トリガーがパラメーター departmentId を提供します。
{ "departmentId" : "Finance" } のキュー メッセージは、金融部門のすべてのレコードを返します。
- キュー トリガー、JSON からの ID の検索
- HTTP トリガー、クエリ文字列からの ID の検索
- HTTP トリガー、ルート データからの ID の検索
- キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
キュー トリガー、JSON からの ID の検索
次の例では、1 つのAzure Cosmos DB ドキュメントを読み取って更新する方法を示します。 ドキュメントの一意識別子は、キュー メッセージの JSON 値によって提供されます。
Azure Cosmos DB入力バインドは、関数の構成ファイル (function.json) にあるバインドの一覧に最初に表示されます。
{
"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 ファイルには、受信ドキュメントを読み取り、変更を出力する PowerShell コードが含まれます。
param($QueueItem, $InputDocumentIn, $TriggerMetadata)
$Document = $InputDocumentIn
$Document.text = 'This was updated!'
Push-OutputBinding -Name InputDocumentOut -Value $Document
HTTP トリガー、クエリ文字列からの ID の検索
次の例では、Web API から 1 つのAzure Cosmos DB ドキュメントを読み取って更新する方法を示します。 ドキュメントの一意識別子は、バインドの "Id": "{Query.Id}" プロパティで定義されているように、HTTP 要求の querystring パラメーターを通じて提供されます。
Azure Cosmos DB入力バインドは、関数の構成ファイル (function.json) にあるバインドの一覧に最初に表示されます。
{
"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 ファイルには、受信ドキュメントを読み取り、変更を出力する PowerShell コードが含まれます。
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 トリガー、ルート データからの ID の検索
次の例では、Web API から 1 つのAzure Cosmos DB ドキュメントを読み取って更新する方法を示します。 ドキュメントの一意識別子は、route パラメーターを通じて提供されます。 ルート パラメーターは、HTTP 要求バインディングの route プロパティで定義され、Azure Cosmos DB "Id": "{Id}" バインド プロパティで参照されます。
Azure Cosmos DB入力バインドは、関数の構成ファイル (function.json) にあるバインドの一覧に最初に表示されます。
{
"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 ファイルには、受信ドキュメントを読み取り、変更を出力する PowerShell コードが含まれます。
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 を使用した複数のドキュメントの取得
次の例では、複数のAzure Cosmos DBドキュメントを読み取る方法を示します。 関数の構成ファイル (function.json) によって、sqlQuery を含むバインド プロパティが定義されます。
sqlQuery プロパティに指定された SQL ステートメントによって、関数に提供されるドキュメントのセットが選択されます。
{
"name": "Documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
run1.ps1 ファイルには、受信ドキュメントを読み取る PowerShell コードが含まれます。
param($QueueItem, $Documents, $TriggerMetadata)
foreach ($Document in $Documents) {
# operate on each document
}
このセクションには、次の例が含まれています。各例では、さまざまなソースから ID 値を指定して単一のドキュメントを読み取ります。
- キュー トリガー、JSON からの ID の検索
- HTTP トリガー、クエリ文字列からの ID の検索
- HTTP トリガー、ルート データからの ID の検索
- キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
例は、v1 または v2 Python プログラミング モデルのどちらを使用するかによって異なります。
Cosmos DB の SDK-Type バインドの使用 (プレビュー)
この例では、SDK 型を使用して、Cosmos DB 入力バインディングによって提供される基になる CosmosClient オブジェクトに直接アクセスします。
この関数は、すべてのデータベースをループし、その ID をログに記録します。
import logging
import azure.functions as func
import azurefunctions.extensions.bindings.cosmosdb as cosmos
app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.route(route="cosmos")
@app.cosmos_db_input(arg_name="client",
connection="CosmosDBConnection",
database_name=None,
container_name=None)
def get_docs(req: func.HttpRequest, client: cosmos.CosmosClient):
databases = client.list_databases()
for db in databases:
logging.info(f"Found database with ID: {db.get('id')}")
return "ok"
他の SDK の種類の使用例については、ContainerProxy および DatabaseProxy サンプルを参照してください。 関数アプリに SDK 型のバインドを含める方法の詳細なチュートリアルについては、Python CosmosDB 用 SDK バインドのサンプルに従ってください。
他の SDK 型バインドがサポートされているものも含め、詳細については、 SDK の型バインドに関するページを参照してください。
キュー トリガー、JSON からの ID の検索
次の例は、Azure Cosmos DB入力バインドを示しています。 この関数は、1 つのドキュメントを読み取って、そのドキュメントのテキスト値を更新します。
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]):
doc = inputDocument[0]
doc["text"] = "This was updated!"
outputDocument.set(doc)
print(f"Updated document.")
HTTP トリガー、クエリ文字列からの ID の検索
次の例は、単一のドキュメントを取得する関数を示しています。 関数は、クエリ文字列を使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
HTTP トリガー、ルート データからの ID の検索
次の例は、単一のドキュメントを取得する関数を示しています。 関数は、ルート データを使用して検索のための ID とパーティション キー値を指定する HTTP 要求によってトリガーされます。 その ID とパーティション キー値は、指定されたデータベースとコレクションから ToDoItem ドキュメントを取得するために使用されます。
キュー トリガー、SqlQuery を使用した複数のドキュメントの取得
次の例は、バインドを使用するAzure Cosmos DB入力バインドPython関数を示しています。 この関数は、SQL クエリで指定されている複数のドキュメントを、キュー トリガーを使用してクエリ パラメーターをカスタマイズすることで取得します。
キュー トリガーがパラメーター departmentId を提供します。
{ "departmentId" : "Finance" } のキュー メッセージは、金融部門のすべてのレコードを返します。
属性
インプロセスと分離ワーカー プロセスの C# ライブラリの両方で、属性を使って関数を定義します。 C# スクリプトでは、C# スクリプト ガイドで説明されているように、代わりに function.json 構成ファイルを使用します。
| 属性のプロパティ | 説明 |
|---|---|
| 接続 | クエリ対象のAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 詳細については、「接続」を参照してください。 |
| DatabaseName | 監視対象のコンテナーを含むAzure Cosmos DB データベースの名前。 |
| ContainerName | 監視対象のコンテナーの名前。 |
| PartitionKey | 参照用のパーティション キー値を指定します。 バインディング パラメーターを含めることもできます。 パーティション分割されたコンテナーの検索に必要です。 |
| 身分証明書 | 取得するドキュメントの ID。 このプロパティは、バインド式をサポートしています。
Id と SqlQuery プロパティの両方は設定しないでください。 いずれも設定しなかった場合は、コンテナー全体が取得されます。 |
| SqlQuery の | 複数のドキュメントを取得するために使用するAzure Cosmos DB SQL クエリ。 このプロパティは、次の例のように実行時のバインドをサポートします。SELECT * FROM c where c.departmentId = {departmentId}
Id と SqlQuery プロパティの両方は設定しないでください。 いずれも設定しなかった場合は、コンテナー全体が取得されます。 |
| PreferredLocations | (省略可能)Azure Cosmos DB サービス内の geo レプリケートされたデータベース アカウントの優先する場所 (リージョン) を定義します。 複数の値はコンマで区切る必要があります。 たとえば、East US,South Central US,North Europe のようにします。 |
デコレータ
Python v2 プログラミング モデルにのみ適用されます。
Python v2 関数は、cosmos_db_input デコレーターを使用して定義されます。これは、拡張機能のバージョンに応じて、これらのプロパティをサポートします。
| プロパティ | 説明 |
|---|---|
arg_name |
変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
database_name |
監視対象のコレクションを含むAzure Cosmos DB データベースの名前。 |
container_name |
監視対象のAzure Cosmos DB コレクションの名前。 |
connection |
監視対象のAzure Cosmos DBの接続文字列。 |
partition_key |
監視対象のAzure Cosmos DBのパーティション キー。 |
id |
取得するドキュメントの ID。 |
function.json を使用して定義Python関数については、「Configuration」セクションを参照してください。
注釈
Java関数ランタイム ライブラリから、Azure Cosmos DBから読み取るパラメーターに対して @CosmosDBInput 注釈を使用します。 この注釈では、次のプロパティがサポートされます。
構成
Python v1 プログラミング モデルにのみ適用されます。
次の表では、function.json ファイルで設定するバインド構成のプロパティについて説明します。これらのプロパティは、拡張機能バージョンによって異なります。
| function.json のプロパティ | 説明 |
|---|---|
| タイプ |
cosmosDB に設定する必要があります。 |
| 方向 |
in に設定する必要があります。 |
| 名前 | 変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
| 接続 | 監視対象のAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コンテナーの名前。 詳細については、「接続」を参照してください。 |
| databaseName | 監視対象のコンテナーを含むAzure Cosmos DB データベースの名前。 |
| containerName | 監視対象のコンテナーの名前。 |
| partitionKey | 参照用のパーティション キー値を指定します。 バインディング パラメーターを含めることもできます。 パーティション分割されたコンテナーの検索に必要です。 |
| ID | 取得するドキュメントの ID。 このプロパティは、バインド式をサポートしています。
id と sqlQuery プロパティの両方は設定しないでください。 いずれも設定しなかった場合は、コンテナー全体が取得されます。 |
| sqlQuery | 複数のドキュメントを取得するために使用するAzure Cosmos DB SQL クエリ。 このプロパティは、次の例のように実行時のバインドをサポートします。SELECT * FROM c where c.departmentId = {departmentId}
id と sqlQuery プロパティの両方は設定しないでください。 いずれも設定しなかった場合は、コンテナー全体が取得されます。 |
| preferredLocations | (省略可能)Azure Cosmos DB サービス内の geo レプリケートされたデータベース アカウントの優先する場所 (リージョン) を定義します。 複数の値はコンマで区切る必要があります。 たとえば、East US,South Central US,North Europe のようにします。 |
完全な例については、セクションの例を参照してください。
使用法
関数が正常に終了すると、入力ドキュメントへの変更がすべて自動的に保持されます。
Cosmos DB 入力バインドでサポートされるパラメーターの型は、Functions ランタイムのバージョン、拡張機能パッケージのバージョン、使用される C# のモダリティによって異なります。
関数で 1 つのドキュメントを処理するとき、Cosmos DB 入力バインドは次の型にバインドできます。
| タイプ | 説明 |
|---|---|
| JSON シリアル化可能な型 | Functions はドキュメントの JSON データを単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。 |
関数で 1 つのクエリから得た複数のドキュメントを処理するとき、Cosmos DB 入力バインドは次の型にバインドできます。
| タイプ | 説明 |
|---|---|
IEnumerable<T> (T は JSON シリアル化可能な型) |
クエリによって返されるエンティティの列挙型。 各エントリは 1 つのドキュメントを表します。 |
| CosmosClient1 | Cosmos DB アカウントに接続されているクライアント。 |
| データベース1 | Cosmos DB データベースに接続されているクライアント。 |
| コンテナー1 | Cosmos DB コンテナーに接続されているクライアント。 |
1 これらの型を使用するには、Microsoft.Azure を参照する必要があります。Functions.Worker.Extensions.CosmosDB 4.4.0 以降 および SDK 型バインドのcommon 依存関係。
Java functions ランタイム ライブラリから、@CosmosDBInput 注釈はAzure Cosmos DBデータを関数に公開します。 この注釈は、Optional<T> を使用して、ネイティブ Java型、POJO、または null 許容値と共に使用できます。
関数の終了時にドキュメントへの更新が自動的に行われることはありません。 関数でドキュメントを更新するには、出力バインドを使用します。 詳細については、「PowerShell の例」を参照してください。
データは、DocumentList パラメーターを介して関数から使用できるようになります。 ドキュメントに加えられた変更は、自動的には保存されません。
関数では、Azure Cosmos の PYTHON SDK 型バインドもサポートされています。これにより、基になる SDK の種類を使用してデータを操作できます。
重要
Pythonの CosmosDB SDK の種類のサポートはプレビュー段階であり、Python v2 プログラミング モデルでのみサポートされています。 詳細については、「Python の
SDK 型」を参照してください。
接続
connectionおよびleaseConnectionプロパティはアプリケーション設定内のキーに設定されており、Functionsランタイムが拡張機能で使うAzure Cosmos DBアカウントエンドポイントに接続するために使う値を返します。 これらのプロパティ設定の価値は、接続の種類によって異なります:
-
マネージドアイデンティティ接続:
connectionプロパティは複数の設定で共有される一つの<CONNECTION_NAME_PREFIX>であり、それらが共にアカウントへのアイデンティティベースの接続を定義します。 詳細については、「 同一性接続の定義」を参照してください。 -
Key Vault参照:
connectionプロパティ設定は、接続文字列が中央管理されている場所への参照Azure Key Vaultを返します。 詳細については、「Key Vault connectionsの定義」をご覧ください。 -
App Configuration reference:
connectionプロパティ設定は接続文字列またはKey Vault参照を返すAzure App Configuration参照を返します。 詳細については、接続記事のAzure App Configurationをご覧ください。 -
Connection string:
connectionプロパティ設定は実際のアカウント接続文字列を返します。 接続文字列には共有の秘密鍵が含まれているため、可能であれば管理型アイデンティティ接続の使用を検討すべきです。 詳細については、「 接続の定義」を参照してください。
バインディング接続について詳しく知りたい方は、Azure Functionsの「Manage connection in Connection」をご覧ください。 接続文字列を取得するには、Azure Cosmos DBアカウントにアクセスし、Keysを選択し、PRIMARY CONNECTION STRINGまたはSECONDARY CONNECTION STRINGの値をコピーしてください。 これらの接続文字列には共有の秘密鍵が含まれており、安全に保たなければなりません。
拡張の初期バージョンでは、接続プロパティは connectionStringSetting と leaseConnectionStringSettingと呼ばれていました。