クイック スタート:HTTP 要求に応答する関数を Azure で作成するQuickstart: Create a function in Azure that responds to HTTP requests

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

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

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

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

この記事では、コマンドライン ツールを使用して、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.

この記事では、コマンドライン ツールを使用して、HTTP 要求に応答する Java 関数を作成します。In this article, you use command-line tools to create a Java 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.

注意

Maven が好みの開発ツールでない場合は、GradleIntelliJ IDEA、および Visual Studio Code を使用する Java 開発者向けの同様のチュートリアルを確認してください。If Maven is not your prefered development tool, check out our similar tutorials for Java developers using Gradle, IntelliJ IDEA and Visual Studio Code.

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

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

  • Node.js アクティブ LTS およびメンテナンス LTS バージョン (8.11.1 および 10.14.1 を推奨)。Node.js, Active LTS and Maintenance LTS versions (8.11.1 and 10.14.1 recommended).

重要

このクイックスタートを行うには、JAVA_HOME 環境変数を JDK のインストール場所に設定する必要があります。The JAVA_HOME environment variable must be set to the install location of the JDK to complete this quickstart.

前提条件のチェックPrerequisite check

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

  • az --version を実行して、Azure CLI バージョンが 2.0.76 以降であることを確認します。Run az --version to check that the Azure CLI version is 2.0.76 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. (仮想環境を終了するには、deactivate を実行します)。(To exit the virtual environment, run deactivate.)

ローカル関数プロジェクトを作成する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.

次のように 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
func init LocalFunctionProj --dotnet
func init LocalFunctionProj --javascript
func init LocalFunctionProj --typescript
func init LocalFunctionProj --powershell

空のフォルダーで次のコマンドを実行して、Maven アーキタイプから Functions プロジェクトを生成します。In an empty folder, run the following command to generate the Functions project from a Maven archetype.

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype 

Maven により、デプロイ時にプロジェクトの生成を終了するための値の入力が求められます。Maven asks you for values needed to finish generating the project on deployment.
入力を求められたら、次の値を入力します。Provide the following values when prompted:

PromptPrompt Value 説明Description
groupIdgroupId com.fabrikam Java のパッケージ命名規則に従って、すべてのプロジェクトにわたって対象のプロジェクトを一意に識別する値。A value that uniquely identifies your project across all projects, following the package naming rules for Java.
artifactIdartifactId fabrikam-functions バージョン番号のない、jar の名前である値。A value that is the name of the jar, without a version number.
versionversion 1.0-SNAPSHOT 既定値を選択します。Choose the default value.
packagepackage com.fabrikam.functions 生成された関数コードの Java パッケージである値。A value that is the Java package for the generated function code. 既定値を使用します。Use the default.

Y」と入力するか、Enter キーを押して確認します。Type Y or press Enter to confirm.

Maven により、artifactId という名前の新しいフォルダーにプロジェクト ファイルが作成されます (この例では fabrikam-functions)。Maven creates the project files in a new folder with a name of artifactId, which in this example is fabrikam-functions.

プロジェクト フォルダーに移動します。Navigate into the project folder:

cd LocalFunctionProj
cd fabrikam-functions

このフォルダーにはプロジェクト用の各種ファイルが格納されています。たとえば、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.

次のコマンドを使用して、関数をプロジェクトに追加します。ここで、--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"

func new によって、HttpExample.cs コード ファイルが作成されます。func new creates a HttpExample.cs code file.

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.

HttpExample.csHttpExample.cs

