クイックスタート: コマンド ラインから Azure に Python 関数を作成するQuickstart: Create a Python function in Azure from the command line

この記事では、コマンドライン ツールを使用して、HTTP 要求に応答する Python 関数を作成します。In this article, you use command-line tools to create a Python function that responds to HTTP requests. コードをローカルでテストした後、Azure Functions のサーバーレス環境にデプロイします。After testing the code locally, you deploy it to the serverless environment of Azure Functions.

このクイックスタートを完了すると、ご利用の Azure アカウントでわずかな (数セント未満の) コストが発生します。Completing this quickstart incurs a small cost of a few USD cents or less in your Azure account.

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

ローカル環境を構成するConfigure your local environment

開始する前に、次の項目を用意する必要があります。Before you begin, you must have the following:

前提条件のチェックPrerequisite check

前提条件を確認します。前提条件は、Azure リソースの作成に Azure CLI を使用するか、Azure PowerShell を使用するかによって異なります。Verify your prerequisites, which depend on whether you are using Azure CLI or Azure PowerShell for creating Azure resources:

  • ターミナルまたはコマンド ウィンドウで func --version を実行して、Azure Functions Core Tools のバージョンが 3.x であることを確認します。In a terminal or command window, run func --version to check that the Azure Functions Core Tools are version 3.x.

  • az --version を実行して、Azure CLI バージョンが 2.4 以降であることを確認します。Run az --version to check that the Azure CLI version is 2.4 or later.

  • az login を実行して Azure にサインインし、アクティブなサブスクリプションを確認します。Run az login to sign in to Azure and verify an active subscription.

  • python --version (Linux と macOS の場合) または py --version (Windows の場合) を実行して、使用している Python のバージョンが 3.8.x、3.7.x、または 3.6.x であることを確認します。Run python --version (Linux/macOS) or py --version (Windows) to check your Python version reports 3.8.x, 3.7.x or 3.6.x.

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

適切なフォルダーで次のコマンドを実行し、.venv という名前の仮想環境を作成してアクティブにします。In a suitable folder, run the following commands to create and activate a virtual environment named .venv. 必ず、Azure Functions でサポートされている Python 3.8、3.7、または 3.6 を使用してください。Be sure to use Python 3.8, 3.7 or 3.6, which are supported by Azure Functions.

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

お使いの Linux ディストリビューションに Python の venv パッケージがインストールされていなかった場合は、次のコマンドを実行します。If Python didn't install the venv package on your Linux distribution, run the following command:

sudo apt-get install python3-venv

以降のコマンドはすべて、このアクティブ化された仮想環境で実行しますYou run all subsequent commands in this activated virtual environment.

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

Azure Functions における関数プロジェクトとは、それぞれが特定のトリガーに応答する個別の関数を 1 つまたは複数含んだコンテナーです。In Azure Functions, a function project is a container for one or more individual functions that each responds to a specific trigger. プロジェクト内のすべての関数は、同じローカル構成とホスティング構成を共有します。All functions in a project share the same local and hosting configurations. このセクションでは、関数を 1 つだけ含んだ関数プロジェクトを作成します。In this section, you create a function project that contains a single function.

  1. 次のように func init コマンドを実行して、特定のランタイムを含んだ LocalFunctionProj という名前のフォルダーに関数プロジェクトを作成します。Run the func init command, as follows, to create a functions project in a folder named LocalFunctionProj with the specified runtime:

    func init LocalFunctionProj --python
    
  2. プロジェクト フォルダーに移動します。Navigate into the project folder:

    cd LocalFunctionProj
    

    このフォルダーにはプロジェクト用の各種ファイルが格納されています。たとえば、local.settings.jsonhost.json といった名前の構成ファイルです。This folder contains various files for the project, including configurations files named local.settings.json and host.json. local.settings.json には Azure からダウンロードしたシークレットを含めることができるため、このファイルは既定で .gitignore ファイルによってソース管理から除外されます。Because local.settings.json can contain secrets downloaded from Azure, the file is excluded from source control by default in the .gitignore file.

  3. 次のコマンドを使用して、関数をプロジェクトに追加します。ここで、--name 引数は関数の一意の名前 (HttpExample) で、--template 引数は関数のトリガー (HTTP) を指定します。Add a function to your project by using the following command, where the --name argument is the unique name of your function (HttpExample) and the --template argument specifies the function's trigger (HTTP).

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new によって、関数と同じ名前のサブフォルダーが作成されます。ここには、プロジェクト用に選択した言語に適したコード ファイルと、function.json という名前の構成ファイルが含まれます。func new creates a subfolder matching the function name that contains a code file appropriate to the project's chosen language and a configuration file named function.json.

(省略可) ファイルの内容を確認する(Optional) Examine the file contents

