コマンド ラインから最初の関数を作成するCreate your first function from the command line

このクイックスタート トピックでは、コマンド ラインまたはターミナルから最初の関数を作成する方法について説明します。This quickstart topic walks you through how to create your first function from the command line or terminal. Azure CLI を使用して、関数をホストするサーバーレス インフラストラクチャである Function App を作成します。You use the Azure CLI to create a function app, which is the serverless infrastructure that hosts your function. 関数コード プロジェクトは、Azure Functions Core Tools を使用してテンプレートから生成されます。このツールは、関数アプリ プロジェクトを Azure にデプロイするためにも使用されます。The function code project is generated from a template by using the Azure Functions Core Tools, which is also used to deploy the function app project to Azure.

以下の手順は、Mac、Windows、または Linux コンピューターを使用して実行することができます。You can follow the steps below using a Mac, Windows, or Linux computer.

前提条件Prerequisites

このサンプルを実行する前に、以下が必要です。Before running this sample, you must have the following:

  • Azure Core Tools バージョン 2.x をインストールします。Install Azure Core Tools version 2.x.

  • Azure CLI をインストールします。Install the Azure CLI. この記事では、Azure CLI バージョン 2.0.46 以降が必要です。This article requires the Azure CLI version 2.0 or later. お使いのバージョンを確認するには、az --version を実行します。Run az --version to find the version you have. Azure Cloud Shell を使用することもできます。You can also use the Azure Cloud Shell.

  • 有効な Azure サブスクリプションAn active Azure subscription.

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

ローカルの関数アプリ プロジェクトを作成するCreate the local function app project

コマンド ラインから次のコマンドを実行し、現在のローカル ディレクトリの MyFunctionProj フォルダー内に関数アプリ プロジェクトを作成します。Run the following command from the command line to create a function app project in the MyFunctionProj folder of the current local directory. GitHub リポジトリも MyFunctionProj 内に作成されます。A GitHub repo is also created in MyFunctionProj.

func init MyFunctionProj

メッセージが表示されたら、次の言語からワーカー ランタイムを選択します。When prompted, select a worker runtime from the following language choices:

  • dotnet: .NET クラス ライブラリ プロジェクト (.csproj) を作成します。dotnet: creates a .NET class library project (.csproj).
  • node: JavaScript プロジェクトを作成します。node: creates a JavaScript project.

コマンドを実行すると、次のような出力が表示されます。When the command executes, you see something like the following output:

Writing .gitignore
Writing host.json
Writing local.settings.json
Initialized empty Git repository in C:/functions/MyFunctionProj/.git/

次のコマンドを使用して、新しい MyFunctionProj プロジェクト フォルダーに移動します。Use the following command to navigate to the new MyFunctionProj project folder.

cd MyFunctionProj

関数を作成するCreate a function

次のコマンドは、HTTP でトリガーされる MyHtpTrigger という名前の関数を作成します。The following command creates an HTTP-triggered function named MyHtpTrigger.

func new --name MyHttpTrigger --template "HttpTrigger"

コマンドを実行すると、次のような出力が表示されます。When the command executes, you see something like the following output:

The function "MyHttpTrigger" was created successfully from the "HttpTrigger" template.

関数を更新するUpdate the function

既定では、テンプレートによって、要求時に関数キーを要求する関数が作成されます。By default, the template creates a function that requires a function key when making requests. Azure で関数をテストしやすくするために、匿名アクセスを許可するように関数を更新する必要があります。To make it easier to test the function in Azure, you need to update the function to allow anonymous access. この変更を行う方法は、関数プロジェクトの言語によって異なります。The way that you make this change depends on your functions project language.

C#C#

新しい関数である MyHttpTrigger.cs コード ファイルを開き、関数定義の中の AuthorizationLevel 属性の値を anonymous に更新し、変更を保存します。Open the MyHttpTrigger.cs code file that is your new function and update the AuthorizationLevel attribute in the function definition to a value of anonymous and save your changes.

[FunctionName("MyHttpTrigger")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, 
            "get", "post", Route = null)]HttpRequest req, ILogger log)

JavaScriptJavaScript

新しい関数である function.json ファイルをテキスト エディターで開き、bindings.httpTrigger 内の authLevel プロパティ を anonymous に更新し、変更を保存します。Open the function.json file for your new function, open it in a text editor, update the authLevel property in bindings.httpTrigger to anonymous, and save your changes.

  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]

これで、関数キーを指定することなく Azure で関数を呼び出すことができます。Now you can call the function in Azure without having to supply the function key. ローカルでの実行時に関数キーが要求されることはありません。The function key is never required when running locally.

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

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

func host start --build

C# プロジェクトをコンパイルするには、--build オプションが必須です。The --build option is required to compile C# projects. JavaScript プロジェクトの場合、このオプションは必要ありません。You don't need this option for a JavaScript project.

Functions ホストが起動すると、次のような出力が表示されます。この出力は、読みやすいように切り詰められています。When the Functions host starts, it write 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.
}

Function App を作成するCreate a function app

関数の実行をホストするための Function App が存在する必要があります。You must have a function app to host the execution of your functions. Function App は、関数コードのサーバーレス実行の環境を提供します。The function app provides an environment for serverless execution of your function code. Function App を使用すると、リソースの管理、デプロイ、共有を容易にするためのロジック ユニットとして関数をグループ化できます。It lets you group functions as a logic unit for easier management, deployment, and sharing of resources. Function App の作成には、az functionapp create コマンドを使用します。Create a function app by using the az functionapp create command.

