Azure Functions 2.x 이상에 대한 Azure Cosmos DB 트리거

Azure Cosmos DB 트리거는 Azure Cosmos DB 변경 피드를 사용하여 파티션에서 삽입 및 업데이트를 수신 대기합니다. 변경 피드는 삭제의 업데이트를 포함하지 않고 새 항목과 업데이트된 항목을 게시합니다.

설정 및 구성 세부 정보에 대한 자세한 내용은 개요를 참조하세요.

사용량 및 프리미엄 플랜에 대한 Cosmos DB 크기 조정 결정은 대상 기반 크기 조정을 통해 수행됩니다. 자세한 내용은 대상 기반 크기 조정을 참조하세요.

Important

이 문서에서는 탭을 사용하여 여러 버전의 Node.js 프로그래밍 모델을 지원합니다. v4 모델은 일반적으로 사용 가능하며 JavaScript 및 TypeScript 개발자를 위해 보다 유연하고 직관적인 환경을 제공하도록 설계되었습니다. v4 모델의 작동 방식에 대한 자세한 내용은 Azure Functions Node.js 개발자 가이드를 참조하세요. v3과 v4의 차이점에 대해 자세히 알아보려면 마이그레이션 가이드를 참조하세요.

Azure Functions는 Python에 대해 두 가지 프로그래밍 모델을 지원합니다. 바인딩을 정의하는 방법은 선택한 프로그래밍 모델에 따라 달라집니다.

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 또는 nullable 값과 함께 사용할 Optional<T>수 있습니다.

다음 예에서는 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'])

특성

In Process격리된 프로세스 C# 라이브러리 모두 CosmosDBTriggerAttribute를 사용하여 함수를 정의합니다. 대신 C# 스크립트는 C# 스크립팅 가이드에 설명된 대로 function.json 구성 파일을 사용합니다.

특성 속성 설명
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 (선택 사항) 임대 컨테이너가 생성될 때 할당할 요청 단위의 수를 정의합니다. 이 설정은 CreateLeaseContainerIfNotExiststrue로 설정된 경우에만 사용됩니다. 이 매개 변수는 포털을 사용하여 바인딩이 생성될 때 자동으로 설정됩니다.
LeaseContainerPrefix (선택 사항) 설정하면 이 함수에 대한 임대 컨테이너에서 만든 임대에 접두사로 값이 추가됩니다. 접두사 사용에서는 두 개의 별도 Azure Functions가 서로 다른 접두사로 동일한 임대 컨테이너를 공유할 수 있습니다.
FeedPollDelay (선택 사항) 현재 변경 내용이 모두 삭제된 후에 피드에 대한 새로운 변경 내용의 파티션을 폴링하는 작업 간의 지연 시간(밀리초)입니다. 기본값은 5,000밀리초 또는 5초입니다.
LeaseAcquireInterval (선택 사항) 설정하면 파티션이 알려진 호스트 인스턴스 간에 균등하게 배포되는지를 계산하는 태스크를 시작하는 간격을 밀리초로 정의합니다. 기본값은 13000(13초)입니다.
LeaseExpirationInterval (선택 사항) 설정하면 파티션을 나타내는 임대에 대한 임대 기간인 간격을 밀리초로 정의합니다. 이 간격 내에서 임대를 갱신하지 않으면 기간이 만료되어 다른 인스턴스로 파티션 소유권이 이동합니다. 기본값은 60000(60초)입니다.
LeaseRenewInterval (선택 사항) 설정하면 인스턴스가 현재 보유한 파티션의 모든 임대에 대한 갱신 간격을 밀리초로 정의합니다. 기본값은 17000(17초)입니다.
MaxItemsPerInvocation (선택 사항) 설정하면 이 속성은 함수 호출당 수신되는 최대 항목 수를 설정합니다. 모니터링되는 컨테이너의 작업이 저장 프로시저를 통해 수행되는 경우 변경 피드에서 항목을 읽을 때 트랜잭션 범위가 유지됩니다. 결과적으로, 수신한 항목 수가 지정된 값보다 높을 수 있어 동일한 트랜잭션에 의해 변경된 항목이 하나의 원자성 일괄 처리의 일부로 반환됩니다.
StartFromBeginning (선택 사항) 이 옵션은 트리거에게 현재 시간에 시작하는 대신 컨테이너 변경 기록의 시작 부분에서 변경 내용을 읽도록 지시합니다. 후속 실행에서는 검사점이 이미 저장되어 있으므로 처음부터 읽기는 트리거가 처음 시작될 때만 작동합니다. 임대가 이미 만들어진 후에 이 옵션을 true로 설정하면 아무 효과가 없습니다.
StartFromTime (선택 사항) 변경 피드 읽기 작업을 초기화할 날짜와 시간을 가져오거나 설정합니다. 권장되는 형식은 2021-02-16T14:19:29Z와 같은 UTC 지정자가 있는 ISO 8601입니다. 초기 트리거 상태를 설정하는 데만 사용됩니다. 트리거가 임대 상태가 된 후에는 이 값을 변경해도 아무런 효과가 없습니다.
PreferredLocations (선택 사항) Azure Cosmos DB 서비스에서 지역 복제된 데이터베이스 계정에 대한 기본 위치(지역)를 정의합니다. 값은 쉼표로 구분해야 합니다. 예를 들면 "미국 동부, 미국 중남부, 북유럽"입니다.

