Azure Functions(v2)を使って決まった時間に関数を動かす


あらまし

毎朝、今日のタスクをSlackに投稿するのにAzure Logic AppsAzure Functionsを使っていました。Azure Logic Appsは視覚的にわかりやすかったですし、非常に簡単にフローを構築できました。しかし、微々たるものといえどコストがかかることや、Slackコネクタでは個人に対して送信できないこともあり、Functionsに移行しました。その時に見落としていたポイントをまとめます。

タイマートリガーを使ってみよう

Azure Functionsには様々なトリガーが存在します。トリガーとは、いわゆる『関数(プログラム)を動かす起点』です。

例えば、HTTP処理を行うための「HTTPトリガー」やCosmos DBで処理があったときに動作する『Cosmos DBトリガー』が挙げられます。今回は決まった時間に関数を動かしたいので、『タイマートリガー』を使ってみましょう。

タイマートリガーの指定方法

タイマートリガーの指定方法はLinuxでサーバ管理を行っている人なら親しみがあると思いますが、指定方法はcronと似ています。

{second} {minute} {hour} {day} {month} {day-of-week}

(Azure Functions のタイマー トリガー | Microsoft Docs CRON式より引用)

例えば、5分毎に関数を実行したい場合は以下のように記載します。

0 */5 * * * *

「ある時刻に処理を行う」ときには注意する

「毎日午前8時に関数を実行する」場合には注意するポイントがあります。それは、Azure Functionsで扱うタイムゾーンは世界標準時(UTC時間)ということです。

例えば、毎日午前8時00分に実行する場合は、タイマートリガーで指定するのは23時00分を指定します。

0 0 23 * * *

従来のサーバではタイムゾーンを指定していましたが、関数内で日付や時間を関数の中で扱う場合は設定側で工夫し、調整しましょう。

まとめ

  • Azure FunctionsのタイムゾーンはUTC時間
  • 言語によっても扱いが異なるため、気になる場合はAzure Functions上にデプロイして動きを確認する
  • 開発中に確認する時は実行結果だけではなく、ログに実行時刻も出力してどのようになっているか確認したほうが早く実現できる

参考