次のコマンドでは、<app_name> プレースホルダーを一意の Function App 名で、<storage_name> をストレージ アカウント名で置き換えます。In the following command, substitute a unique function app name where you see the <app_name> placeholder and the storage account name for <storage_name>. <app_name> は、Function App の既定の DNS ドメインとして使用されます。そのため、名前は Azure のすべてのアプリ間で一意である必要があります。The <app_name> is used as the default DNS domain for the function app, and so the name needs to be unique across all apps in Azure. deployment-source-url パラメーターは、HTTP によってトリガーされる "Hello World" 関数を含む GitHub のサンプル リポジトリです。The deployment-source-url parameter is a sample repository in GitHub that contains a "Hello World" HTTP triggered function.

az functionapp create --resource-group myResourceGroup --consumption-plan-location westeurope \
--name <app_name> --storage-account  <storage_name>  

consumption-plan-location パラメーターを設定すると、従量課金ホスティング プランで Function App がホストされます。Setting the consumption-plan-location parameter means that the function app is hosted in a Consumption hosting plan. このサーバーレス プランでは、関数からの要求に応じてリソースが動的に追加され、関数が実行中のときだけ課金されます。In this serverless plan, resources are added dynamically as required by your functions and you only pay when functions are running. 詳細については、「Azure Functions の適切なサービス プランを選択する」を参照してください。For more information, see Choose the correct hosting plan.

Function App が作成されると、Azure CLI によって次の例のような情報が表示されます。After the function app has been created, the Azure CLI shows information similar to the following example:

{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "containerSize": 1536,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "quickstart.azurewebsites.net",
  "enabled": true,
  "enabledHostNames": [
    "quickstart.azurewebsites.net",
    "quickstart.scm.azurewebsites.net"
  ],
   ....
    // Remaining output has been truncated for readability.
}

関数アプリを構成する (Node.js)Configure the function app (Node.js)

JavaScript の関数アプリを作成する際は、適切な Node.js バージョンを対象にする必要があります。When you create a JavaScript function app, it's important to target the correct Node.js version. Functions ランタイムのバージョン 2.x には、Node.js バージョン 8.x が必要です。Version 2.x of the Functions runtime requires Node.js version 8.x. Azure の関数アプリによって使用される Node.js のバージョンは、アプリケーション設定 WEBSITE_NODE_DEFAULT_VERSION で制御します。The application setting WEBSITE_NODE_DEFAULT_VERSION controls the version of Node.js that is used by the function app in Azure. az functionapp config appsettings set コマンドを使用して Node.js のバージョンを 8.11.1 に設定してください。Use the az functionapp config appsettings set command to set the Node.js version to 8.11.1.

次の Azure CLI コマンドの `<app_name> は、お使いの関数アプリの名前です。In the following Azure CLI command, `<app_name> is the name of your function app.

az functionapp config appsettings set --resource-group myResourceGroup \
 --name <app_name> --settings WEBSITE_NODE_DEFAULT_VERSION=8.11.1

出力で新しい設定を確認します。Verify the new setting in the output.

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

Azure で関数アプリを作成した後、func azure functionapp publish コマンドを使用して Azure にプロジェクト コードをデプロイすることができます。After the function app is created in Azure, you can use the func azure functionapp publish command to deploy your project code to Azure.

func azure functionapp publish <FunctionAppName>

読みやすさは不完全ですが、次のような出力が表示されます。You see something like the following output, which has been truncated for readability.

Getting site publishing info...

...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...

これで、Azure で関数をテストできます。You can now test your functions in Azure.

関数をテストするTest the function

cURL を使用して、Mac または Linux コンピューターで、または Windows で Bash を使用して、デプロイした関数をテストします。Use cURL to test the deployed function on a Mac or Linux computer or using Bash on Windows. 次の cURL コマンドを実行します。<app_name> プレースホルダーを Function App の名前に置き換えます。Execute the following cURL command, replacing the <app_name> placeholder with the name of your function app. URL にクエリ文字列 &name=<yourname> を追加します。Append the query string &name=<yourname> to the URL.

curl https://<app_name>.azurewebsites.net/api/MyHttpTrigger?name=<yourname>

ブラウザーに表示された関数の応答。

コマンド ラインで使用可能な cURL がない場合は、Web ブラウザーのアドレスに同じ URL を入力します。If you don't have cURL available in your command line, enter the same URL in the address of your web browser. 再度、<app_name> プレースホルダーを関数アプリの名前に置き換え、URL にクエリ文字列 &name=<yourname> を追加して、要求を実行します。Again, replace the <app_name> placeholder with the name of your function app, and append the query string &name=<yourname> to the URL and execute the request.

https://<app_name>.azurewebsites.net/api/MyHttpTrigger?name=<yourname>

ブラウザーに表示された関数の応答。

リソースのクリーンアップClean up resources

このコレクションの他のクイックスタートは、このクイックスタートに基づいています。Other quickstarts in this collection build upon this quickstart. 引き続きクイックスタートまたはチュートリアルの作業を行う場合は、このクイックスタートで作成したリソースをクリーンアップしないでください。If you plan to continue on to work with subsequent quickstarts or with the tutorials, do not clean up the resources created in this quickstart. 作業する予定がない場合は、次のコマンドを使用して、このクイックスタートで作成したすべてのリソースを削除してください。If you do not plan to continue, use the following command to delete all resources created by this quickstart:

az group delete --name myResourceGroup

確認を求められたら y と入力します。Type y when prompted.

次の手順Next steps

Azure Functions Core Tools を使用したローカルでの Azure Functions の開発方法について確認します。Learn more about developing Azure Functions locally using the Azure Functions Core Tools.