Azure Functionsを、Azure Portalから作る
はじめに
Azureを触って半年たちましたが、Azure Functionsを初めて触ってみましたので記事にしました。
概要
Azure Functionsを使う際は、以下のリソースを作成します。
- (リソースグループ)
- App Service
- ストレージアカウント(Azure File)
- 関数アプリ(Azure Functions
上記リソースの上に、コードをデプロイしていきます。
ストレージアカウントが必要な理由は以下にあります。
Azure Fileではなく、Blog Storageで使う方法は以下にあります。
参考
やってみた
検索で"関数アプリ"と入力して、出てきたサービスを選択します。
作成、から開始します。
ホスティングオプションを選択します。
各オプションは以下の公式で説明されています。今回は"消費(おそらく従量課金プラン、に該当)"を選択します。
基本タブでリソースグループや関数の設定を指定します。
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の従量課金プランでは、メモリが固定の模様です。
従量課金プランの Functions ホストの各インスタンスは、通常、1.5 GB のメモリと 1 個の CPU に制限されています。
おわりに
今回はAzure Portalから、Azure Functionsを触ってみました。
AWS Lambdaと比較して色々異なり、理解に時間がかかりました。
この記事がどなたかのお役に立てれば幸いです。
Discussion