HttpExample.cs には、Run メソッドが含まれています。これは、トリガー動作を定義する HttpTriggerAttribute で装飾された HttpRequest 内の req 変数で要求データを受け取ります。HttpExample.cs contains a Run method that receives request data in the req variable is an HttpRequest that's decorated with the HttpTriggerAttribute, which defines the trigger behavior.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace LocalFunctionProj
{
    public static class HttpExample
    {
        [FunctionName("HttpExample")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

返されるオブジェクトは、OkObjectResult (200) または BadRequestObjectResult (400) として応答メッセージを返す ActionResult です。The return object is an ActionResult that returns an response message as either an OkObjectResult (200) or a BadRequestObjectResult (400). 詳細については、「Azure Functions の HTTP トリガーとバインド」を参照してください。To learn more, see Azure Functions HTTP triggers and bindings.

Function.javaFunction.java

Function.java には、run メソッドが含まれています。これは、トリガー動作を定義する HttpTrigger 注釈で装飾された HttpRequestMessage 内の request 変数で要求データを受け取ります。Function.java contains a run method that receives request data in the request variable is an HttpRequestMessage that's decorated with the HttpTrigger annotation, which defines the trigger behavior.

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
            HttpRequestMessage<Optional<String>> request, 
            @QueueOutput(name = "msg", queueName = "outqueue", 
            connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
            .body("Please pass a name on the query string or in the request body").build();
        } else {
            // Write the name to the message queue. 
            msg.setValue(name);

            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

応答メッセージは、HttpResponseMessage.Builder API によって生成されます。The response message is generated by the HttpResponseMessage.Builder API.

pom.xmlpom.xml

アプリをホストするために作成された Azure リソースの設定は、生成された pom.xml ファイル内の com.microsoft.azure という groupId を持つプラグインの configuration 要素で定義されます。Settings for the Azure resources created to host your app are defined in the configuration element of the plugin with a groupId of com.microsoft.azure in the generated pom.xml file. たとえば、次の構成要素では、Maven ベースのデプロイに対して、westus リージョンの java-functions-group リソース グループに関数アプリを作成することを指示しています。For example, the configuration element below instructs a Maven-based deployment to create a function app in the java-functions-group resource group in the westus region. 関数アプリ自体は、java-functions-app-service-plan プラン (既定では、サーバーレスの従量課金プラン) でホストされている Windows 上で実行されます。The function app itself runs on Windows hosted in the java-functions-app-service-plan plan, which by default is a serverless Consumption plan.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>java-functions-group</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-regions for all valid values -->
        <region>westus</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <!-- for docker function, please set the following parameters -->
            <!-- <image>[hub-user/]repo-name[:tag]</image> -->
            <!-- <serverId></serverId> -->
            <!-- <registryUrl></registryUrl>  -->
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~3</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

これらの設定を変更して、Azure でのリソースの作成方法を制御できます。たとえば、初期デプロイの前に runtime.oswindows から linux に変更することができます。You can change these settings to control how resources are created in Azure, such as by changing runtime.os from windows to linux before initial deployment. Maven プラグインでサポートされている設定の完全な一覧については、構成の詳細に関するページを参照してください。For a complete list of settings supported by the Maven plug-in, see the configuration details.

FunctionTest.javaFunctionTest.java

このアーキタイプでは、関数の単体テストも生成されます。The archetype also generates a unit test for your function. 関数を変更してバインドを追加したり、新しい関数をプロジェクトに追加したりする場合は、FunctionTest.java ファイル内のテストも変更する必要があります。When you change your function to add bindings or add new functions to the project, you'll also need to modify the tests in the FunctionTest.java file.

__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.

index.jsindex.js

index.js は、function.json の構成に従ってトリガーされる関数をエクスポートします。index.js exports a function that's triggered according to the configuration in function.json.

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

HTTP トリガーの場合、この関数は、function.json に定義された変数 req で要求データを受け取ります。For an HTTP trigger, the function receives request data in the variable req as defined in function.json. function.json$return として定義されている返されるオブジェクトが応答です。The return object, defined as $return in function.json, is the response. 詳細については、「Azure Functions の HTTP トリガーとバインド」を参照してください。To learn more, see Azure Functions HTTP triggers and bindings.

index.tsindex.ts

index.ts は、function.json の構成に従ってトリガーされる関数をエクスポートします。index.ts exports a function that's triggered according to the configuration in function.json.

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };

};

export default httpTrigger;

HTTP トリガーの場合、この関数は、function.json に定義されている HttpRequest 型の変数 req で要求データを受け取ります。For an HTTP trigger, the function receives request data in the variable req of type HttpRequest as defined in function.json. function.json$return として定義されている返されるオブジェクトが応答です。The return object, defined as $return in function.json, is the response.

run.ps1run.ps1

run.ps1 は、function.json の構成に従ってトリガーされる関数スクリプトを定義します。run.ps1 defines a function script that's triggered according to the configuration in function.json.

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})

