クイック スタート:Azure で HTTP によってトリガーされる Python 関数を作成するQuickstart: Create an HTTP triggered Python function in Azure

この記事では、コマンドライン ツールを使用し、Azure Functions で実行される Python プロジェクトを作成する方法を紹介します。This article shows you how to use command-line tools to create a Python project that runs in Azure Functions. また、HTTP 要求によってトリガーされる関数も作成します。You also create a function that is triggered by an HTTP request. ローカルで実行した後、プロジェクトを公開して Azure でサーバーレス関数として実行します。After running locally, you publish your project to run as a serverless function in Azure.

この記事は、Azure Functions 向けの 2 つの Python クイックスタートのうちの 1 つ目です。This article is the first of two Python quickstarts for Azure Functions. このクイックスタートを終えたら、ご自身の関数に Azure Storage キュー出力バインディングを追加します。After you complete this quickstart, you can add an Azure Storage queue output binding to your function.

また、この記事の Visual Studio Code ベースのバージョンも存在します。There is also a Visual Studio Code-based version of this article.

前提条件Prerequisites

開始する前に、以下が必要になります。Before you start, you must:

  • Python 3.7.4 をインストールします。Install Python 3.7.4. このバージョンの Python は、Functions で検証されています。This version of Python is verified with Functions. Python 3.8 以降のバージョンはまだサポートされていません。Python 3.8 and later versions are not yet supported.

  • Azure Functions Core Tools バージョン 2.7.1846 またはより新しいバージョンをインストールします。Install Azure Functions Core Tools version 2.7.1846 or a later version.

  • Azure CLI バージョン 2.0.76 またはより新しいバージョンをインストールします。Install the Azure CLI version 2.0.76 or a later version.

  • 有効な Azure サブスクリプションを持っている。Have an active Azure subscription.

    Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

仮想環境を作成してアクティブにするCreate and activate a virtual environment

Python 関数をローカルで開発するには、Python 3.7 環境を使用する必要があります。You should use a Python 3.7 environment to locally develop Python functions. 次のコマンドを実行して、.venv という名前の仮想環境を作成してアクティブにします。Run the following commands to create and activate a virtual environment named .venv.

注意

お使いの Linux ディストリビューションに Python をインストールする際、venv がインストールされなかった場合は、次のコマンドを使用してインストールできます。If Python didn't install venv on your Linux distribution, you can install it using the following command:

sudo apt-get install python3-venv

Bash:Bash:

python -m venv .venv
source .venv/bin/activate

PowerShell または Windows コマンド プロンプト:PowerShell or a Windows command prompt:

py -m venv .venv
.venv\scripts\activate

仮想環境をアクティブ化したので、そこで残りのコマンドを実行します。Now that you activated the virtual environment, run the remaining commands in it. 仮想環境から出るには、deactivate を実行します。To get out of the virtual environment, run deactivate.

ローカル関数プロジェクトを作成するCreate a local functions project

関数プロジェクトには、すべてが同じローカルおよびホスティング構成を共有する複数の関数を含めることができます。A functions project can have multiple functions that all share the same local and hosting configurations.

仮想環境で、次のコマンドを実行します。In the virtual environment, run the following commands:

func init MyFunctionProj --python
cd MyFunctionProj

func init コマンドは、MyFunctionProj フォルダーを作成します。The func init command creates a MyFunctionProj folder. このフォルダー内の Python プロジェクトにはまだ関数が含まれていません。The Python project in this folder doesn't yet have any functions. それらを次に追加します。You'll add them next.

関数を作成するCreate a function

プロジェクトに関数を追加するには、次のコマンドを実行します。To add a function to your project, run the following command:

func new --name HttpTrigger --template "HTTP trigger"

