타이머로 트리거된 Azure 기능을 로컬로 한 번 실행하는 가장 간단한 방법은 무엇입니까?
타이머 트리거를 사용하여 일정에 따라 실행되는 몇 가지 C# Azure 함수가 있습니다.내가 그들을 그렇게 설정했다, 어디서.%TimerSchedule%
앱 설정에서 cron 표현식을 참조합니다.
public static void Run([TimerTrigger("%TimerSchedule%")]TimerInfo myTimer, TraceWriter log)
개발하는 동안 Visual Studio용 Azure Functions Tools + Azure Functions Core Tools를 사용하여 로컬에서 기능을 실행하고 싶을 때가 많습니다.그러나 F5를 눌러 기능을 로컬로 디버깅하면 (보통) 즉시 실행되지 않습니다.대신 타이머 스케줄에 따라 다음 발생을 대기하기 시작합니다.예를 들어, 내 cron 표현식에서 매일 오후 8시에 실행하라고 하면, 이 기능이 실제로 내 컴퓨터에서 실행되려면 오후 8시까지 기다려야 합니다.
그래서 제 질문은:함수를 로컬로 한 번 실행하는 가장 간단하고 가장 좋은 방법은 무엇입니까?
시도하거나 고려한 사항:
- 로컬 개발에만 보다 빈번한 타이머 일정 사용
- 이것은 괜찮지만 완벽하지는 않습니다. 매우 자주 발생하지 않는 한 조금 기다려야 하며, 매우 자주 발생하는 경우에는 기능이 여러 번 실행될 수 있습니다.이게 제가 지금 하고 있는 일입니다.
- 기능을 직접 호출하는 콘솔 앱 또는 유닛 테스트 작성
Run()
방법- 이는 100% 간단하지 않습니다. 왜냐하면 당신은 그것을 제공해야 하기 때문입니다.
TimerInfo
그리고.TraceWriter
에 대한 주장.Run()
그리고 저는 그것에 대한 문서를 놀라울 정도로 거의 찾지 못했습니다.
- 이는 100% 간단하지 않습니다. 왜냐하면 당신은 그것을 제공해야 하기 때문입니다.
Microsoft의 Azure Functions 페이지에서 코드를 테스트하는 전략은 이 항목에서 별로 도움이 되지 않습니다. 다른 트리거 유형을 테스트하는 방법으로 타이머 트리거를 언급할 뿐입니다.
완벽한 세상에서, 저는 F5를 칠 것이고 그 기능은 즉시 한 번 실행될 것입니다. 마치 "정상"을 개발하는 것과 같습니다.NET 앱.
저도 같은 질문을 했고 디버깅하는 동안만 DEBUG-flag를 사용하여 RunOn Startup을 실행했습니다.
public static void Run(
[TimerTrigger("* 0 7 * * 1-5"
#if DEBUG
, RunOnStartup=true
#endif
)]TimerInfo myTimer, TraceWriter log)
{
당신은 아마도 사용할 수 있을 것입니다.RunOnStartup
여기에 설명된 대로 플래그는 여기에 문서화되어 있습니다.한 번만 실행된다는 당신의 개요를 충족시키지 못하지만, 앱이 시작되면 적어도 로컬에서 실행해야 합니다.
/// Gets or sets a value indicating whether the function should be invoked /// immediately on startup. After the initial startup run, the function will /// be run on schedule thereafter.
속성 바인딩을 사용한 예:
[TimerTrigger("%TimerSchedule%", RunOnStartup = true)]TimerInfo myTimer
출처: https://learn.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#non-http-triggered-functions
비 HTTP 트리거 기능
HTTP 트리거 및 웹 후크를 제외한 모든 종류의 기능에 대해 관리 끝점을 호출하여 로컬에서 기능을 테스트할 수 있습니다.로컬 서버에서 HTTP POST 요청으로 이 엔드포인트를 호출하면 이 기능이 트리거됩니다.선택적으로 테스트 데이터를 POST 요청 본문의 실행으로 전달할 수 있습니다.이 기능은 Azure 포털의 Test(테스트) 탭과 유사합니다.
다음 관리자 끝점을 호출하여 비 HTTP 기능을 트리거합니다.
http://localhost:{port}/admin/functions/{function_name}
테스트 데이터를 기능의 관리자 끝점에 전달하려면 POST 요청 메시지 본문에 있는 데이터를 제공해야 합니다.메시지 본문은 다음과 같은 JSON 형식이어야 합니다.
{
"input": "<trigger_input>"
}
VS Code를 사용하는 경우 Azure Functions 확장을 사용합니다.
- F5를 눌러 디버그 모드로 들어가면 기능 앱이 시작됩니다.
- [활동] 표시줄의 [초록색] 아이콘으로 이동합니다.
Local Project
실행할 함수를 찾아 마우스 오른쪽 단추로 클릭한 다음 "지금 함수 실행"을 선택합니다.
이 MS 빠른 시작 안내서를 확인하십시오.
우체부를 이용하는 것이 효과가 있을 것입니다.다음 단계에 따라 로컬로 타이머 트리거를 실행하거나 디버그합니다.
1. 프로젝트를 실행합니다.
이 .
http://localhost:{port}/admin/functions/{function_name}
Json 본문 {"input": " "}에 POST 메서드를 사용해야 합니다.
SEND를 누릅니다.
당신은 202의 답변을 받아야 합니다.
저도 같은 질문을 했습니다.유니트 테스트로 고쳤습니다.TraceWriter와 TimerInfo를 삭제해야 합니다.
여기 제가 이걸 어떻게 했는지 코드가 있습니다.
타이머 정보:
public class ScheduleStub : TimerInfo
{
public ScheduleStub(TimerSchedule schedule, ScheduleStatus status, bool isPastDue = false) : base(schedule, status, isPastDue)
{
}
}
추적 작성기:
public class TraceWriterStub : TraceWriter
{
protected TraceLevel _level;
protected List<TraceEvent> _traces;
public TraceWriterStub(TraceLevel level) : base(level)
{
_level = level;
_traces = new List<TraceEvent>();
}
public override void Trace(TraceEvent traceEvent)
{
_traces.Add(traceEvent);
}
public List<TraceEvent> Traces => _traces;
}
이 curl 명령으로 기능을 시작합니다.
curl --request POST -H "Content-Type:application/json" --data '{"input":""}' http://localhost:7071/admin/functions/{function_name}
입력 데이터가 필요하며, 입력 데이터가 없으면 기능이 트리거되지 않습니다.
postman:postman의 입니다.
HTTP 트리거되지 않은 기능을 수동으로 실행합니다.
POST /admin/functions/<function name> HTTP/1.1
Host: localhost:<port>
Content-Type: application/json
{}
저는 우체부가 타이머 트리거 기능이라고 부르는 것처럼 보입니다.Function1
:
동일한 클래스 내에 HTTP 트리거 유형의 다른 함수를 추가하거나 코드를 추가하거나 해당 함수에서 실행 메서드를 호출하여 브라우저에서 호출하기만 하면 됩니다.
prod에 배포할 때 해당 기능을 설명/제거해야 합니다. 그렇지 않으면 prod에서 HTTP 호출을 통해 해당 기능을 트리거할 수 있습니다.
언급URL : https://stackoverflow.com/questions/46556621/what-is-the-simplest-way-to-run-a-timer-triggered-azure-function-locally-once
'source' 카테고리의 다른 글
div 블록 내에서 텍스트(수평 및 수직)를 중앙에 배치하려면 어떻게 해야 합니까? (0) | 2023.05.16 |
---|---|
jQuery 링크 비활성화 (0) | 2023.05.16 |
.NET에서 'for'와 'for ach' 중 어떤 루프가 더 빨리 실행됩니까? (0) | 2023.05.16 |
node.js 모듈에서 내부(내보내기 아님) 기능에 액세스하고 테스트하는 방법은 무엇입니까? (0) | 2023.05.16 |
Pydoc으로 문서를 작성하려면 어떻게 해야 합니까? (0) | 2023.05.16 |