Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Azure逆引きリファレンス[PR]

Azure Central Azure逆引きリファレンス[PR]

サーバーレス「Azure Functions」をスケジュール実行する方法(cronジョブ構文)[PR]

2017年1月30日

バッチジョブなどでスケジュール実行したいというニーズは多いだろう。サーバーレスでFunctionをスケジュール実行する方法を解説。cron構文によるスケジュールの指定方法も説明する。

デジタルアドバンテージ 一色 政彦
  • このエントリーをはてなブックマークに追加

 「サーバーレスアーキテクチャとは? Azure Functionsで初めての開発」(前々回)と「Visual Studioで始めるサーバーレス「Azure Functions」開発入門」(前回)で、Azure Functionsの基礎を解説した。今回は、スケジュールをトリガーにしてタスクを実行する方法を紹介する。

スケジュールをトリガーにするFunction Appの開発

Function Appの作成

 まずはFunction App(関数アプリ)を新規作成する。

 もちろんVisual Studioで作成することもできるが、今回はシンプルに、Azure管理ポータルのみを使う。まずはAzure管理ポータルで表1の内容でFunction Appを作成する(作成方法は前々回を参照)。

項目名 入力値
アプリ名 ScheduledFuncApp(独自のものを指定する必要あり)
サブスクリプション <各自で契約しているサブスクリプション>
リソース グループ ScheduledFuncAppResourceGroup
ホスティング プラン 従量課金プラン
場所 東日本
ストレージ アカウント scheduledfuncappstorage
表1 Function App新規作成時に指定する値
図1 Function Appを新規作成しているところ
図1 Function Appを新規作成しているところ

Function(関数)の作成

 次にFunctionを作成する。

 これには、対象の[Function App]ブレードで[+新しい関数]をクリックして、今回はC#を使うので(PowerShellも使える)、[言語]欄で「C#」を、[シナリオ]欄で「すべて」を選択する(図2)。テンプレートの一覧からは、スケジュールをトリガーに動作するFunctionのテンプレートである「TimerTrigger-CSharp」を選択する。

図2 Function(関数)を新規作成しているところ
図2 Function(関数)を新規作成しているところ

 これにより、テンプレート一覧の下に[関数名の指定]と[構成]-[タイマー trigger (myTimer)]-[スケジュール]が表示される。これらの設定項目について今回は、デフォルトの値のままで、次のように指定した。

  • [関数名の指定]: TimerTriggerCSharp1
  • [スケジュール]: 0 */5 * * * *

 スケジュールの指定方法については次節で詳しく紹介する。いったんここで[作成]ボタンをクリックして作成を完了させよう。

スケジュールの指定方法(cronジョブ構文)

 [スケジュール]にはcronジョブ構文で入力する必要がある。具体的には、

  <秒> <分> <時> <日> <月> <曜日>

というフィールド構成で入力する(それぞれ半角スペースで区切られていることに注意)。

 *は「何にでもマッチすること(ワイルドカード)」を意味する。*/5は「5分間隔」を意味する。このような、cronジョブ構文のフィールド構成要素に対して指定できる「数値」や「構文を使った指定方法」について、表2にまとめた。

設定項目/手法 設定値 設定例 数値/指定方法の説明
<曜日> 1~7 3 左の値は「水曜日」を意味する。
1(=月)/2(=火)/3(=水)/4(=木)/5(=金)/6(=土)/7(=日)が指定可能
一定間隔 */<可能な数値> */5 左の[設定例]の値を<分>フィールドに指定した場合は、「5分ごとに実行」という意味になる。
/の後に指定した数値の間隔で実行される
範囲 <開始する値>-<終了する値> 8-17 左の値を<時>フィールドに指定した場合は、「8時~17時に実行」(未満ではなく以内なので17時も実行される)という意味になる。
-で実行タイミングの範囲を指定する
個別指定 <個別の数値>,<個別の数値>,…… 5,15,25 左の値を<日>フィールドに指定した場合は、「5日と15日と25日に実行」という意味になる。
,で区切って個別の実行タイミングを指定する
表2 [スケジュール]に指定できる数値/構文(cronジョブ構文の各フィールド構成要素)

 参考までに、もう少しいくつか例を示しておこう。

  • 毎分(0秒時点で): 0 * * * * *
  • 毎日3時2分1秒: 1 2 3 * * *
  • 8~17時で3時間おき(=8/11/14/17時): 0 0 8-17/3 * * *
    ※2017/10/25修正:「0 0」とすべきところが「* *」と誤って記載されていました。お詫びして訂正させていただきます。)
  • 平日(月~金)の10時と15時: 0 0 10,15 * * 1-5

 8-17/3のように構文を組み合わせて使用することもできる。