데코레이터

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이 필요합니다.

@CosmosDBTrigger Azure Cosmos DB에서 데이터를 읽는 매개 변수에 주석을 사용합니다. 주석은 다음 속정을 지원합니다.

특성 속성 설명
connection 모니터링 중인 Azure Cosmos DB 계정에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 자세한 내용은 연결을 참조하세요.
이름 함수의 이름.
databaseName 컨테이너가 모니터링되는 Azure Cosmos DB 데이터베이스의 이름입니다.
containerName 모니터링되는 컨테이너의 이름입니다.
leaseConnectionStringSetting (선택 사항) 임대 컬렉션을 보유한 Azure Cosmos DB 계정에 연결하는 방법을 지정하는 앱 설정 또는 설정 컨테이너의 이름입니다.

설정하지 않으면 Connection 값이 사용됩니다. 이 매개 변수는 포털에서 바인딩이 생성될 때 자동으로 설정됩니다. 임대 컨테이너에 대한 연결 문자열에 쓰기 권한이 있어야 합니다.
leaseDatabaseName (선택 사항) 임대를 저장하는 데 사용되는 컨테이너를 보유하는 데이터베이스의 이름입니다. 설정하지 않으면 databaseName 설정 값이 사용됩니다.
leaseContainerName (선택 사항) 임대를 저장하는 데 사용되는 컨테이너의 이름입니다. 설정하지 않으면 leases 값이 사용됩니다.
createLeaseContainerIfNotExists (선택 사항) true로 설정하면 임대 컨테이너가 아직 없는 경우 자동으로 생성됩니다. 기본값은 false입니다. 값을 설정하는 경우 Microsoft Entra ID를 true사용하는 경우 컨테이너 만들기는 허용되는 작업이 아니며 함수가 시작되지 않습니다.
leasesContainerThroughput (선택 사항) 임대 컨테이너가 생성될 때 할당할 요청 단위의 수를 정의합니다. 이 설정은 CreateLeaseContainerIfNotExiststrue로 설정된 경우에만 사용됩니다. 이 매개 변수는 포털을 사용하여 바인딩이 생성될 때 자동으로 설정됩니다.
leaseContainerPrefix (선택 사항) 설정하면 이 함수에 대한 임대 컨테이너에서 만든 임대에 접두사로 값이 추가됩니다. 접두사 사용에서는 두 개의 별도 Azure Functions가 서로 다른 접두사로 동일한 임대 컨테이너를 공유할 수 있습니다.
feedPollDelay (선택 사항) 현재 변경 내용이 모두 삭제된 후에 피드에 대한 새로운 변경 내용의 파티션을 폴링하는 작업 간의 지연 시간(밀리초)입니다. 기본값은 5,000밀리초 또는 5초입니다.
leaseAcquireInterval (선택 사항) 설정하면 파티션이 알려진 호스트 인스턴스 간에 균등하게 배포되는지를 계산하는 태스크를 시작하는 간격을 밀리초로 정의합니다. 기본값은 13000(13초)입니다.
leaseExpirationInterval (선택 사항) 설정하면 파티션을 나타내는 임대에 대한 임대 기간인 간격을 밀리초로 정의합니다. 이 간격 내에 임대가 갱신되지 않으면 임대가 만료되고 파티션의 소유권이 다른 인스턴스로 이동합니다. 기본값은 60000(60초)입니다.
leaseRenewInterval (선택 사항) 설정하면 인스턴스가 현재 보유한 파티션의 모든 임대에 대한 갱신 간격을 밀리초로 정의합니다. 기본값은 17000(17초)입니다.
maxItemsPerInvocation (선택 사항) 설정하면 이 속성은 함수 호출당 수신되는 최대 항목 수를 설정합니다. 모니터링되는 컨테이너의 작업이 저장 프로시저를 통해 수행되는 경우 변경 피드에서 항목을 읽을 때 트랜잭션 범위가 유지됩니다. 결과적으로, 수신한 항목 수가 지정된 값보다 높을 수 있어 동일한 트랜잭션에 의해 변경된 항목이 하나의 원자성 일괄 처리의 일부로 반환됩니다.
startFromBeginning (선택 사항) 이 옵션은 트리거에게 현재 시간에 시작하는 대신 컨테이너 변경 기록의 시작 부분에서 변경 내용을 읽도록 지시합니다. 후속 실행에서는 검사점이 이미 저장되어 있으므로 처음부터 읽기는 트리거가 처음 시작될 때만 작동합니다. 임대가 이미 만들어진 후에 이 옵션을 true로 설정하면 아무 효과가 없습니다.
preferredLocations (선택 사항) Azure Cosmos DB 서비스에서 지역 복제된 데이터베이스 계정에 대한 기본 위치(지역)를 정의합니다. 값은 쉼표로 구분해야 합니다. 예를 들면 "미국 동부, 미국 중남부, 북유럽"입니다.

