📔

Azure Functionsを、Azure Portalから作る

2024/10/06に公開

はじめに

Azureを触って半年たちましたが、Azure Functionsを初めて触ってみましたので記事にしました。

概要

Azure Functionsを使う際は、以下のリソースを作成します。

  • (リソースグループ)
  • App Service
  • ストレージアカウント(Azure File)
  • 関数アプリ(Azure Functions

上記リソースの上に、コードをデプロイしていきます。

ストレージアカウントが必要な理由は以下にあります。
https://learn.microsoft.com/ja-jp/azure/azure-functions/storage-considerations?tabs=azure-cli

Azure Fileではなく、Blog Storageで使う方法は以下にあります。
https://learn.microsoft.com/ja-jp/azure/azure-functions/storage-considerations?tabs=azure-cli#create-an-app-without-azure-files

参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-create-function-app-portal?pivots=programming-language-csharp#create-a-function-app
https://rpa.bigtreetc.com/column/azure_functions_introduction/

やってみた

検索で"関数アプリ"と入力して、出てきたサービスを選択します。

作成、から開始します。

ホスティングオプションを選択します。

各オプションは以下の公式で説明されています。今回は"消費(おそらく従量課金プラン、に該当)"を選択します。
https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-scale

基本タブでリソースグループや関数の設定を指定します。

Storageタブでストレージアカウントを設定します。Azure Fileも使うよう指定します。

ネットワークで、パブリックアクセスを有効にします。

監視は無効にします。

GitHubを使ってデプロイできるようですが、今回は使いません。

デプロイに基本認証を使う設定も無効にします。

ここまでの設定で作成し、以下のように作られました。

リソースグループ内に作られたリソースは以下になります。

関数の作成

Azure Portalから、関数を作成していきます。

テンプレートから作ってみます。今回はHTTP triggerを選びます。

詳細はそのままで作成します。

テンプレートのコードが生成されますが、表示されない場合は 最新の情報に更新 で更新します。

ポータルからコードとテストの画面に遷移する場合は、トリガー名をクリックします。

実行

テスト/実行 から実行してみます。コード内でパラメータnameを取得していましたので、指定して実行します。

実行結果に、指定した文字列が埋め込まれて応答されたことが確認できます。

ブラウザから実行する場合は関数のURL取得して、末尾に&name=hogehogeを付与しアクセスします。

画面上に、先と同じ文字列が表示されました。

トリガーの追加

別のトリガーを追加してみます。
対象のAzure Functionsのポータルの画面から、作成 をクリックします。

今度はTimer Triggerを指定してみます。

詳細は修正しません。ジョブの種類が先ほどと異なり アプリに追加 になっています。

コードが以下のように変更されます。下の方にTimer Triggerの部分が追加されています。

import azure.functions as func
import logging

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

@app.route(route="http_trigger1")
def http_trigger1(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

@app.timer_trigger(schedule="0 */5 * * * *", arg_name="myTimer", run_on_startup=False,
              use_monitor=False) 
def timer_trigger1(myTimer: func.TimerRequest) -> None:
    
    if myTimer.past_due:
        logging.info('The timer is past due!')

    logging.info('Python timer trigger function executed.')

ポータルから追加されていることが確認できます。

トリガーの削除

ポータルのメニューでは、削除ができないようになっています。

そのためコードを直接削除して保存します。

ポータルを更新すると、Timer Triggerが消えています。

削除

リソースグループから作った場合は、リソースグループごと消してしまえば、全部削除されます。

気になったこと

AWS Lambdaではメモリが指定できますが、Azure Functionsの従量課金プランでは、メモリが固定の模様です。

https://learn.microsoft.com/ja-jp/azure/azure-functions/event-driven-scaling?tabs=azure-cli

従量課金プランの Functions ホストの各インスタンスは、通常、1.5 GB のメモリと 1 個の CPU に制限されています。

おわりに

今回はAzure Portalから、Azure Functionsを触ってみました。
AWS Lambdaと比較して色々異なり、理解に時間がかかりました。
この記事がどなたかのお役に立てれば幸いです。

Discussion