😀

Azure Functions の Timer Trigger を Curl で手動実行してみた

に公開

Azure Functions でタイマートリガーを使用しているとします。何らかの理由で、スケジュール済みの時間以外に手動実行したいケースがあったりします。そこで、タイマートリガーを Curl で手動実行してみました。

検証用 Azure Functions を用意

bash
prefix=mnrfunc
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az storage account create \
  --name ${prefix}stor \
  --resource-group ${prefix}-rg \
  --sku Standard_LRS

az monitor log-analytics workspace create \
  --workspace-name ${prefix}-log \
  --resource-group ${prefix}-rg

az monitor app-insights component create \
  --app ${prefix}-ai \
  --location $region \
  --resource-group ${prefix}-rg \
  --workspace ${prefix}-log

az functionapp create \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --consumption-plan-location $region \
  --runtime dotnet \
  --functions-version 4 \
  --storage-account ${prefix}stor \
  --app-insights ${prefix}-ai \
  --https-only \
  --os-type Linux

ローカルでタイマートリガーの Functions を作成

bash
func init $prefix --dotnet

cd $prefix

func new --name sample --template "Timer trigger"

func start

func azure functionapp publish $prefix

こちらが、作成されたコードです。

sample.cs
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace mnrfunc
{
    public class sample
    {
        [FunctionName("sample")]
        public void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }
    }
}

Curl で Azure Functions を手動実行

下記の input に設定する値は何でも良いみたいです。

bash
masterkey=$(az functionapp keys list \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --query masterKey \
  --output tsv)

curl -i https://$prefix.azurewebsites.net/admin/functions/sample \
  -H "x-functions-key: $masterkey" \
  -H "Content-Type: application/json" \
  -d '{ "input": "test" }'

HTTP/2 202 
date: Sat, 13 Jan 2024 00:36:40 GMT
server: Kestrel
content-length: 0
request-context: appId=cid-v1:2b3e2847-daf1-4dc6-8ddd-507e8cff0cd3

実行結果

下記赤枠がタイマートリガーの実行ログです。

functions-timer-http-01.png

下記赤枠が Curl で手動実行した日時です。

functions-timer-http-02.png

参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-manually-run-non-http?tabs=azure-cli

Discussion