スケジュールの変数と実行例

 以上の手順でFunction Appが作成された。

ひな型コードの確認([開発]タブ)

 左側のハブメニューから[<関数名(例:TimerTriggerCSharp1)>]-[開発]タブを選択すると、図3のようにひな型コードが生成されている。

図3 生成されたひな型コード([開発]タブ)

 今回はタスク(もしくはジョブ)の内容は重要ではないので、このひな型コードのまま使用する。このコードでは、実行日時が出力されるので、実行タイミングを確認するのに便利だ。

スケジュールの編集([統合]タブ)

 次に、[統合]タブを開くと、新規作成時に入力した[スケジュール]を編集することもできる(図4)。

図4 スケジュールの編集([統合]タブ)
図4 スケジュールの編集([統合]タブ)

 この例では*/10 * * * * *を指定した。これによって10秒ごとに実行されるはずだ。

スケジュール実行の確認([モニター]タブ/[開発]タブ)

 では、スケジュール実行の実行状況を確認してみよう。

 [モニター]タブを開いて[起動ログ]を閲覧してもよいが、今回はリアルタイムにログ出力を確認できる[開発]タブの[ログ]をクリックし、[Logs]欄を確認してみよう(図5)。

図5 スケジュール実行の確認([開発]タブ)

 記録されたログでは、実行に1~2秒程度の誤差があったようだが、指定どおりに(ほぼ)10秒ごとで実行されていることが分かる。

スケジュール実行の停止([管理]タブ)

 コードの開発編集時や諸事情により、スケジュール実行をいったん停止したい場合もあるだろう。

 その場合には、[管理]タブの[Function State]の[無効]をクリックすればよい(図6)。なお有効に戻すには、当然ながら[有効]をクリックする。

図6 スケジュール実行の停止([管理]タブ)
図6 スケジュール実行の停止([管理]タブ)

 再び、[開発]タブの[Logs]欄を確認すると、新しいログが出力されていないことが確認できるはずだ。

 以上、Azure FunctionsでFunctionをスケジュール実行する方法を紹介した。バッチジョブなどで「スケジュール実行したい」というニーズは多いと思われるので、この記事がその参考になるとうれしい。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

Azure逆引きリファレンス[PR]
1. サーバーレスアーキテクチャとは? Azure Functionsで初めての開発[PR]

最近、注目を集めている「サーバーレスアーキテクチャ」の概要と、Azure Functionsを使ったサーバーレス開発の基礎をコンパクトに解説。トリガーや入力/出力のバインディングを作成してみよう。

Azure逆引きリファレンス[PR]
2. 写真で年齢判定するサーバーレスなLINE Botを作ろう(Face API使用)[PR]

画像認識サービスを提供するCognitive Servicesと、低予算で手軽にプログラムが動かせるAzure Functionsを組み合わせれば、面白いLINE Botが手軽に作成できる。その開発方法を一通り説明する。

Azure逆引きリファレンス[PR]
3. Visual Studioで始めるサーバーレス「Azure Functions」開発入門[PR]

最近注目されているサーバーレスの開発をVisual Studioで行おう! 環境準備から、Function App(関数アプリ)の作成、Azureへのデプロイと実行、さらに外部ライブラリや自作ライブラリの活用まで、基本的な開発方法を解説する。

Azure逆引きリファレンス[PR]
4. 【現在、表示中】≫ サーバーレス「Azure Functions」をスケジュール実行する方法(cronジョブ構文)[PR]

バッチジョブなどでスケジュール実行したいというニーズは多いだろう。サーバーレスでFunctionをスケジュール実行する方法を解説。cron構文によるスケジュールの指定方法も説明する。

Azure逆引きリファレンス[PR]
5. 設計時に使えるAzure/AWSサービス・アイコン集とダウンロード方法[PR]

クラウド上のシステムやサービスを設計する際には、視覚的に分かりやすいアイコンを使おう。アイコンセットのダウンロード方法を示し、各アイコンを用いてAzure/AWSサービスの対応一覧表をまとめる。

サイトからのお知らせ

Twitterでつぶやこう!