📕

Azure FunctionsでURLのルーティングを行う(Python編)

2024/11/24に公開

はじめに

Azure FunctionsでURLのルーティングを行う方法を確認しましたので、記事にしました。

概要

コードを書くだけでURLでのルーティングができます。

以前、AWSのLambdaで行う方法を記事にしました。Lambdaの場合はAWS Lambda Powertoolsをインポートする必要がありました。

https://qiita.com/a_b_/items/0ef7f788134eddc65a2f

Azure Functionsでは何もインポートせず対応可能です。

やってみた

準備

まず、Azure Functionsを作成します。なぜかAzure Portalから作れなかったので、以下を参考にAzure CloudShellから作ります。

https://learn.microsoft.com/ja-jp/azure/azure-functions/scripts/functions-cli-create-serverless#run-the-script

リージョンは東日本、ランタイムがPython 3.11で作成するようにしています。

let "randomIdentifier=$RANDOM*$RANDOM"
location="japaneast"
resourceGroup="msdocs-azure-functions-rg-$randomIdentifier"
tag="create-function-app-consumption"
storage="msdocsaccount$randomIdentifier"
functionApp="msdocs-serverless-function-$randomIdentifier"
skuStorage="Standard_LRS"
functionsVersion="4"

# Create a resource group
echo "Creating $resourceGroup in "$location"..."
az group create --name $resourceGroup --location "$location" --tags $tag

# Create an Azure storage account in the resource group.
echo "Creating $storage"
az storage account create --name $storage --location "$location" --resource-group $resourceGroup --sku $skuStorage

# Create a serverless function app in the resource group.
echo "Creating $functionApp"
az functionapp create --name $functionApp --storage-account $storage --consumption-plan-location "$location" --resource-group $resourceGroup --functions-version $functionsVersion --runtime python --runtime-version 3.11 --os-type linux

コード作成・修正

ポータルからコードを作成します。

HTTP triggerのテンプレートで作成します。


以下の画面で 最新の情報に更新 でコードを表示させます。

以下を参考にコードを修正します。

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=python-v2%2Cisolated-process%2Cnodejs-v4%2Cfunctionsv2&pivots=programming-language-python

6行目に以下を追加して保存します。

@app.route(route="products/{category:alpha}/{id:int?}")
def main(req: func.HttpRequest) -> func.HttpResponse:

    category = req.route_params.get('category')
    id = req.route_params.get('id')
    message = f"Category: {category}, ID: {id}"

    return func.HttpResponse(message)

実行

関数のURLを取得、からURLを取得します。

URLの一部を.azurewebsites.net/api/products/hogehoge/1124?code=のように修正します。

修正したURLでアクセスします。

おわりに

今回はAzure FunctionsでURLルーティングをする方法を記事にしました。
AWS Lambdaと違って標準でできる点に、両者の考え方の違いが見えて興味深いです。

この記事がどなたかのお役に立ちましたら幸いです。

Discussion