Azure Central Azure逆引きリファレンス[PR]
サーバーレス「Azure Functions」をスケジュール実行する方法(cronジョブ構文)[PR]
バッチジョブなどでスケジュール実行したいというニーズは多いだろう。サーバーレスで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 |
Function(関数)の作成
次にFunctionを作成する。
これには、対象の[Function App]ブレードで[+新しい関数]をクリックして、今回はC#を使うので(PowerShellも使える)、[言語]欄で「C#」を、[シナリオ]欄で「すべて」を選択する(図2)。テンプレートの一覧からは、スケジュールをトリガーに動作するFunctionのテンプレートである「TimerTrigger-CSharp」を選択する。
これにより、テンプレート一覧の下に[関数名の指定]と[構成]-[タイマー 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日に実行」という意味になる。, で区切って個別の実行タイミングを指定する |
参考までに、もう少しいくつか例を示しておこう。
- 毎分(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のようにひな型コードが生成されている。
今回はタスク(もしくはジョブ)の内容は重要ではないので、このひな型コードのまま使用する。このコードでは、実行日時が出力されるので、実行タイミングを確認するのに便利だ。
スケジュールの編集([統合]タブ)
次に、[統合]タブを開くと、新規作成時に入力した[スケジュール]を編集することもできる(図4)。
この例では*/10 * * * * *
を指定した。これによって10秒ごとに実行されるはずだ。
スケジュール実行の確認([モニター]タブ/[開発]タブ)
では、スケジュール実行の実行状況を確認してみよう。
[モニター]タブを開いて[起動ログ]を閲覧してもよいが、今回はリアルタイムにログ出力を確認できる[開発]タブの[ログ]をクリックし、[Logs]欄を確認してみよう(図5)。
記録されたログでは、実行に1~2秒程度の誤差があったようだが、指定どおりに(ほぼ)10秒ごとで実行されていることが分かる。
スケジュール実行の停止([管理]タブ)
コードの開発編集時や諸事情により、スケジュール実行をいったん停止したい場合もあるだろう。
その場合には、[管理]タブの[Function State]の[無効]をクリックすればよい(図6)。なお有効に戻すには、当然ながら[有効]をクリックする。
再び、[開発]タブの[Logs]欄を確認すると、新しいログが出力されていないことが確認できるはずだ。
■
以上、Azure FunctionsでFunctionをスケジュール実行する方法を紹介した。バッチジョブなどで「スケジュール実行したい」というニーズは多いと思われるので、この記事がその参考になるとうれしい。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. サーバーレスアーキテクチャとは? Azure Functionsで初めての開発[PR]
最近、注目を集めている「サーバーレスアーキテクチャ」の概要と、Azure Functionsを使ったサーバーレス開発の基礎をコンパクトに解説。トリガーや入力/出力のバインディングを作成してみよう。
2. 写真で年齢判定するサーバーレスなLINE Botを作ろう(Face API使用)[PR]
画像認識サービスを提供するCognitive Servicesと、低予算で手軽にプログラムが動かせるAzure Functionsを組み合わせれば、面白いLINE Botが手軽に作成できる。その開発方法を一通り説明する。
3. Visual Studioで始めるサーバーレス「Azure Functions」開発入門[PR]
最近注目されているサーバーレスの開発をVisual Studioで行おう! 環境準備から、Function App(関数アプリ)の作成、Azureへのデプロイと実行、さらに外部ライブラリや自作ライブラリの活用まで、基本的な開発方法を解説する。
4. 【現在、表示中】≫ サーバーレス「Azure Functions」をスケジュール実行する方法(cronジョブ構文)[PR]
バッチジョブなどでスケジュール実行したいというニーズは多いだろう。サーバーレスでFunctionをスケジュール実行する方法を解説。cron構文によるスケジュールの指定方法も説明する。
5. 設計時に使えるAzure/AWSサービス・アイコン集とダウンロード方法[PR]
クラウド上のシステムやサービスを設計する際には、視覚的に分かりやすいアイコンを使おう。アイコンセットのダウンロード方法を示し、各アイコンを用いてAzure/AWSサービスの対応一覧表をまとめる。