HTTP トリガーの場合、この関数は、function.json に定義された $Request パラメーターに渡された要求データを受け取ります。For an HTTP trigger, the function receives request data passed to the $Request param defined in function.json. function.jsonResponse として定義されている返されるオブジェクトが、応答として Push-OutputBinding コマンドレットに渡されます。The return object, defined as Response in function.json, is passed to the Push-OutputBinding cmdlet as the response.

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"
        }
    ]
}
{
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}
{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

各バインディングは、方向、型、一意の名前を必要とします。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

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

func start
npm install
npm start
mvn clean package 
mvn azure-functions:run

出力の最後の方に、次の行があります。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 below, 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.

この出力から 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. Hello Functions のようなメッセージがブラウザーに表示されます。The browser should display a message like Hello Functions:

ブラウザーでローカルに関数を実行した結果

要求を行うと、プロジェクトを起動したターミナルにもログ出力が表示されます。The terminal in which you started your project also shows log output as you make requests.

準備が完了したら、Ctrl + C キーを押し、y を選択して関数ホストを停止してください。When you're ready, 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.

これらの項目を作成するには、次の Azure CLI コマンドを使用します。Use the following Azure CLI commands to create these items. それぞれのコマンドからは、完了時に JSON 出力が返されます。Each command provides JSON output upon completion.

まだ Azure にサインインしていない場合は、az login コマンドでサインインします。If you haven't done so already, sign in to Azure with the az login command:

az login

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

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

注意

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.

az storage account create コマンドを使用して、リソース グループとリージョン内に汎用ストレージ アカウントを作成します。Create a general-purpose storage account in your resource group and region by using the az storage account create command. 次の例の <STORAGE_NAME> は適宜、グローバルに一意の名前に置き換えてください。In the following example, replace <STORAGE_NAME> with a globally unique name appropriate to you. 名前は 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.

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

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

az functionapp create コマンドを使用して関数アプリを作成します。Create the function app using the az functionapp create command. 次の例では、<STORAGE_NAME> を前の手順で使用したアカウントの名前に、<APP_NAME> を適宜グローバルに一意の名前に置き換えてください。In the following 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.

Python 3.8 を使用している場合は、--runtime-version3.8 に変更し、--functions_version3 に変更します。If you are using Python 3.8, change --runtime-version to 3.8 and --functions_version to 3.

Python 3.6 を使用している場合は、--runtime-version3.6 に変更します。If you are using Python 3.6, change --runtime-version to 3.6.

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

Node.js 8 を使用している場合は、さらに --runtime-version8 に変更します。If you are using Node.js 8, also change --runtime-version to 8.

az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime node --runtime-version 10 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime dotnet --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime powershell --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

このコマンドでは、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

Core Tools を使用して対象のプロジェクトを Azure にデプロイする前に、TypeScript ソース ファイルから JavaScript ファイルの運用対応のビルドを作成します。Before you use Core Tools to deploy your project to Azure, you create a production-ready build of JavaScript files from the TypeScript source files.

次のコマンドを使用して、TypeScript プロジェクトをデプロイする準備をします。The following command prepares your TypeScript project for deployment:

npm run build:production 

必要なリソースが揃ったら、func azure functionapp publish コマンドを使用して、ローカル関数プロジェクトを Azure の関数アプリにデプロイすることができます。With the necessary resources in place, you're now ready to deploy your local functions project to the function app in Azure 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>

"... という名前のアプリが見つからない" という内容のエラーが表示された場合は、数秒待ってからやり直してください。先ほどの az functionapp create コマンドの後、Azure でアプリが完全には初期化されていない可能性があります。If you see the error, "Can't find app with name ...", wait a few seconds and try again, as Azure may not have fully initialized the app after the previous az functionapp create command.

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?code=KYHrydo4GFe9y0000000qRgRJ8NdLFKpkakGJQfC3izYVidzzDN4gQ==

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

最初に関数プロジェクトをデプロイすると、関数アプリと関連リソースが Azure に作成されます。A function app and related resources are created in Azure when you first deploy your functions project. アプリをホストするために作成された Azure リソースの設定は、ファイルで定義されています。Settings for the Azure resources created to host your app are defined in the pom.xml file. この記事では、既定値をそのまま使用します。In this article, you'll accept the defaults.

ヒント

Windows ではなく Linux で実行される関数アプリを作成するには、pom.xml ファイルの runtime.os 要素を windows から linux に変更します。To create a function app running on Linux instead of Windows, change the runtime.os element in the pom.xml file from windows to linux. 従量課金プランでの Linux の実行は、これらのリージョンでサポートされています。Running Linux in a consumption plan is supported in these regions. Linux 上で実行されるアプリと Windows 上で実行されるアプリを同じリソース グループに含めることはできません。You can't have apps that run on Linux and apps that run on Windows in the same resource group.

デプロイする前に、az login Azure CLI コマンドを使用して、対象の Azure サブスクリプションにサインインします。Before you can deploy, use the az login Azure CLI command to sign in to your Azure subscription.

az login

次のコマンドを使用して、対象のプロジェクトを新しい関数アプリにデプロイします。Use the following command to deploy your project to a new function app.

mvn azure-functions:deploy

これにより、Azure に次のリソースが作成されます。This creates the following resources in Azure:

  • リソース グループ。Resource group. 名前は java-functions-group です。Named as java-functions-group.
  • ストレージ アカウント。Storage account. Functions に必要です。Required by Functions. 名前は、ストレージ アカウント名の要件に基づいてランダムに生成されます。The name is generated randomly based on Storage account name requirements.
  • ホスティング プラン。Hosting plan. westus リージョンでの関数アプリのサーバーレス ホスティング。Serverless hosting for your function app in the westus region. 名前は java-functions-app-service-plan です。The name is java-functions-app-service-plan.
  • 関数アプリ。Function app. 関数アプリは、関数のデプロイと実行の単位です。A function app is the deployment and execution unit for your functions. 名前は artifactId に基づいてランダムに生成され、ランダムに生成された番号が付加されます。The name is randomly generated based on your your artifactId, appended with a randomly generated number.

デプロイにより、プロジェクト ファイルがパッケージ化され、zip デプロイを使用して新しい関数アプリにデプロイされます。The deployment packages the project files and deploys them to the new function app using zip deployment. このコードは、Azure の展開パッケージから実行されます。The code runs from the deployment package in Azure.

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. どちらの場合も、code URL パラメーターは、関数エンドポイントの呼び出しを承認する一意の関数キーです。In both instances, the code URL parameter is your unique function key that authorizes the invocation of your function endpoint.

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 上で実行された関数の出力をブラウザーで表示したところ

ヒント

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

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

次の手順である Azure Storage キュー出力バインディングの追加に進む場合、既存の作業をベースにするので、リソースはすべてそのままにしておいてください。If you continue to the next step, 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
az group delete --name java-functions-group

次のステップNext steps