先に「関数をローカルで実行する」に進み、ファイルの内容は後から確認してもかまいません。If desired, you can skip to Run the function locally and examine the file contents later.

__init__.py__init__.py

__init__.py には、function.json 内の構成に従ってトリガーされる Python 関数 main() が含まれます。__init__.py contains a main() Python function that's triggered according to the configuration in function.json.

import logging

import azure.functions as func


def main(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
        )

HTTP トリガーの場合、この関数は、function.json に定義された変数 req で要求データを受け取ります。For an HTTP trigger, the function receives request data in the variable req as defined in function.json. req は、azure.functions.HttpRequest クラスのインスタンスです。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.

function.jsonfunction.json

function.json は、関数の入出力 bindings (トリガーの型を含む) を定義する構成ファイルです。function.json is a configuration file that defines the input and output bindings for the function, including the trigger type.

scriptFile を変更することで、必要に応じて異なる Python ファイルを呼び出せます。You can change scriptFile to invoke a different Python file if desired.

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ]
}

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

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

  1. LocalFunctionProj フォルダーから、ローカルの Azure Functions ランタイム ホストを起動して関数を実行します。Run your function by starting the local Azure Functions runtime host from the LocalFunctionProj folder:

    func start
    

    出力の最後の方に、次の行があります。Toward the end of the output, the following lines should appear:

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    注意

    HttpExample が上記のように表示されない場合、プロジェクトのルート フォルダー以外からホストを起動したと考えられます。If HttpExample doesn't appear as shown above, you likely started the host from outside the root folder of the project. その場合は Ctrl + C キーを使用してホストを停止し、プロジェクトのルート フォルダーに移動して、前出のコマンドを再度実行してください。In that case, use Ctrl+C to stop the host, navigate to the project's root folder, and run the previous command again.

  2. この出力から HttpExample 関数の URL をブラウザーにコピーし、クエリ文字列 ?name=<YOUR_NAME> を追加して、URL 全体を http://localhost:7071/api/HttpExample?name=Functions のようにします。Copy the URL of your HttpExample function from this output to a browser and append the query string ?name=<YOUR_NAME>, making the full URL like http://localhost:7071/api/HttpExample?name=Functions. ブラウザーには、クエリ文字列値をエコー バックする応答メッセージが表示されるはずです。The browser should display a response message that echoes back your query string value. 要求を行うと、プロジェクトを起動したターミナルにもログ出力が表示されます。The terminal in which you started your project also shows log output as you make requests.

  3. 完了したら、Ctrl + C キーを押し、y を選択して関数ホストを停止してください。When you're done, use Ctrl+C and choose y to stop the functions host.

関数用の関連 Azure リソースを作成するCreate supporting Azure resources for your function

関数コードを Azure にデプロイする前に、3 つのリソースを作成する必要があります。Before you can deploy your function code to Azure, you need to create three resources:

  • リソース グループ。関連リソースの論理コンテナーです。A resource group, which is a logical container for related resources.
  • ストレージ アカウント。プロジェクトについての状態とその他の情報を保持します。A Storage account, which maintains state and other information about your projects.
  • 関数アプリ。関数コードを実行するための環境となります。A function app, which provides the environment for executing your function code. 関数アプリは、ローカルの関数プロジェクトと対応関係にあります。これを使用すると、リソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。A function app maps to your local function project and lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

