Azure Cosmos DB トリガーは、Azure Cosmos DB変更フィードを使用して、パーティション間での挿入と更新をリッスンします。 変更フィードは、削除による更新を含めずに、新規および更新された項目を公開します。 Azure Cosmos DB トリガーを使用するエンド ツー エンドのシナリオについては、「
セットアップと構成の詳細については、概要に関するページをご覧ください。
従量課金プランと Premium プランに対する Cosmos DB のスケーリングの決定は、ターゲットベースのスケーリングによって行われます。 詳しくは、「ターゲット ベースのスケーリング」をご覧ください。
重要
この記事では、タブを使用して、Node.js プログラミング モデルの複数のバージョンに対応しています。 v4 モデルは一般提供されており、JavaScript と TypeScript の開発者にとって、より柔軟で直感的なエクスペリエンスが得られるように設計されています。 v4 モデルの動作の詳細については、Azure Functions Node.js 開発者ガイドを参照してください。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。
Azure Functionsでは、Python用の 2 つのプログラミング モデルがサポートされています。 バインドを定義する方法は、選択したプログラミング モデルによって異なります。
Python v2 プログラミング モデルを使用すると、Python関数コードでデコレーターを使用してバインドを直接定義できます。 詳細については、Python 開発者ガイドを参照してください。
この記事は、両方のプログラミング モデルをサポートしています。
Azure Cosmos DB トリガーを使用する完全なエンド ツー エンドの例については、「 Azure Functions を使用したAzure Cosmos DBでのデータベースの変更に対する応答」を参照してください。
例
トリガーの使用方法は、拡張機能パッケージのバージョンと、関数アプリで使用される C# のモダリティによって異なり、次のいずれかになります。
分離ワーカー プロセス クラス ライブラリでコンパイルされた C# 関数は、ランタイムから分離されたプロセスで実行されます。
次の例は、指定した C# モードの拡張機能のバージョンによって異なります。
この例では、アプリ設定の参照を使用し、エラー処理を含めます。 まず、モデルの種類を定義します。
public class ToDoItem
{
public string? Id { get; set; }
public string? Description { get; set; }
}
次の関数は、指定したデータベースとコンテナーで挿入または更新が行われるときに実行されます。
[Function("CosmosTrigger")]
public void Run([CosmosDBTrigger(
databaseName: "%COSMOS_DATABASE_NAME%",
containerName: "%COSMOS_CONTAINER_NAME%",
Connection = "COSMOS_CONNECTION",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<ToDoItem> documents,
FunctionContext context)
{
if (documents is not null && documents.Any())
{
_logger.LogInformation("Documents modified: {count}", documents.Count);
foreach (var doc in documents)
{
try
{
_logger.LogInformation("Processing document Id: {id}", doc.Id);
// Add your business logic here
}
catch (Exception ex)
{
_logger.LogError(ex, "Error processing document {id}", doc.Id);
// Continue processing remaining documents
}
}
}
}
[Function("health")]
public IActionResult HealthCheck([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequest req)
{
return new OkResult();
}
前の例では、ハードコードされた値ではなく、アプリ設定の参照 (%VAR_NAME%) を使用しています。 構成の詳細については、インプロセス タブのアプリ設定とローカル開発ガイダンスを参照してください。
この関数は、指定したデータベースとコンテナーに挿入または更新がある場合に呼び出されます。
Azure Cosmos DB SDK でスキーマが変更されたため、Azure Cosmos DB拡張機能のバージョン 4.x には、Java関数の azure-functions-java-library V3.0.0 が必要です。
@FunctionName("CosmosDBTriggerFunction")
public void run(
@CosmosDBTrigger(
name = "items",
databaseName = "ToDoList",
containerName = "Items",
leaseContainerName="leases",
connection = "AzureCosmosDBConnection",
createLeaseContainerIfNotExists = true
)
Object inputItem,
final ExecutionContext context
) {
context.getLogger().info("Items modified: " + inputItems.size());
}
Java関数ランタイム ライブラリで、値がAzure Cosmos DBから取得されるパラメーターに対して @CosmosDBTrigger 注釈を使用します。
Optional<T>を使用して、ネイティブ Java型、プレーン old Java オブジェクト (POJO)、または null 許容値と共にこの注釈を使用します。
次の例は、Azure Cosmos DB トリガー TypeScript 関数を示しています。 この関数は、Azure Cosmos DBレコードが追加または変更されたときにログ メッセージを書き込みます。
import { app, InvocationContext } from '@azure/functions';
export async function cosmosDBTrigger1(documents: unknown[], context: InvocationContext): Promise<void> {
context.log(`Cosmos DB function processed ${documents.length} documents`);
}
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: cosmosDBTrigger1,
});
次の例は、Azure Cosmos DB トリガー JavaScript 関数を示しています。 この関数は、Azure Cosmos DBレコードが追加または変更されたときにログ メッセージを書き込みます。
const { app } = require('@azure/functions');
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: (documents, context) => {
context.log(`Cosmos DB function processed ${documents.length} documents`);
},
});
次の例は、Azure Cosmos DBでデータの変更として関数を実行する方法を示しています。
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<connection-app-setting>",
"databaseName": "Tasks",
"collectionName": "Items",
"createLeaseCollectionIfNotExists": true
}
バインド属性名の一部は、Azure Cosmos DB拡張機能のバージョン 4.x で変更されていることに注意してください。
run.ps1 ファイルで、$Documents パラメーターを使用して関数をトリガーするドキュメントにアクセスできます。
param($Documents, $TriggerMetadata)
Write-Host "First document Id modified : $($Documents[0].id)"
次の例は、Azure Cosmos DB トリガー バインドを示しています。 この例は、v1 または v2 のどちらのプログラミング モデルPythonを使用するかによって異なります。
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="CosmosDBTrigger")
@app.cosmos_db_trigger(arg_name="documents",
database_name="%COSMOS_DATABASE_NAME%",
container_name="%COSMOS_CONTAINER_NAME%",
connection="COSMOS_CONNECTION",
lease_container_name="leases",
create_lease_container_if_not_exists="true")
def cosmos_trigger(documents: func.DocumentList) -> str:
if documents:
for doc in documents:
try:
logging.info('Processing document id: %s', doc['id'])
# Add your business logic here
except Exception as e:
logging.error('Error processing document %s: %s', doc.get('id', 'unknown'), str(e))
# Continue processing remaining documents
@app.function_name(name="health")
@app.route(route="health", methods=["GET"])
def health_check(req: func.HttpRequest) -> func.HttpResponse:
"""Health check endpoint for monitoring."""
return func.HttpResponse("OK", status_code=200)
前の例では、ハードコードされた値ではなく、アプリ設定の参照 (%VAR_NAME%) を使用しています。
アプリの設定
ID ベースの接続用に次のアプリケーション設定を構成します。
| Setting | 説明 | 例 |
|---|---|---|
COSMOS_DATABASE_NAME |
Azure Cosmos DB データベースの名前 | my-database |
COSMOS_CONTAINER_NAME |
監視するコンテナーの名前 | my-container |
COSMOS_CONNECTION__accountEndpoint |
Azure Cosmos DB アカウント エンドポイント | https://mycosmosdb.documents.azure.com:443/ |
COSMOS_CONNECTION__credential |
UAMI の managedidentity に設定 |
managedidentity |
COSMOS_CONNECTION__clientId |
ユーザー割り当てマネージド ID のクライアント ID | 00000000-0000-0000-0000-000000000000 |
ローカル開発
ローカル開発の場合は、 local.settings.json ファイルを作成します。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"COSMOS_DATABASE_NAME": "my-database",
"COSMOS_CONTAINER_NAME": "my-container",
"COSMOS_CONNECTION__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/"
}
}
ヒント
ローカル開発の場合は、 COSMOS_CONNECTION__credential と COSMOS_CONNECTION__clientIdを省略します。
DefaultAzureCredentialは、Azure CLIログイン資格情報を含め、複数の資格情報を順番に試行します。
ローカル開発の前提条件:
-
Azure CLI
az login完了 -
Azurite ストレージ エミュレーター の実行 (
azurite --silent)
以下の例は、変更された各ドキュメントをログに記録するAzure Cosmos DBのトリガー関数を示しています:
package main
import (
"context"
"log"
"github.com/azure/azure-functions-golang-worker/sdk"
"github.com/azure/azure-functions-golang-worker/sdk/bindings"
"github.com/azure/azure-functions-golang-worker/worker"
)
func main() {
app := sdk.FunctionApp()
app.CosmosDB("cosmosDBTrigger", processChanges,
sdk.WithDatabase("mydb"),
sdk.WithContainer("mycontainer"),
sdk.WithConnection("CosmosDBConnection"),
)
worker.Start(app)
}
func processChanges(ctx context.Context, docs []bindings.CosmosDocument) error {
for _, doc := range docs {
log.Printf("Document modified: %s", doc.ID)
}
return nil
}
属性
インプロセスと分離プロセスの両方の C# ライブラリは、CosmosDBTriggerAttributeを使用して関数を定義します。 C# スクリプトでは、C# スクリプト ガイドで説明されているように、代わりに function.json 構成ファイルを使用します。
特定のプロパティは、プロセス モデルと拡張機能のバージョンの両方によって異なります。
分離されたワーカー プロセス ライブラリでは、 名前空間の Microsoft.Azure.Functions.Worker を使用します。これらのプロパティは次のとおりです。
| 属性のプロパティ | 説明 |
|---|---|
| 接続 | 監視対象のAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 詳細については、「接続」を参照してください。 |
| DatabaseName | 監視対象のコンテナーを含むAzure Cosmos DB データベースの名前。 |
| ContainerName | 監視対象のコンテナーの名前。 |
| LeaseConnection | (省略可能)リース コンテナーを保持するAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 この値を設定しない場合、 Connection という値が使用されます。 このパラメーターは、ポータルでバインドが作成されるときに自動で設定されます。 リース コンテナーの接続文字列には書き込みアクセス許可が必要です。 |
| LeaseDatabaseName | (省略可能) リースの格納に使用するコンテナーを保持するデータベースの名前。 この値を設定しない場合、databaseName の設定の値が使用されます。 |
| LeaseContainerName | (省略可能) リースの格納に使用するコンテナーの名前。 この値を設定しない場合、leases という値が使用されます。 |
| CreateLeaseContainerIfNotExists | (省略可能) true に設定すると、リース コンテナーが存在していない場合に自動的に作成します。 既定値は false です。 値を true に設定した場合、Microsoft Entra ID を使用する場合、コンテナーの作成は 許可された操作ではなく、関数を起動できません。 |
| LeasesContainerThroughput | (省略可能) リース コンテナーの作成時に割り当てる要求ユニットの数を定義します。 この設定は、CreateLeaseContainerIfNotExists が true に設定されている場合のみ使用できます。 このパラメーターは、ポータルを使用してバインドを作成するときに自動的に設定されます。 |
| LeaseContainerPrefix | (省略可能) 設定すると、この関数のリース コンテナーで作成されたリースへのプレフィックスとして値が追加されます。 プレフィックスを使用すると、2 つの個別のAzure Functionsで、異なるプレフィックスを使用して同じリース コンテナーを共有できます。 |
| FeedPollDelay | (省略可能) 現在のすべての変更がドレインされた後、フィードの新しい変更についてパーティションをポーリングする間の遅延時間 (ミリ秒)。 既定値は 5,000 ミリ秒 (5 秒) です。 |
| LeaseAcquireInterval | (省略可能) 設定すると、パーティションが既知のホスト インスタンス間で均等に分散されているかどうかを計算するタスクを開始する間隔がミリ秒単位で定義されます。 既定値は 13,000 (13 秒) です。 |
| LeaseExpirationInterval | (省略可能) 設定すると、パーティションを表すリースでリースを取得する間隔がミリ秒単位で定義されます。 この間隔内にリースが更新されない場合、リースは期限切れとなり、パーティションの所有権は別のインスタンスに移動します。 既定値は 60,000 (60 秒) です。 |
| LeaseRenewInterval | (省略可能) 設定すると、インスタンスが現在保持しているパーティションのすべてのリースの更新間隔がミリ秒単位で定義されます。 既定値は 17,000 (17 秒) です。 |
| MaxItemsPerInvocation | (省略可能) 設定すると、関数呼び出しごとに、受信するアイテムの最大数がこのプロパティによって設定されます。 ストアド プロシージャを使って監視対象コンテナーの操作を実行した場合、変更フィードから項目を読み取るときにトランザクション スコープは保持されます。 その結果、受信した項目数が指定した値よりも多くなり、同じトランザクションで変更された項目が 1 つのアトミック バッチの一部として返される可能性があります。 |
| StartFromBeginning | (省略可能) このオプションを指定すると、現在の時刻から開始するのではなく、コンテナーの変更履歴の先頭から変更を読み取るようにトリガーに指示できます。 以降の実行ではチェックポイントが既に保存されているため、先頭からの読み取りが機能するのは、トリガーが初めて開始されたときのみです。 既にリースが作成されているときにこのオプションを true に設定しても効果はありません。 |
| StartFromTime | (省略可能) 変更フィードの読み取り操作を初期化する日時を取得または設定します。 推奨される形式は、2021-02-16T14:19:29Z のように、UTC 指定子を使った ISO 8601 です。 これは、最初のトリガー状態を設定するためにのみ使われます。 トリガーがリース状態になった後にこの値を変更しても効果はありません。 |
| PreferredLocations | (省略可能)Azure Cosmos DB サービス内の geo レプリケートされたデータベース アカウントの優先する場所 (リージョン) を定義します。 複数の値はコンマで区切る必要があります。 たとえば、"East US,South Central US,North Europe" などです。 |
デコレータ
Python v2 プログラミング モデルにのみ適用されます。
デコレーターを使用して定義Python v2 関数の場合、cosmos_db_trigger (Extension 4.x) は次のプロパティをサポートします。
| プロパティ | 説明 |
|---|---|
arg_name |
変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
database_name |
Azure Cosmos DB データベースの名前。 アプリ設定を参照するための %VAR_NAME% 構文をサポートします。 |
container_name |
監視対象のAzure Cosmos DB コンテナーの名前。
%VAR_NAME%構文をサポートします。 |
connection |
ID ベースの接続のアプリ設定または設定プレフィックスの名前 (たとえば、 COSMOS_CONNECTION は COSMOS_CONNECTION__accountEndpointに解決されます)。 |
lease_container_name |
リースの格納に使用されるコンテナーの名前。 |
create_lease_container_if_not_exists |
trueすると、リース コンテナーが存在しない場合は自動的に作成されます。 |
function.json を使用して定義Python関数については、「Configuration」セクションを参照してください。
注釈
Azure Cosmos DB SDK でスキーマが変更されたため、Azure Cosmos DB拡張機能のバージョン 4.x には、Java関数の azure-functions-java-library V3.0.0 が必要です。
Azure Cosmos DBからデータを読み取るパラメーターには、@CosmosDBTrigger注釈を使用します。 この注釈では、次のプロパティがサポートされます。
| 属性のプロパティ | 説明 |
|---|---|
| connection | 監視対象のAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 詳細については、「接続」を参照してください。 |
| name | 関数の名前です。 |
| databaseName | 監視対象のコンテナーを含むAzure Cosmos DB データベースの名前。 |
| containerName | 監視対象のコンテナーの名前。 |
| leaseConnectionStringSetting | (省略可能)リース コンテナーを保持するAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 この値を設定しない場合、 connection という値が使用されます。 このパラメーターは、ポータルでバインドが作成されるときに自動で設定されます。 リース コンテナーの接続文字列には書き込みアクセス許可が必要です。 |
| leaseDatabaseName | (省略可能) リースの格納に使用するコンテナーを保持するデータベースの名前。 この値を設定しない場合、databaseName の設定の値が使用されます。 |
| leaseContainerName | (省略可能) リースの格納に使用するコンテナーの名前。 この値を設定しない場合、leases という値が使用されます。 |
| createLeaseContainerIfNotExists | (省略可能) true に設定すると、リース コンテナーが存在していない場合に自動的に作成します。 既定値は false です。 値を true に設定した場合、Microsoft Entra ID を使用する場合、コンテナーの作成は許可される操作ではなく、関数アプリの起動が許可されません。 |
| leasesContainerThroughput | (省略可能) リース コンテナーの作成時に割り当てる要求ユニットの数を定義します。 この設定は、CreateLeaseContainerIfNotExists が true に設定されている場合のみ使用できます。 このパラメーターは、ポータルを使用してバインドを作成するときに自動的に設定されます。 |
| leaseContainerPrefix | (省略可能) 設定すると、この関数のリース コンテナーで作成されたリースへのプレフィックスとして値が追加されます。 プレフィックスを使用すると、2 つの個別のAzure Functionsで、異なるプレフィックスを使用して同じリース コンテナーを共有できます。 |
| feedPollDelay | (省略可能) 現在のすべての変更がドレインされた後、フィードの新しい変更についてパーティションをポーリングする間の遅延時間 (ミリ秒)。 既定値は 5,000 ミリ秒 (5 秒) です。 |
| leaseAcquireInterval | (省略可能) 設定すると、パーティションが既知のホスト インスタンス間で均等に分散されているかどうかを計算するタスクを開始する間隔がミリ秒単位で定義されます。 既定値は 13,000 (13 秒) です。 |
| leaseExpirationInterval | (省略可能) 設定すると、パーティションを表すリースでリースを取得する間隔がミリ秒単位で定義されます。 この期間内にリースが更新されない場合、リースは期限切れになり、パーティションの所有権は別のインスタンスに移動します。 既定値は 60,000 (60 秒) です。 |
| leaseRenewInterval | (省略可能)設定すると、インスタンスによって現在保持されているパーティションのすべてのリースの更新間隔がミリ秒単位で定義されます。 既定値は 17,000 (17 秒) です。 |
| maxItemsPerInvocation | (省略可能) 設定すると、関数呼び出しごとに、受信するアイテムの最大数がこのプロパティによって設定されます。 ストアド プロシージャを使って監視対象コンテナーの操作を実行した場合、変更フィードから項目を読み取るときにトランザクション スコープは保持されます。 その結果、受信した項目数が指定した値よりも多くなり、同じトランザクションで変更された項目が 1 つのアトミック バッチの一部として返される可能性があります。 |
| startFromBeginning | (省略可能) このオプションを指定すると、現在の時刻から開始するのではなく、コンテナーの変更履歴の先頭から変更を読み取るようにトリガーに指示できます。 以降の実行ではチェックポイントが既に保存されているため、先頭からの読み取りが機能するのは、トリガーが初めて開始されたときのみです。 既にリースが作成されているときにこのオプションを true に設定しても効果はありません。 |
| preferredLocations | (省略可能)Azure Cosmos DB サービス内の geo レプリケートされたデータベース アカウントの優先する場所 (リージョン) を定義します。 複数の値はコンマで区切る必要があります。 たとえば、「 East US,South Central US,North Europe 」のように入力します。 |
構成
Python v1 プログラミング モデルにのみ適用されます。
次の表では、function.json ファイルで設定するバインド構成のプロパティについて説明します。これらのプロパティは、拡張機能バージョンによって異なります。
| function.json のプロパティ | 説明 |
|---|---|
| type |
cosmosDBTrigger に設定する必要があります。 |
| direction |
in に設定する必要があります。 このパラメーターは、Azure ポータルでトリガーを作成するときに自動的に設定されます。 |
| name | 変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
| connection | 監視対象のAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コレクションの名前。 詳細については、「接続」を参照してください。 |
| databaseName | 監視対象のコンテナーを含むAzure Cosmos DB データベースの名前。 |
| containerName | 監視対象のコンテナーの名前。 |
| leaseConnection | (省略可能)リース コンテナーを保持するAzure Cosmos DB アカウントに接続する方法を指定するアプリ設定または設定コンテナーの名前。 この値を設定しない場合、 connection という値が使用されます。 このパラメーターは、ポータルでバインドが作成されるときに自動で設定されます。 リース コンテナーの接続文字列には書き込みアクセス許可が必要です。 |
| leaseDatabaseName | (省略可能) リースの格納に使用するコンテナーを保持するデータベースの名前。 この値を設定しない場合、databaseName の設定の値が使用されます。 |
| leaseContainerName | (省略可能) リースの格納に使用するコンテナーの名前。 この値を設定しない場合、leases という値が使用されます。 |
| createLeaseContainerIfNotExists | (省略可能) true に設定すると、リース コンテナーが存在していない場合に自動的に作成します。 既定値は false です。 値を true に設定した場合、Microsoft Entra ID を使用する場合、コンテナーの作成は 許可された操作ではなく、関数を起動できません。 |
| leasesContainerThroughput | (省略可能) リース コンテナーの作成時に割り当てる要求ユニットの数を定義します。 この設定は、createLeaseContainerIfNotExists が true に設定されている場合のみ使用できます。 このパラメーターは、ポータルを使用してバインドを作成するときに自動的に設定されます。 |
| leaseContainerPrefix | (省略可能) 設定すると、この関数のリース コンテナーで作成されたリースへのプレフィックスとして値が追加されます。 プレフィックスを使用すると、2 つの個別のAzure Functionsで、異なるプレフィックスを使用して同じリース コンテナーを共有できます。 |
| feedPollDelay | (省略可能) 現在のすべての変更がドレインされた後、フィードの新しい変更についてパーティションをポーリングする間の遅延時間 (ミリ秒)。 既定値は 5,000 ミリ秒 (5 秒) です。 |
| leaseAcquireInterval | (省略可能) 設定すると、パーティションが既知のホスト インスタンス間で均等に分散されているかどうかを計算するタスクを開始する間隔がミリ秒単位で定義されます。 既定値は 13,000 (13 秒) です。 |
| leaseExpirationInterval | (省略可能) 設定すると、パーティションを表すリースでリースを取得する間隔がミリ秒単位で定義されます。 この間隔内にリースが更新されない場合、リースは期限切れとなり、パーティションの所有権は別のインスタンスに移動します。 既定値は 60,000 (60 秒) です。 |
| leaseRenewInterval | (省略可能) 設定すると、インスタンスが現在保持しているパーティションのすべてのリースの更新間隔がミリ秒単位で定義されます。 既定値は 17,000 (17 秒) です。 |
| maxItemsPerInvocation | (省略可能) 設定すると、関数呼び出しごとに、受信するアイテムの最大数がこのプロパティによって設定されます。 ストアド プロシージャを使って監視対象コンテナーの操作を実行した場合、変更フィードから項目を読み取るときにトランザクション スコープは保持されます。 その結果、受信した項目数が指定した値よりも多くなり、同じトランザクションで変更された項目が 1 つのアトミック バッチの一部として返される可能性があります。 |
| startFromBeginning | (省略可能) このオプションを指定すると、現在の時刻から開始するのではなく、コンテナーの変更履歴の先頭から変更を読み取るようにトリガーに指示できます。 以降の実行ではチェックポイントが既に保存されているため、先頭からの読み取りが機能するのは、トリガーが初めて開始されたときのみです。 既にリースが作成されているときにこのオプションを true に設定しても効果はありません。 |
| startFromTime | (省略可能) 変更フィードの読み取り操作を初期化する日時を取得または設定します。 推奨される形式は、2021-02-16T14:19:29Z のように、UTC 指定子を使った ISO 8601 です。 これは、最初のトリガー状態を設定するためにのみ使われます。 トリガーがリース状態になった後にこの値を変更しても効果はありません。 |
| preferredLocations | (省略可能)Azure Cosmos DB サービス内の geo レプリケートされたデータベース アカウントの優先する場所 (リージョン) を定義します。 複数の値はコンマで区切る必要があります。 たとえば、"East US,South Central US,North Europe" などです。 |
完全な例については、「例」 セクションを参照してください。
使用法
トリガーは、パーティションに リース を保存するために使用する 2 つ目のコレクションを必要とします。 トリガーは、監視しているコレクションとリースを含むコレクションの両方が使用可能な場合にのみ機能します。
重要
同じコレクションに対して Azure Cosmos DB トリガーを使用するように複数の関数を構成する場合、各関数は専用のリース コレクションを使用するか、関数ごとに異なる LeaseCollectionPrefixを指定する必要があります。 それ以外の場合は、関数のうち 1 つのみがトリガーされます。 プレフィックスの詳細については、「属性」セクションを参照してください。
重要
同じコレクションに対して Azure Cosmos DB トリガーを使用するように複数の関数を構成する場合、各関数は専用のリース コレクションを使用するか、関数ごとに異なる leaseCollectionPrefixを指定する必要があります。 それ以外の場合は、関数のうち 1 つのみがトリガーされます。 プレフィックスの詳細については、「注釈」セクションを参照してください。
重要
同じコレクションに対して Azure Cosmos DB トリガーを使用するように複数の関数を構成する場合、各関数は専用のリース コレクションを使用するか、関数ごとに異なる leaseCollectionPrefixを指定する必要があります。 それ以外の場合は、関数のうち 1 つのみがトリガーされます。 プレフィックスの詳細については、「構成」セクションを参照してください。
トリガーは、ドキュメントが更新されたか挿入されたかを示しません。 ドキュメント自体を提供するだけです。 更新と挿入を異なる方法で処理する必要がある場合は、挿入または更新用のタイムスタンプ フィールドを実装します。
Azure Cosmos DB トリガーでサポートされるパラメーターの種類は、Functions ランタイムのバージョン、拡張機能パッケージのバージョン、使用される C# モダリティによって異なります。
関数で 1 つのドキュメントを処理するとき、Cosmos DB トリガーは次の型にバインドできます。
| タイプ | 説明 |
|---|---|
| JSON シリアル化可能な型 | Functions は、ドキュメントの JSON データを Cosmos DB 変更フィードから単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。 |
関数でドキュメントのバッチを処理するとき、Cosmos DB トリガーは次の型にバインドできます。
| タイプ | 説明 |
|---|---|
IEnumerable<T> (T は JSON シリアル化可能な型) |
バッチに含まれるエンティティの列挙型。 各エントリは、Cosmos DB 変更フィードの 1 つのドキュメントを表します。 |
接続
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と呼ばれていました。