구성

Python v1 프로그래밍 모델에만 적용됩니다.

다음 표에서는 app.cosmosDB() 메서드에 전달된 options 개체에 설정할 수 있는 속성에 대해 설명합니다. type, directionname 속성은 v4 모델에 적용되지 않습니다.

다음 표에서는 확장 버전에 따라 속성이 다른 function.json 파일에서 설정한 바인딩 구성 속성을 설명합니다.

function.json 속성 설명
type cosmosDBTrigger로 설정해야 합니다.
direction in로 설정해야 합니다. 이 매개 변수는 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다.
이름 변경 사항이 포함된 문서 목록을 나타내는 함수 코드에 사용되는 변수 이름.
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 (선택 사항) 임대 컨테이너가 생성될 때 할당할 요청 단위의 수를 정의합니다. 이 설정은 createLeaseContainerIfNotExiststrue로 설정된 경우에만 사용됩니다. 이 매개 변수는 포털을 사용하여 바인딩이 생성될 때 자동으로 설정됩니다.
leaseContainerPrefix (선택 사항) 설정하면 이 함수에 대한 임대 컨테이너에서 만든 임대에 접두사로 값이 추가됩니다. 접두사 사용에서는 두 개의 별도 Azure Functions가 서로 다른 접두사로 동일한 임대 컨테이너를 공유할 수 있습니다.
feedPollDelay (선택 사항) 현재 변경 내용이 모두 삭제된 후에 피드에 대한 새로운 변경 내용의 파티션을 폴링하는 작업 간의 지연 시간(밀리초)입니다. 기본값은 5,000밀리초 또는 5초입니다.
leaseAcquireInterval (선택 사항) 설정하면 파티션이 알려진 호스트 인스턴스 간에 균등하게 배포되는지를 계산하는 태스크를 시작하는 간격을 밀리초로 정의합니다. 기본값은 13000(13초)입니다.
leaseExpirationInterval (선택 사항) 설정하면 파티션을 나타내는 임대에 대한 임대 기간인 간격을 밀리초로 정의합니다. 이 간격 내에서 임대를 갱신하지 않으면 기간이 만료되어 다른 인스턴스로 파티션 소유권이 이동합니다. 기본값은 60000(60초)입니다.
leaseRenewInterval (선택 사항) 설정하면 인스턴스가 현재 보유한 파티션의 모든 임대에 대한 갱신 간격을 밀리초로 정의합니다. 기본값은 17000(17초)입니다.
maxItemsPerInvocation (선택 사항) 설정하면 이 속성은 함수 호출당 수신되는 최대 항목 수를 설정합니다. 모니터링되는 컨테이너의 작업이 저장 프로시저를 통해 수행되는 경우 변경 피드에서 항목을 읽을 때 트랜잭션 범위가 유지됩니다. 결과적으로, 수신한 항목 수가 지정된 값보다 높을 수 있어 동일한 트랜잭션에 의해 변경된 항목이 하나의 원자성 일괄 처리의 일부로 반환됩니다.
startFromBeginning (선택 사항) 이 옵션은 트리거에게 현재 시간에 시작하는 대신 컨테이너 변경 기록의 시작 부분에서 변경 내용을 읽도록 지시합니다. 후속 실행에서는 검사점이 이미 저장되어 있으므로 처음부터 읽기는 트리거가 처음 시작될 때만 작동합니다. 임대가 이미 만들어진 후에 이 옵션을 true로 설정하면 아무 효과가 없습니다.
startFromTime (선택 사항) 변경 피드 읽기 작업을 초기화할 날짜와 시간을 가져오거나 설정합니다. 권장되는 형식은 2021-02-16T14:19:29Z와 같은 UTC 지정자가 있는 ISO 8601입니다. 초기 트리거 상태를 설정하는 데만 사용됩니다. 트리거가 임대 상태가 된 후에는 이 값을 변경해도 아무런 효과가 없습니다.
preferredLocations (선택 사항) Azure Cosmos DB 서비스에서 지역 복제된 데이터베이스 계정에 대한 기본 위치(지역)를 정의합니다. 값은 쉼표로 구분해야 합니다. 예를 들면 "미국 동부, 미국 중남부, 북유럽"입니다.

