IBM Cloud Functionsで、Actionを日本時間指定で月次実行する


Periodicトリガーについて

Periodicトリガーを作成したときに、曜日や時間・分の指定はブラウザ上から簡単に行えますが、月次で実行したい場合は、cron式を使う必要があり、ブラウザからcron式で指定出来るのは、UTCのみなので、日本時間でファンクションを実行するには、CLIを使います。

CLIプラグインのインストール

$ ibmcloud plugin install cloud-functions

プラグインのインストールに失敗する場合は、古いバージョンのプラグインを試してみて下さい。
以下からダウンロード出来ます。
https://plugins.ng.bluemix.net/ui/repository.html

次でインストールできます。

$ ibmcloud pulgin install (ダウンロードしたパス) 

リージョン、リソースグループ、名前空間は自身の環境に合わせてに設定して下さい。

$ ibmcloud target -r (リージョン) -g (リソースグループ)
$ ibmcloud fn property set --namespace (名前空間)

リージョンの指定は、こちらを参照。
https://cloud.ibm.com/docs/containers?topic=containers-regions-and-zones

リージョン 指定
東京 jp-tok
シドニー au-syd
ダラス us-south
ワシントン us-east

日本時間のトリガーの作成

日本時間でcron式を使ってトリガーを作成するには、CLIから次のようにします。

$ ibmcloud fn trigger create (トリガー名) \
--feed /whisk.system/alarms/alarm \
--param cron "(cron式)" --param timezone "Japan" \

ここのJapanAsia/Tokyoで指定しても構いません。

cron式サンプル

毎月月初3:00AMに実行

0 3 1 * *

1年だけ、毎月10日9:00AMに実行

0 9 10 * * 2020

5年間、毎月10日9:00AMに実行

0 9 10 * * 2020-2024

月末の指定の仕方

月末を指定するLは、上記のコマンドでは使えません。
例えば毎月月末11:00PMに実行する、次のようなcron式を指定すると、

0 23 L * *

このようなレスポンスが返ります。

"response": {
    "result": {
        "error": {
            "error": "cron pattern '0 23 L * *' is not valid"
        }
    },
    "size": 60,
    "status": "application error",
    "success": false
}

UTC限定になり、9時間の時差が発生しますが、ブラウザのcron式指定からは利用可能なようなです。(画像では、JSTに補正されています。)

他にも、日本よりも5時間進んでいるキリスィマスィ島をタイムゾーンに指定する方法もあります。
0 23 L * *(Japan)でトリガーを作成する場合、次のように作成することができます。

$ ibmcloud fn trigger create (トリガー名) \
--feed /whisk.system/alarms/alarm \
--param cron "0 4 1 * *" --param timezone "Pacific/Kiritimati" \