Azure Functions 2.x 以降での 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 開発者ガイド」を参照してください。
この記事は、両方のプログラミング モデルをサポートしています。
例
トリガーの使用方法は、拡張機能パッケージのバージョンと、関数アプリで使用される C# のモダリティによって異なり、次のいずれかになります。
分離ワーカー プロセス クラス ライブラリでコンパイルされた C# 関数は、ランタイムから分離されたプロセスで実行されます。
次の例は、指定した C# モードの拡張機能のバージョンによって異なります。
この例では、次のようなシンプルな ToDoItem
タイプを参照します。
public class ToDoItem
{
public string? Id { get; set; }
public string? Description { get; set; }
}
指定されたデータベースとコレクション内に挿入または更新がある場合に、次の関数が呼び出されます。
[Function("CosmosTrigger")]
public void Run([CosmosDBTrigger(
databaseName: "ToDoItems",
containerName:"TriggerItems",
Connection = "CosmosDBConnection",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<ToDoItem> todoItems,
FunctionContext context)
{
if (todoItems is not null && todoItems.Any())
{
foreach (var doc in todoItems)
{
_logger.LogInformation("ToDoItem: {desc}", doc.Description);
}
}
}
この関数は、指定したデータベースとコンテナーに挿入または更新がある場合に呼び出されます。
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
注釈を使用します。 この注釈は、Java のネイティブ型、POJO、または Optional<T>
を使用した 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(name="documents",
connection="CONNECTION_SETTING",
database_name="DB_NAME",
container_name="CONTAINER_NAME",
lease_container_name="leases",
create_lease_container_if_not_exists="true")
def test_function(documents: func.DocumentList) -> str:
if documents:
logging.info('Document id: %s', documents[0]['id'])
属性
インプロセスと分離プロセスの C# ライブラリはどちらも、CosmosDBTriggerAttribute 属性を使用して関数を定義します。 C# スクリプトでは、C# スクリプト ガイドで説明されているように、代わりに function.json 構成ファイルを使用します。
属性のプロパティ | 説明 |
---|---|
接続 | 監視対象の Azure Cosmos DB アカウントへの接続方法を指定するアプリの設定または設定のコレクションの名前。 詳細については、「接続」を参照してください。 |
DatabaseName | 監視対象のコンテナーを含む Azure Cosmos DB データベースの名前。 |
ContainerName | 監視対象のコンテナーの名前。 |
LeaseConnection | (省略可能) リース コンテナーを保持する Azure Cosmos DB アカウントへの接続方法を指定するアプリの設定または設定コレクションの名前。 この値を設定しない場合、 Connection という値が使用されます。 このパラメーターは、ポータルでバインドが作成されるときに自動で設定されます。 リース コンテナーの接続文字列には書き込みアクセス許可が必要です。 |
LeaseDatabaseName | (省略可能) リースの格納に使用するコンテナーを保持するデータベースの名前。 この値を設定しない場合、databaseName の設定の値が使用されます。 |
LeaseContainerName | (省略可能) リースの格納に使用するコンテナーの名前。 この値を設定しない場合、leases という値が使用されます。 |
CreateLeaseContainerIfNotExists | (省略可能) true に設定すると、リース コンテナーが存在していない場合に自動的に作成します。 既定値は false です。 Microsoft Entra ID を使用する場合に値を true に設定すると、コンテナーの作成は許可されている操作ではなく、関数を起動できません。 |
LeasesContainerThroughput | (省略可能) リース コンテナーの作成時に割り当てる要求ユニットの数を定義します。 この設定は、CreateLeaseContainerIfNotExists が true に設定されている場合のみ使用できます。 このパラメーターは、ポータルを使用してバインドを作成するときに自動的に設定されます。 |
LeaseContainerPrefix | (省略可能) 設定すると、この関数のリース コンテナーで作成されたリースへのプレフィックスとして値が追加されます。 プレフィックスを使用すると、異なるプレフィックスを使用して、2 つの別の Azure 関数が同じリース コンテナーを共有できるようになります。 |
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
に次のプロパティがあります。
プロパティ | 説明 |
---|---|
arg_name |
変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
database_name |
監視されているコレクションを使用する Azure Cosmos DB データベースの名前。 |
collection_name |
監視対象の Azure Cosmos DB コレクションの名前。 |
connection |
監視対象の Azure Cosmos DB の接続文字列。 |
function.json を使用して定義された Python 関数については、「構成」セクションを参照してください。
注釈
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 関数が同じリース コンテナーを共有できるようになります。 |
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 Portal でトリガーを作成するときに自動で設定されます。 |
name | 変更されるドキュメントの一覧を表す、関数コードで使用する変数の名前。 |
connection | 監視対象の Azure Cosmos DB アカウントへの接続方法を指定するアプリの設定または設定のコレクションの名前。 詳細については、「接続」を参照してください。 |
databaseName | 監視対象のコンテナーを含む Azure Cosmos DB データベースの名前。 |
containerName | 監視対象のコンテナーの名前。 |
leaseConnection | (省略可能) リース コンテナーを保持する Azure Cosmos DB アカウントへの接続方法を指定するアプリの設定または設定コンテナーの名前。 この値を設定しない場合、 connection という値が使用されます。 このパラメーターは、ポータルでバインドが作成されるときに自動で設定されます。 リース コンテナーの接続文字列には書き込みアクセス許可が必要です。 |
leaseDatabaseName | (省略可能) リースの格納に使用するコンテナーを保持するデータベースの名前。 この値を設定しない場合、databaseName の設定の値が使用されます。 |
leaseContainerName | (省略可能) リースの格納に使用するコンテナーの名前。 この値を設定しない場合、leases という値が使用されます。 |
createLeaseContainerIfNotExists | (省略可能) true に設定すると、リース コンテナーが存在していない場合に自動的に作成します。 既定値は false です。 Microsoft Entra ID を使用する場合に値を true に設定すると、コンテナーの作成は許可されている操作ではなく、関数を起動できません。 |
leasesContainerThroughput | (省略可能) リース コンテナーの作成時に割り当てる要求ユニットの数を定義します。 この設定は、createLeaseContainerIfNotExists が true に設定されている場合のみ使用できます。 このパラメーターは、ポータルを使用してバインドを作成するときに自動的に設定されます。 |
leaseContainerPrefix | (省略可能) 設定すると、この関数のリース コンテナーで作成されたリースへのプレフィックスとして値が追加されます。 プレフィックスを使用すると、異なるプレフィックスを使用して、2 つの別の Azure 関数が同じリース コンテナーを共有できるようになります。 |
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 トリガーは次の型にバインドできます。
Type | 説明 |
---|---|
JSON シリアル化可能な型 | Functions は、ドキュメントの JSON データを Cosmos DB 変更フィードから単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。 |
関数でドキュメントのバッチを処理するとき、Cosmos DB トリガーは次の型にバインドできます。
Type | 説明 |
---|---|
IEnumerable<T> (T は JSON シリアル化可能な型) |
バッチに含まれるエンティティの列挙型。 各エントリは、Cosmos DB 変更フィードの 1 つのドキュメントを表します。 |
接続
connectionStringSetting
/connection
プロパティと leaseConnectionStringSetting
/leaseConnection
プロパティは、アプリを Azure Cosmos DB に接続する方法を指定する環境構成への参照です。 以下を指定できます。
- 接続文字列を含むアプリケーション設定の名前。
- まとめて ID ベースの接続を定義する、複数のアプリケーション設定の共有プレフィックスの名前。 このオプションは、
connection
のconnection
およびleaseConnection
バージョンでのみ使用できます。
構成された値が、1 つの設定に完全一致し、プレフィックスがその他の設定とも一致する場合は、完全一致が使用されます。
接続文字列
お使いのデータベース アカウントの接続文字列を、バインディング構成の接続プロパティで指定した値と同じ名前のアプリケーション設定に格納する必要があります。
ID ベースの接続
バージョン 4.x 以降の拡張機能をお使いの場合は、シークレットを含む接続文字列を使う代わりに、アプリで Microsoft Entra ID を使用できます。 これを行うには、トリガーおよびバインディング構成の接続プロパティにマップされる共通のプレフィックスに設定を定義します。
このモードでは、拡張機能に次のプロパティが必要です。
プロパティ | 環境変数テンプレート | 説明 | 値の例 |
---|---|---|---|
アカウント エンドポイント | <CONNECTION_NAME_PREFIX>__accountEndpoint |
Azure Cosmos DB アカウント エンドポイント URI。 | https://<database_account_name>.documents.azure.com:443/ |
接続をカスタマイズするには、プロパティを追加設定します。 「ID ベース接続に共通のプロパティ」を参照してください。
Azure Functions サービスでホストされている場合、ID ベースの接続では、マネージド ID が使用されます。 ユーザー割り当て ID を credential
および clientID
プロパティで指定できますが、システム割り当て ID が既定で使用されます。 リソース ID を使用したユーザー割り当て ID の構成はサポートされていないことに注意してください。 ローカル開発などの他のコンテキストで実行する場合は、代わりに開発者 ID が使用されますが、カスタマイズすることもできます。 ID ベースの接続によるローカル開発に関するページをご覧ください。
ID にアクセス許可を付与する
使用されている ID が何であれ、目的のアクションを実行するためのアクセス許可が必要です。 ほとんどの Azure では、これはそれらのアクセス許可を提供する組み込みロールまたはカスタム ロールを使って、Azure RBAC でロールを割り当てる必要があることを意味します。
重要
すべてのコンテキストに必要ではない一部のアクセス許可がターゲット サービスによって公開される場合があります。 可能であれば、最小限の特権の原則に従い、必要な特権だけを ID に付与します。 たとえば、アプリがデータ ソースからの読み取りのみを行う必要がある場合は、読み取りアクセス許可のみを持つロールを使用します。 サービスへの書き込みも可能なロールを割り当てることは、読み取り操作に対するアクセス許可が過剰になるため、不適切です。 同様に、ロールの割り当てが、読み取る必要のあるリソースだけに限定されていることを確認する必要があります。
Cosmos DB では、データ操作に Azure RBAC は使われません。 代わりに、同様の概念に基づいて構築された Cosmos DB の組み込み RBAC システムが使われます。 実行時にデータベース アカウントへのアクセスを提供するロールの割り当てを作成する必要があります。 所有者のような Azure RBAC 管理ロールでは十分ではありません。 次の表は、通常の操作で Azure Cosmos DB の拡張機能を使用するときに推奨される組み込みのロールを示しています。 アプリケーションでは、記述したコードに基づいて追加のアクセス許可が必要になる場合があります。
[バインドの種類] | 組み込みロールの例 1 |
---|---|
トリガー 2 | Cosmos DB 組み込みデータ共同作成者 |
入力バインド | Cosmos DB 組み込みデータ リーダー |
出力バインド | Cosmos DB 組み込みデータ共同作成者 |
1 これらのロールは、Azure RBAC ロールの割り当てでは使用できません。 これらのロールの割り当て方法について詳しくは、Cosmos DB の組み込み RBAC システムに関するドキュメントをご覧ください。
2 ID を使うと、Cosmos DB はコンテナーの作成を管理操作として扱います。 トリガーのデータ プレーン操作としては使用できません。 関数を設定する前に、トリガーで必要なコンテナー (リース コンテナーを含む) を作成する必要があります。