전체 예제는 예제 섹션을 참조하세요.

사용

트리거에는 파티션에 임대를 저장하는 데 사용할 보조 컬렉션이 필요합니다. 모니터링 중인 컬렉션과 임대를 포함하는 컬렉션을 모두 트리거가 작동하려면 사용할 수 있어야 합니다.

Important

동일한 컬렉션에 Azure Cosmos DB 트리거를 사용하도록 여러 함수가 구성된 경우 각 함수는 전용 임대 컬렉션을 사용하거나 각 함수에 다른 LeaseCollectionPrefix를 지정해야 합니다. 그렇지 않으면 함수 중 하나만 트리거됩니다. 접두사에 대한 자세한 내용은 특성 섹션을 참조하세요.

Important

동일한 컬렉션에 Azure Cosmos DB 트리거를 사용하도록 여러 함수가 구성된 경우 각 함수는 전용 임대 컬렉션을 사용하거나 각 함수에 다른 leaseCollectionPrefix를 지정해야 합니다. 그렇지 않으면 함수 중 하나만 트리거됩니다. 접두사에 대한 자세한 내용은 주석 섹션을 참조하세요.

Important

동일한 컬렉션에 Azure Cosmos DB 트리거를 사용하도록 여러 함수가 구성된 경우 각 함수는 전용 임대 컬렉션을 사용하거나 각 함수에 다른 leaseCollectionPrefix를 지정해야 합니다. 그렇지 않으면 함수 중 하나만 트리거됩니다. 접두사에 대한 자세한 내용은 구성 섹션참조하세요.

