1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Functions に2つのPython関数をデプロイする(プログラミングモデルv2の場合)

Posted at

はじめに

この記事はAzure Functionsに複数関数をPythonのプログラミングモデルv2で実装するための記事です。
公式サイトにはHttpトリガーの例だけ記載があるようなので、Timer Triggerではどうなるか試してみました。

前提

以前書いた記事の環境準備ができていることが前提になります。
(Azure Functionsのランタイムは4.x、Pythonのバージョンは3.10)
また以前書いた記事で作成したプロジェクトを修正して実装しますので、すでにTimer Triggerの関数プロジェクトが作成されてるものとして進めます。

共通関数の実装

複数関数を定義する場合多くの場合は共通関数が必要になると思いますので、今回共通クラスを定義してそれぞれトリガーされる関数から呼び出します。

  1. プロジェクトにフォルダcommon_funcを作成し、作成したフォルダ内に__init__.pyファイルを作成します。
  2. 同じフォルダにcommom.pyファイルを作成します。
    commom.py
    import logging
    
    class CommonTest:
        def outputStr(self) -> None:
            logging.info("共通処理が呼び出されました。")
    

トリガー関数の実装

  1. プロジェクト直下にフォルダmain_funcを作成して、作成したフォルダに__init__.pytimer_blueprint1.pytimer_blueprint2.pyを作成します。

  2. timer_blueprint1.pytimer_blueprint2.pyを実装します。

    timer_blueprint1.py
    import datetime
    import logging
    
    import azure.functions as func 
    from common_func.common import CommonTest
    
    bp1 = func.Blueprint()
    bp1.function_name("timer_trigger1")
    
    @bp1.schedule(schedule="0 */5 * * * *", arg_name="myTimer1", run_on_startup=False,
                  use_monitor=False)
    def timer_trigger1(myTimer1: func.TimerRequest) -> None:
        utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()
    
        if myTimer1.past_due:
            logging.info('The timer is past due!')
    
        logging.info('timer_trigger1 が起動されました at %s', utc_timestamp)
        
        clazz = CommonTest()
        clazz.outputStr()
    
    
    timer_blueprint2.py
    import datetime
    import logging
    
    import azure.functions as func 
    from common_func.common import CommonTest
    
    bp2 = func.Blueprint()
    bp2.function_name("timer_trigger2")
    
    @bp2.schedule(schedule="0 */5 * * * *", arg_name="myTimer2", run_on_startup=False,
                  use_monitor=False)
    def timer_trigger2(myTimer2: func.TimerRequest) -> None:
        utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()
    
        if myTimer2.past_due:
            logging.info('The timer is past due!')
    
        logging.info('timer_trigger2 が起動されました at %s', utc_timestamp)
        
        clazz = CommonTest()
        clazz.outputStr()
    
    

    スケジュールの定義はfunc.Blueprint()で記述します。@bp2.schedule(…)の…部分の設定方法は1関数の時のデコレーションと同じです。

function_app.py の修正

function_app.pyを次のように修正します。

function_app.py
import azure.functions as func

from main_func.timer_blueprint1 import bp1
from main_func.timer_blueprint2 import bp2

app = func.FunctionApp()

app.register_functions(bp1)
app.register_functions(bp2)

エントリポイントはfunction_app.pyファイル内のみにあるため、function_app.pyファイルでブループリントオブジェクトをインポートして、そのオブジェクトを関数アプリに登録します。

最後に

v1の場合は単純に関数を追加で増やせばよいですが、v2はBlueprintsを利用して実現します。
v1の方が単純で簡単ですが、いずれv2が主流になってくると思いますので、どちらでも実装できるようにしておきたいですね。

参考資料

Azure Functions の Python 開発者向けガイド

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?