このコマンドは、次のファイルを含む HttpTrigger という名前のサブフォルダーを作成します。This commands creates a subfolder named HttpTrigger, which contains the following files:

  • function.json: 関数、トリガー、その他のバインディングを定義する構成ファイル。function.json: configuration file that defines the function, trigger, and other bindings. このファイル内で、scriptFile の値が、関数を含むファイルを指していること、また、bindings 配列には呼び出しトリガーとバインディングが定義されていることがわかります。Notice that in this file, the value for scriptFile points to the file containing the function, and the bindings array defines the invocation trigger and bindings.

    各バインディングは、方向、型、一意の名前を必要とします。Each binding requires a direction, type and a unique name. HTTP トリガーには、httpTrigger 型の入力バインディングと、http 型の出力バインディングが与えられます。The HTTP trigger has an input binding of type httpTrigger and output binding of type http.

  • __init__.py: HTTP でトリガーされる関数であるスクリプト ファイル。__init__.py: script file that is your HTTP triggered function. このスクリプトには既定の main() があることがわかります。Notice that this script has a default main(). トリガーからの HTTP データは、binding parameter という名前の req を使用して、関数に渡されます。HTTP data from the trigger passes to the function using the req named binding parameter. function.json に定義されている req は、azure.functions.HttpRequest クラスのインスタンスです。The req, which is defined in function.json, is an instance of the azure.functions.HttpRequest class.

    function.json$return として定義されているリターン オブジェクトは、azure.functions.HttpResponse クラスのインスタンスです。The return object, defined as $return in function.json, is an instance of azure.functions.HttpResponse class. 詳細については、「Azure Functions の HTTP トリガーとバインド」を参照してください。To learn more, see Azure Functions HTTP triggers and bindings.

これで、ローカル コンピューター上で新しい関数を実行できます。Now you can run the new function on your local computer.

関数をローカルで実行するRun the function locally

このコマンドは、Azure Functions ランタイム (func.exe) を使用して関数アプリを起動します。This command starts the function app using the Azure Functions runtime (func.exe):

func host start

出力に書き込まれた次の情報が表示されます。You should see the following information written to the output:

Http Functions:

        HttpTrigger: http://localhost:7071/api/HttpTrigger    

この出力から HttpTrigger 関数の URL をコピーし、それをブラウザーのアドレス バーに貼り付けます。Copy the URL of your HttpTrigger function from this output and paste it into your browser's address bar. この URL にクエリ文字列 ?name=<yourname> を追加して、要求を実行します。Append the query string ?name=<yourname> to this URL and execute the request. 次のスクリーンショットに、ローカル関数からブラウザーに返された GET 要求に対する応答を示します。The following screenshot shows the response to the GET request that the local function returns to the browser:

ブラウザー上でローカルに検証する

Ctrl + C キーを使用して、関数アプリの実行をシャットダウンします。Use Ctrl+C to shut down your function app execution.

これで関数をローカルで実行したので、関数コードを Azure にデプロイできます。Now that you have run your function locally, you can deploy your function code to Azure.
アプリをデプロイするには、いくつかの Azure リソースを作成しておく必要があります。Before you can deploy your app, you'll need to create some Azure resources.

リソース グループの作成Create a resource group

az group create コマンドでリソース グループを作成します。Create a resource group with the az group create command. Azure リソース グループとは、Function App、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。An Azure resource group is a logical container into which Azure resources like function apps, databases, and storage accounts are deployed and managed.

次の例では、myResourceGroup という名前のリソース グループを作成します。The following example creates a resource group named myResourceGroup.
Cloud Shell を使用していない場合は、まず az login を使用してサインインします。If you aren't using Cloud Shell, sign in first using az login.

az group create --name myResourceGroup --location westeurope

通常は、近くのリージョンにリソース グループおよびリソースを作成します。You generally create your resource group and the resources in a region near you.

Azure Storage アカウントの作成Create an Azure Storage account

Functions は、関数に関する状態その他の情報を維持するために Azure Storage の汎用のアカウントを使用します。Functions uses a general-purpose account in Azure Storage to maintain state and other information about your functions. az storage account create コマンドを使用して作成したリソース グループ内に汎用のストレージ アカウントを作成します。Create a general-purpose storage account in the resource group you created by using the az storage account create command.

次のコマンドでは、<storage_name> プレースホルダーをグローバルに一意なストレージ アカウント名で置き換えます。In the following command, substitute a globally unique storage account name where you see the <storage_name> placeholder. ストレージ アカウント名の長さは 3 ~ 24 文字で、数字と小文字のみを使用できます。Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.

az storage account create --name <storage_name> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Azure で関数アプリを作成するCreate a function app in Azure

関数アプリには、関数コードを実行するための環境を指定します。A function app provides an environment for executing your function code. これにより、リソースの管理、デプロイ、スケーリング、および共有を容易にするための論理ユニットとして関数をグループ化できます。It lets you group functions as a logical unit for easier management, deployment, scaling, and sharing of resources.

