Azure функция не запускается автоматически триггером космоса при установке StartFromBeginning = true - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь перенести данные из одной коллекции в другую, используя azure функции запуска Космос. Я установил StartFromBeginning = True. У меня есть несколько коллекций для миграции, поэтому я использую одну функцию для каждой коллекции, поэтому передача происходит быстро.

Когда я развертываю функцию, она показывает, что статус имеет Выполнение, но фактически не запускает передачу, пока я не остановлюсь и не начну. Или, если я go в разделе монитора и go в реальном времени метрики, то это начнется. Есть ли способ начать передачу, как только она будет развернута. Я испортил настройку?

Например, вчера вечером я развернул функцию, а сегодня утром, когда посмотрел на количество записей в коллекции, ее не было. Когда я перешел к разделу «Монитор» в функциях Azure, а затем к метрикам приложения Live, только я вижу, как он инициализируется, а затем начинает выполняться.

Космический триггер

    public async Task Run([CosmosDBTrigger(
        databaseName: "%SourceDatabaseName%", 
        collectionName: "%ContainerName%",
        ConnectionStringSetting = "connectionString",
        StartFromBeginning =true,
        LeaseCollectionName ="%ContainerLeaseName%",
        CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> source,
        [CosmosDB(databaseName:"%TargetDatabaseName%",
        collectionName:"%TargetContainerName%",
        ConnectionStringSetting = "connectionString")]IAsyncCollector<Document> destination,
        ILogger log)

Развернуть сценарий

    az functionapp create `
      -n $functionAppName `
      --storage-account $storageAccountName `
      --consumption-plan-location $location `
      --app-insights $appInsightsName `
      --runtime dotnet `
      -g $resourceGroup

    az functionapp deployment source config-zip `
      -g $resourceGroup -n $functionAppName --src $publishZip

    az functionapp config appsettings set -n $functionAppName -g $resourceGroup `
    --settings "connectionString=$cosmosConnectionString" "ContainerName=$cosmosContainer" "ContainerLeaseName=$($cosmosContainer)Lease" "SourceDatabaseName=$sourceCosmosDb" "TargetDatabaseName=$destCosmosDb" "TargetContainerName=$cosmosContainer" "JobType=$jobType"

1 Ответ

0 голосов
/ 30 марта 2020

В вашей коллекции аренды уже есть какие-либо документы? Конфигурация StartFromBeginning будет срабатывать только в том случае, если коллекция аренды пуста.

Кроме того, вы упомянули, что у вас есть несколько коллекций для миграции, все ли они используют одну и ту же коллекцию аренды? В таком случае было бы лучше предоставить им отдельные коллекции аренды для работы, в противном случае другие триггеры увидят, что в коллекции аренды уже есть информация, и не запустят StartFromBeginning.

Документация по StartFromBeginning

Когда установлено, оно запускает триггер начинать чтение изменений с начала истории коллекции вместо текущего времени. Это работает только при первом запуске триггера, так как при последующих запусках контрольные точки уже сохранены. Установка этого значения в true, если уже есть арендные договоры, не имеет никакого эффекта.

** Я понимаю, что это может быть лучше в качестве комментария, но, к сожалению, у меня недостаточно представителей .

...