Azure で HTTP によってトリガーされる関数を作成するCreate an HTTP triggered function in Azure

注意

Python 用の Azure Functions は現在プレビュー段階です。Python for Azure Functions is currently in preview. 重要な更新プログラムを受け取るために、GitHub 上で Azure App Service のお知らせリポジトリをサブスクライブしてください。To receive important updates, subscribe to the Azure App Service announcements repository on GitHub.

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

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

前提条件Prerequisites

始める前に、以下のものを用意する必要があります。Before you start, you must have the following:

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.6 環境で作業する必要があります。To locally develop and test Python functions, you must work in a Python 3.6 environment. 次のコマンドを実行して、.env という名前の仮想環境を作成してアクティブにします。Run the following commands to create and activate a virtual environment named .env.

Bash:Bash:

python3.6 -m venv .venv
source .venv/bin/activate

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

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

残りのコマンドは仮想環境内で実行されます。The remaining commands are run inside the virtual environment.

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

Functions プロジェクトは、Azure の関数アプリに相当します。A Functions project is the equivalent of a function app in Azure. 同じローカル構成とホスティング構成を共有する複数の関数を使用できます。It can have multiple functions that all share the same local and hosting configurations.

仮想環境で次のコマンドを実行します。worker ランタイムとして python を選択します。In the virtual environment, run the following command, choosing python as your worker runtime.

func init MyFunctionProj

MyFunctionProj という名前のフォルダーが作成されます。これには次の 3 つのファイルが含まれています。A folder named MyFunctionProj is created, which contains the following three files:

  • local.settings.json は、ローカルで実行するとき、アプリ設定と接続文字列を格納するために使用されます。local.settings.json is used to store app settings and connection strings when running locally. このファイルは Azure に公開されません。This file doesn't get published to Azure.
  • requirements.txt には、Azure に公開するときにインストールされるパッケージの一覧が含まれます。requirements.txt contains the list of packages to be installed on publishing to Azure.
  • host.json には、関数アプリのすべての関数に影響するグローバル構成オプションが含まれます。host.json contains global configuration options that affect all functions in a function app. このファイルは Azure に公開されます。This file does get published to Azure.

新しい MyFunctionProj フォルダーに移動します。Navigate to the new MyFunctionProj folder:

cd MyFunctionProj

次に、host.json ファイルを更新し、拡張バンドルを有効にします。Next, you update the host.json file to enable extension bundles.

関数を作成するCreate a function

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

func new

[HTTP トリガー] テンプレートを選択し、関数の名前として「HttpTrigger」と入力し、Enter キーを押します。Choose the HTTP trigger template, type HttpTrigger as the name for the function, then press Enter.

HttpTrigger という名前のサブフォルダーが作成されます。これには次のファイルが含まれます。A subfolder named HttpTrigger is created, which contains the following files:

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

    各バインディングは、方向、型、一意の名前を必要とします。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() が含まれていることを確認します。Review this script and see that it contains a default main(). トリガーからの HTTP データは、バインディング パラメーターという名前の req を利用し、この関数に渡されます。HTTP data from the trigger is passed to this function using the req named binding parameter. function.json に定義されている req は、azure.functions.HttpRequest クラスのインスタンスです。Defined in function.json, req 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.

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

次のコマンドでは、Azure にある同じ Azure Functions ランタイムを使用してローカル実行される関数アプリが起動されます。The following command starts the function app, which runs locally using the same Azure Functions runtime that is in Azure.

func host start

Functions ホストが起動すると、次のような出力が表示されます。この出力は、読みやすいように切り詰められています。When the Functions host starts, it writes something like the following output, which has been truncated for readability:


                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %

...

Content root path: C:\functions\MyFunctionProj
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.

...

Http Functions:

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

[8/27/2018 10:38:27 PM] Host started (29486ms)
[8/27/2018 10:38:27 PM] Job host started

ランタイム出力から HttpTrigger 関数の URL をコピーして、それをブラウザーのアドレス バーに貼り付けます。Copy the URL of your HttpTrigger function from the runtime 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 shows the response in the browser to the GET request returned by the local function:

ブラウザーでローカルにテストする

ローカルで関数を実行したので、これで、Azure で関数アプリとその他の必要なリソースを作成できます。Now that you have run your function locally, you can create the function app and other required resources in Azure.

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

az group create でリソース グループを作成します。Create a resource group with the az group create. 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 are not 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. App Service プランがサポートされているすべての場所を表示するには、az appservice list-locations コマンドを実行します。To see all supported locations for App Service plans, run the az appservice list-locations command.

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 CLI によって次の例のような情報が表示されます。After the storage account has been created, the Azure CLI shows information similar to the following example:

{
  "creationTime": "2017-04-15T17:14:39.320307+00:00",
  "id": "/subscriptions/bbbef702-e769-477b-9f16-bc4d3aa97387/resourceGroups/myresourcegroup/...",
  "kind": "Storage",
  "location": "westeurope",
  "name": "myfunctionappstorage",
  "primaryEndpoints": {
    "blob": "https://myfunctionappstorage.blob.core.windows.net/",
    "file": "https://myfunctionappstorage.file.core.windows.net/",
    "queue": "https://myfunctionappstorage.queue.core.windows.net/",
    "table": "https://myfunctionappstorage.table.core.windows.net/"
  },
     ....
    // Remaining output has been truncated for readability.
}

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, and sharing of resources.

<APP_NAME> プレースホルダーに一意の関数アプリ名を、ストレージ アカウント名として <STORAGE_NAME> を使用して、次のコマンドを実行します。Run the following command using a unique function app name in place of the <APP_NAME> placeholder and the storage account name for <STORAGE_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.

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

注意

Azure Functions の Linux 向け従量課金プランは現在、プレビュー段階であり、使用できるのは次のリージョンだけです: 米国西部、米国東部、西ヨーロッパ、東アジア。Azure Functions, Consumption plan for Linux is currently in preview and only available on following regions: West US, East US, West Europe, East Asia. さらに、Linux アプリと Windows アプリは同じリソース グループ内でホストすることができません。Moreover, Linux and Windows apps cannot be hosted 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.

これで、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 the function app is created in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. 次のコマンドで、<APP_NAME> には、前の手順で作成したアプリの名前を指定します。In the following command, replace <APP_NAME> with the name of your app from the previous step.

func azure functionapp publish <APP_NAME>

次のような出力が表示されます (読みやすくするために一部が省略されています)。You will see output similar to the following, which has been truncated for readability.

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 で関数をテストできるようになります。Copy the Invoke URL value for your HttpTrigger, which you can now use to test your function in Azure. URL には、関数キーである code クエリ文字列が含まれています。The URL contains a code query string value that is your function key. このキーにより、他のユーザーが Azure で HTTP トリガー エンドポイントを呼び出すことが難しくなります。This key makes it difficult for others to call your HTTP trigger endpoint in Azure.

Azure で関数をテストするTest the function in Azure

cURL を使用して、デプロイした関数をテストします。Use cURL to test the deployed function. 前の手順からコピーした URL を使用して、URL にクエリ文字列 &name=<yourname> を次の例のように追加します。Using the URL that you copied from the previous step, append the query string &name=<yourname> to the URL, as in the following example:

curl https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....&name=<yourname>

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

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

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

次の手順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...