次のコマンドを実行します。Run the following command. <APP_NAME> を一意の関数アプリ名に置き換えます。Replace <APP_NAME> with a unique function app name. <STORAGE_NAME> をストレージ アカウント名に置き換えます。Replace <STORAGE_NAME> with a storage account name. <APP_NAME> は、関数アプリの既定の DNS ドメインでもあります。The <APP_NAME> is also the default DNS domain for the function app. この名前は、Azure のすべてのアプリで一意である必要があります。This name needs to be unique across all apps in Azure.

注意

Linux と Windows のアプリを同じリソース グループ内でホストすることはできません。You can't host Linux and Windows apps in the same resource group. Windows の関数アプリまたは Web アプリで myResourceGroup という名前のリソース グループが存在する場合、別のリソース グループを使用する必要があります。If you have an existing resource group named myResourceGroup with a Windows function app or web app, you must use a different resource group.

az functionapp create --resource-group myResourceGroup --os-type Linux \
--consumption-plan-location westeurope  --runtime python --runtime-version 3.7 \
--name <APP_NAME> --storage-account  <STORAGE_NAME>

前のコマンドは、Python 3.7.4 を実行する関数アプリを作成します。The preceding command creates a function app running Python 3.7.4. また、関連付けられた Azure Application Insights インスタンスも同じリソース グループ内にプロビジョニングされます。It also provisions an associated Azure Application Insights instance in the same resource group. このインスタンスを使用して関数アプリを監視し、ログを表示できます。You can use this instance to monitor your function app and view logs.

これで、Azure でローカル関数プロジェクトを関数アプリに公開できます。You're now ready to publish your local functions project to the function app in Azure.

Azure に関数アプリのプロジェクトをデプロイするDeploy the function app project to Azure

Azure 上で関数アプリを作成した後、func azure functionapp publish Core Tools コマンドを使用して、Azure にプロジェクト コードをデプロイできます。After you create the function app in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. この例では、<APP_NAME> をご自身のアプリの名前に置き換えてください。In this example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME>

Python プロジェクトが、デプロイ パッケージ内のファイルから Azure にリモートでビルドされます。Your Python project is built remotely in Azure from the files in the deployment package.

次のメッセージとほぼ同じ出力が表示されます。You'll see output similar to the following message. ここでは、読みやすくするために切り詰められています。It's truncated here so you can read it better:

Getting site publishing info...
...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
Functions in myfunctionapp:
    HttpTrigger - [httpTrigger]
        Invoke url: https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....

HttpTrigger に対応する Invoke url 値をコピーして、Azure 内で関数を検証するために使用できます。You can copy the Invoke url value for your HttpTrigger and use it to verify your function in Azure. URL には、ご自身の関数キーになっている code クエリ文字列の値が含まれ、他の人からは Azure 内の HTTP トリガー エンドポイントを呼び出すことが困難になります。The URL contains a code query string value that is your function key, which makes it difficult for others to call your HTTP trigger endpoint in Azure.

Azure で関数を検証するVerify the function in Azure

cURL を使用して、デプロイした関数を検証します。Use cURL to verify the deployed function. 前の手順からコピーした URL を関数キーも含めて使用して、URL にクエリ文字列 &name=<yourname> を追加します。Using the URL, including the function key, that you copied from the previous step, append the query string &name=<yourname> to the URL.

cURL を使用した Azure の関数の呼び出し。

コピーした URL を、関数キーも含めて、Web ブラウザーのアドレス バーに貼り付けることもできます。You can also paste the copied URL, including the function key, into the address bar of your web browser. 繰り返しになりますが、要求を実行する前に、URL にクエリ文字列 &name=<yourname> を追加してください。Again, append the query string &name=<yourname> to the URL before you execute the request.

Web ブラウザーを使用した関数の呼び出し。

注意

公開された Python アプリのほぼリアルタイムのログを表示するには、Application Insights Live Metrics Stream を使用します。To view near real-time logs for a published Python app, use the Application Insights Live Metrics Stream.

次のステップNext steps

HTTP でトリガーされる関数で Python 関数プロジェクトを作成し、ローカル コンピューターでそれを実行し、Azure にデプロイしました。You've created a Python functions project with an HTTP triggered function, run it on your local machine, and deployed it to Azure. 次は以下の方法で関数を拡張します。Now, extend your function by...