以下のコマンドを使用してこれらの項目を作成します。Use the following commands to create these items. Azure CLI と PowerShell の両方がサポートされます。Both Azure CLI and PowerShell are supported.

  1. まだ Azure にサインインしていない場合は、Azure にサインインします。If you haven't done so already, sign in to Azure:

    az login
    

    az login コマンドで Azure アカウントにサインインします。The az login command signs you into your Azure account.

  2. westeurope リージョンに AzureFunctionsQuickstart-rg という名前のリソース グループを作成します。Create a resource group named AzureFunctionsQuickstart-rg in the westeurope region.

    az group create --name AzureFunctionsQuickstart-rg --location westeurope
    

    az group create コマンドでリソース グループを作成します。The az group create command creates a resource group. リソース グループとリソースは通常、近くのリージョンに作成します。az account list-locations コマンドから返される利用可能なリージョンを使用してください。You generally create your resource group and resources in a region near you, using an available region returned from the az account list-locations command.

    注意

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

  3. リソース グループとリージョン内に汎用ストレージ アカウントを作成します。Create a general-purpose storage account in your resource group and region:

    az storage account create --name <STORAGE_NAME> --location westeurope --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    az storage account create コマンドでストレージ アカウントを作成します。The az storage account create command creates the storage account.

    前の例の <STORAGE_NAME> は、適宜、Azure Storage 内で一意の名前に置き換えてください。In the previous example, replace <STORAGE_NAME> with a name that is appropriate to you and unique in Azure Storage. 名前は 3 文字から 24 文字とし、小文字のみを使用する必要があります。Names must contain three to 24 characters numbers and lowercase letters only. Standard_LRS は汎用アカウントを指定します。これは Functions でサポートされています。Standard_LRS specifies a general-purpose account, which is supported by Functions.

    このクイックスタートでは、ストレージ アカウントに関して数セント (米国ドル) の料金が発生します。The storage account incurs only a few cents (USD) for this quickstart.

  4. Azure に関数アプリを作成します。Create the function app in Azure:

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime python --runtime-version 3.8 --functions-version 3 --name <APP_NAME> --storage-account <STORAGE_NAME> --os-type linux
    

    az functionapp create コマンドで Azure に関数アプリを作成します。The az functionapp create command creates the function app in Azure. Python 3.7 または 3.6 を使用している場合は、--runtime-version をそれぞれ 3.7 または 3.6 に変更します。If you are using Python 3.7 or 3.6, change --runtime-version to 3.7 or 3.6, respectively.

    前の例では、<STORAGE_NAME> を前の手順で使用したアカウントの名前に、<APP_NAME> を適宜グローバルに一意の名前に置き換えてください。In the previous example, replace <STORAGE_NAME> with the name of the account you used in the previous step, and replace <APP_NAME> with a globally unique name appropriate to you. <APP_NAME> は、関数アプリの既定の DNS ドメインでもあります。The <APP_NAME> is also the default DNS domain for the function app.

    このコマンドでは、Azure Functions 従量課金プラン (ここで発生する使用量に関しては無料) で、指定された言語ランタイムで実行される関数アプリを作成します。This command creates a function app running in your specified language runtime under the Azure Functions Consumption Plan, which is free for the amount of usage you incur here. また、このコマンドを実行すると、関連する Azure Application Insights インスタンスが同じリソース グループにプロビジョニングされます。このインスタンスを使用することで、関数アプリを監視したりログを確認したりすることができます。The command also provisions an associated Azure Application Insights instance in the same resource group, with which you can monitor your function app and view logs. 詳しくは、「Azure Functions を監視する」をご覧ください。For more information, see Monitor Azure Functions. このインスタンスは、アクティブにするまでコストが発生しません。The instance incurs no costs until you activate it.

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

Azure への関数アプリの作成に成功したら、func azure functionapp publish コマンドを使用して、ローカル関数プロジェクトをデプロイすることができます。After you've successfully created your function app in Azure, you're now ready to deploy your local functions project by using the func azure functionapp publish command.

次の例の <APP_NAME> は、実際のアプリ名に置き換えてください。In the following example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME>

publish コマンドを実行すると、次のような出力結果が表示されます (簡潔にするため一部省略しています)。The publish command shows results similar to the following output (truncated for simplicity):

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

Azure 上の関数を呼び出すInvoke the function on Azure

この関数は HTTP トリガーを使用しているため、呼び出しは、その URL にブラウザーから HTTP 要求を送信するか、または curl などのツールを使用して行います。Because your function uses an HTTP trigger, you invoke it by making an HTTP request to its URL in the browser or with a tool like curl.

publish コマンドの出力に表示されている完全な 呼び出し URL にクエリ パラメーター &name=Functions を追加して、ブラウザーのアドレス バーにコピーします。Copy the complete Invoke URL shown in the output of the publish command into a browser address bar, appending the query parameter &name=Functions. 関数をローカルで実行したときと同様の出力がブラウザーに表示されるはずです。The browser should display similar output as when you ran the function locally.

Azure 上で実行された関数の出力をブラウザーで表示したところ

Azure portal の Application Insights に凖リアルタイムのストリーミング ログを表示するには、次のコマンドを実行します。Run the following command to view near real-time streaming logs in Application Insights in the Azure portal:

func azure functionapp logstream <APP_NAME> --browser

別のターミナル ウィンドウまたはブラウザーで、もう一度リモート関数を呼び出します。In a separate terminal window or in the browser, call the remote function again. Azure で実行された関数の詳細ログがターミナルに表示されます。A verbose log of the function execution in Azure is shown in the terminal.

リソースをクリーンアップするClean up resources

次の手順に進んで Azure Storage キュー出力バインディングを追加する場合、既存の作業をベースにするので、リソースはすべてそのままにしておいてください。If you continue to the next step and add an Azure Storage queue output binding, keep all your resources in place as you'll build on what you've already done.

それ以外の場合は、追加コストの発生を避けるために、次のコマンドを使用して、リソース グループとそこに含まれるすべてのリソースを削除してください。Otherwise, use the following command to delete the resource group and all its contained resources to avoid incurring further costs.

az group delete --name AzureFunctionsQuickstart-rg

次のステップNext steps

問題がある場合は、お知らせください。Having issues? Let us know.