Logic Apps で日付や時刻を判定してワークフローを制御する

Last Update: feedback 共有

こんにちは! Azure Integration サポート チームの 山田 です。

Start/Stop VMs v2 をご利用いただく際に、「もう少し柔軟に日付や時刻を条件判定して利用したい」というケースが多くあると思います。

今回はそうしたときに便利な、 Logic Apps における日付や時刻の判定に使えるシナリオをご紹介いたします。

前提条件

今回の記事では従量課金版 Logic Apps を利用しますが、Standard 版 Logic Apps でも問題ありません。

目次

  • シナリオ 1: 平日 8 時に VM を起動したい。ただし 特定の日 (祝日など) を除外したい
  • シナリオ 2: 平日 6 時に VM1 を起動し、8 時に VM2 を起動したい
  • 関連ドキュメント
  • まとめ

シナリオ 1: 平日 8 時に VM を起動したい。ただし 特定の日 (祝日など) を除外したい

「平日 8 時に VM を起動したい。ただし 特定の日 (祝日など) を除外したい」。例としてこの場合、以下のように毎週 月曜日 ~ 金曜日 の 8:00 にワークフローを動作させるよう、繰り返しトリガーを設定しておきます。

参考: 繰り返しワークフローをスケジュール設定および実行する - Azure Logic Apps | Microsoft Learn

トリガーの条件

一方トリガーには条件式というものを設定できます。

こちらに「月曜日 ~ 金曜日、ただし 特定の日 (祝日など) を除外する」を満たす式を記述します。以下フォーラムとドキュメントを引用いたします。

参考: What you need to know about trigger conditions?

Trigger conditions is a trigger setting used to specify one or more conditional expressions which must be true for the trigger to fire.
Trigger conditions can be set using logic app designer or manually using code view; for schema reference for trigger conditions

  1. Go to your logic app.
  2. On the trigger, click on the three dots (…) at the top right corner.
  3. Select Settings.
  4. Scroll down to Trigger Conditions.
  5. Specify your conditional expression.
  6. Click Done.

<翻訳>
トリガーの条件は、トリガーが起動するために true でなければならない 1 つ以上の条件式を指定します。
トリガーの条件は、ロジック アプリ デザイナーを使用して設定することも、コード ビューを使用して手動で設定することもできます。

  1. ロジック アプリに移動します。
  2. トリガーで、右上隅にある3つのドット(…)をクリックします。
  3. [設定]を選択します。
  4. [トリガー条件]まで下にスクロールします。
  5. 条件式を指定します。
  6. [完了]をクリックします。

参考: Azure Logic Apps でのトリガーとアクションの種類のスキーマ リファレンス ガイド # トリガーの条件

どのトリガーにも、ワークフローを実行するかどうかを決める条件を表した 1 つまたは複数の式を含む配列を追加できます。

フォーラムにありますとおり、トリガーの条件を用いることで以下メリットがあります。

  • Logic Apps のフロー自体をシンプルにできる。
  • 条件により実行が判断されることで、不要な実行を排除でき、運用上の負担を軽減できる。
  • 実行数を減らすことでコストを削減できる。

条件式

上記を踏まえ、「今日が 2023 年の日本の祝日ではない」という条件式を設定してみることにします。まず日本時間の「月日」 (MMdd) は以下となります。

1
convertFromUtc(UtcNow(), 'Tokyo Standard Time', 'MMdd')

また例として 2023 年の日本の祝日 (MMdd) を示すアレイを作成いたしますと、以下となります。

参考: 国民の祝日について - 内閣府

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
createArray('0101',
'0102',
'0109',
'0211',
'0223',
'0321',
'0429',
'0503',
'0504',
'0505',
'0717',
'0811',
'0918',
'0923',
'1009',
'1103',
'1123'
)

以上を用いると、「今日が 2023 年の祝日ではない」ことを表す判定式は以下となります。こちらを「トリガーの条件」欄に記載致します。「トリガーの条件」欄では式の先頭に @ を記載します点をご注意ください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
not(contains( 
createArray('0101',
'0102',
'0109',
'0211',
'0223',
'0321',
'0429',
'0503',
'0504',
'0505',
'0717',
'0811',
'0918',
'0923',
'1009',
'1103',
'1123'
),
convertFromUtc(UtcNow(), 'Tokyo Standard Time', 'MMdd')
))

参考:

またここでは「日本の祝日」となる日付を静的にアレイに記述しましたが、カレンダーなどから取得して構築することも考えられます。詳細割愛いたしますが以下などがご活用いただけます。

参考: Office 365 Outlook - Connectors | Microsoft Learn # イベントのカレンダー ビューの取得 (V3))
ほか 2024 年の日本の祝日 (MMdd) を示すアレイは以下となります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
createArray('0101',
'0108',
'0211',
'0212',
'0223',
'0320',
'0429',
'0503',
'0504',
'0505',
'0506',
'0715',
'0811',
'0812',
'0916',
'0922',
'0923',
'1014',
'1103',
'1104',
'1123'
)

シナリオ 2: 平日 6 時に VM1 を起動し、8 時に VM2 を起動したい

「平日 6 時に VM1 を起動し、8 時に VM2 を起動したい」。例としてこの場合は、以下のように毎週 月曜日 ~ 金曜日 の 6:00、8:00 にワークフローを動作させるよう繰り返しトリガーを設定しておきます。

前提として、パラメーターにて VM1 を起動する際のパラメーター、VM2 を起動する際のパラメーターを作成しておきます。

参考: ワークフロー入力ためのパラメーターを作成する - Azure Logic Apps | Microsoft Learn

またこちらも前処理として、VM の引数を格納する変数を初期化しておきます。

そのうえで スイッチ を利用してまいります。スイッチするための式は、ここでは以下のようにしています。

1
convertFromUtc(UtcNow(), 'Tokyo Standard Time', 'HH')

これでワークフローが動作した際の現在時刻が 6 時ならば「06」、8 時ならば「08」などという文字列が取得できます。

踏まえ、ここではケース の判定を「”06”」と等しい場合とします。

ケース内では “06”、つまり 6 時に「VM1」を起動する際の引数をセットします。同様、”08” の時に「VM2」を起動する際の引数を ケース 2 にてセットすれば「平日 6 時に VM1 を起動し、8 時に VM2 を起動」という条件を利用して、日付に応じて意図した VM を起動する制御ができます。なおそのどちらにも該当しない「既定」時は、ワークフローを終了することとしておきます。

例:

参考: スイッチ アクションをワークフローに追加する - Azure Logic Apps | Microsoft Learn

関連ドキュメント

ほか Logic Apps と日付関数に言及した記事には、以下のようなものがございます。

今回の記事では日付に対して 6 時 や 8 時という時刻を例に紹介いたしましたが、0 時を起動時刻に設定し日付を条件判定する際には、「繰り返し (Recurrence)」トリガーの起動時刻の差異について にありますように起動時刻仕様についてもご確認いただけますと幸いです。

また今回の「Start/Stop VMs v2」に関する参考ドキュメントや記事は、以下のようなものがございます。

まとめ

本記事では、Start/Stop VMs v2 をはじめとした繰り返しトリガー利用時に便利な、日付や時刻の判定方法についてご紹介しました。引き続き皆様のお役に立てる情報を発信してまいります。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。