#azure #azure-functions #azure-app-service-plans
#azure #azure-функции #планы azure-app-service-plans
Вопрос:
У меня есть функция Azure с запуском таймера. Расписание "*/6 * * * *"
(выполняется каждые шесть минут). Я не могу запустить ее вручную, и она не запускается автоматически. Ниже мой function.json
:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.31",
"configurationSource": "attributes",
"bindings": [
{
"type": "timerTrigger",
"schedule": "%TimerTriggerPeriod%",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
}
],
"disabled": false,
"scriptFile": "../bin/AccessChangeMonitoring.dll",
"entryPoint": "Microsoft.IT.Security.AccessChangeMonitoring.AccessChangeMonitoring.InitiateChangeMonitoring"
}
%TimerTriggerPeriod%
определено в моем local.settings.json
файле ( "TimerTriggerPeriod": "0 */6 * * * *"
). Глядя на отображение показателя количества функций приложения на панели инструментов, видно, что моя функция была выполнена 0 раз:
Ниже мой host.json
:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
},
"functionTimeout": "00:07:00"
}
Ниже приведен код функции:
[FunctionName("InitiateChangeMonitoring")]
public static async Task InitiateChangeMonitoring([TimerTrigger("%TimerTriggerPeriod%")] TimerInfo myTimer, ILogger log)
{
log.LogInformation("Change Monitoring started.");
// Reset the listing of app ids we need to retrieve delta role assignments for
oneAuthZAppIds = new List<string>();
await GetOneAuthZAppIdsAsync();
// Create the necessary Cosmos DB infastructure
await CreateDatabaseAsync();
await CreateContainerAsync();
await CreateDeltaAPICallDatabaseAsync();
await CreateDeltaAPICallContainerAsync();
await CreateManagerMappingDatabaseAsync();
await CreateManagerMappingContainerAsync();
// Compute the authentication token needed to access the PAP Service API
log.LogInformation("nRetrieve PAPServiceAPIToken");
string PAPServiceAPIToken = await GetTokenAsync(Environment.GetEnvironmentVariable("OneAuthZAppUri"), Environment.GetEnvironmentVariable("OneAuthZAppId"),
PAPAuthenticationSecret);
log.LogInformation("PAPServiceAPIToken = " PAPServiceAPIToken);
string GraphAPIAuthenticationToken = await GetTokenAsync(Environment.GetEnvironmentVariable("GraphAppUri"), Environment.GetEnvironmentVariable("GraphClientId"),
graphKey);
log.LogInformation("graphAPIAuthenticationToken = " GraphAPIAuthenticationToken);
await runChangeMonitoringSystemAsync(PAPServiceAPIToken);
}
Комментарии:
1. Возможно, ваша проблема заключается в том, что вы не настроили среду, доступную в Azure.
2. При развертывании функции Azure в Azure local.settings.json загружаться не будет. Переменная env будет взята из этого места вместо local.settings.json: i.stack.imgur.com/PrYrZ.png
3. Вы ее тестировали? На моей стороне это работает и без проблем.
Ответ №1:
Во-первых, я заметил, что вы указываете, что используете local.settings.json для сохранения переменной среды и в то же время показываете метрику в Azure.
Итак, я думаю, что первая проблема, из-за которой ваша функция Azure не может быть запущена, заключается в том, что вы не устанавливаете переменную среды в Azure.
Вы должны установить в этом месте вместо local.settings.json (потому что, когда функция развернута в Azure, она никогда не будет принимать переменную среды из local.settings.json):
(Не забудьте сохранить редактирование.)
Во-вторых, как говорит Иван, ваш формат cron неверен. Формат timetrigger должен быть в этом формате:
{second} {minute} {hour} {day} {month} {day of week}