트리거는 문서가 업데이트되었는지 삽입되었는지 여부를 나타내지 않으며 문서 자체를 제공합니다. 업데이트 및 삽입을 다르게 처리해야 하는 경우 삽입 또는 업데이트에 대한 타임스탬프 필드를 구현하여 이 작업을 수행할 수 있습니다.

Azure Cosmos DB 트리거에서 지원하는 매개 변수 형식은 Functions 런타임 버전, 확장 패키지 버전 및 사용된 C# 모달리티에 따라 다릅니다.

함수가 단일 문서를 처리하도록 하려는 경우 Cosmos DB 트리거는 다음 형식에 바인딩할 수 있습니다.

Type 설명
JSON 직렬화 가능 형식 함수는 Cosmos DB 변경 피드에서 문서의 JSON 데이터를 POCO(일반 CLR 개체) 형식으로 역직렬화하려고 합니다.

함수가 문서 일괄 처리를 처리하도록 하려는 경우 Cosmos DB 트리거는 다음 형식에 바인딩할 수 있습니다.

Type 설명
IEnumerable<T>여기서 T는 JSON 직렬화 가능 형식입니다. 일괄 처리에 포함된 엔터티의 열거형입니다. 각 항목은 Cosmos DB 변경 피드의 하나의 문서를 나타냅니다.

연결

connectionStringSetting/connectionleaseConnectionStringSetting/leaseConnection 속성은 앱이 Azure Cosmos DB에 연결해야 하는 방법을 지정하는 환경 구성에 대한 참조입니다. 다음을 지정할 수 있습니다.

  • 연결 문자열이 포함된 애플리케이션 설정의 이름
  • 함께 ID 기반 연결을 정의하는 여러 애플리케이션 설정에 대한 공유 접두사의 이름입니다. 이 옵션은 확장 버전 4.x 이상connectionleaseConnection 버전에만 사용할 수 있습니다.

구성된 값이 단일 설정에 대해 정확히 일치하고 다른 설정에 대해 접두사가 일치하는 경우 정확한 일치가 사용됩니다.

Connection string

데이터베이스 계정에 대한 연결 문자열은 바인딩 구성의 연결 속성에 지정된 값과 일치하는 이름으로 애플리케이션 설정에 저장해야 합니다.

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는 credentialclientID 속성을 사용하여 지정할 수 있지만 기본적으로 시스템 할당 ID가 사용됩니다. 리소스 ID를 사용하여 사용자가 할당한 ID를 구성하는 것은 지원되지 않습니다. 로컬 개발과 같은 다른 컨텍스트에서 실행할 때 사용자 지정할 수 있지만 대신 개발자 ID가 사용됩니다. ID 기반 연결을 사용하여 로컬 개발을 참조하세요.

ID에 권한 부여

사용되는 모든 ID에는 의도한 작업을 수행할 수 있는 권한이 있어야 합니다. 대부분 Azure 서비스의 경우 이는 해당 권한을 제공하는 기본 제공 또는 사용자 지정 역할을 사용하여 Azure RBAC에서 역할을 할당해야 함을 의미합니다.

Important

일부 사용 권한은 모든 컨텍스트에 필요하지 않은 대상 서비스에 의해 노출될 수 있습니다. 가능한 경우 최소 권한 원칙을 준수하여 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는 컨테이너 만들기를 관리 작업으로 처리합니다. 트리거에 대한 데이터 평면 작업으로 사용할 수 없습니다. 함수를 설정하기 전에 트리거에 필요한 컨테이너(임대 컨테이너 포함)를 만들어야 합니다.

다음 단계