クイックスタート: Azure でコマンド ラインから C# 関数を作成する
この記事では、コマンドライン ツールを使用して、HTTP 要求に応答する C# 関数を作成します。 コードをローカルでテストした後、Azure Functions のサーバーレス環境にデプロイします。
この記事では、分離ワーカー プロセス内の .NET 8 で実行される、HTTP によってトリガーされる関数を作成します。 C# 関数でサポートされている .NET バージョンの詳細については、「サポートされているバージョン」を参照してください。 また、この記事の Visual Studio Code ベースのバージョンも存在します。
このクイックスタートを完了すると、ご利用の Azure アカウントでわずかな (数セント未満の) コストが発生します。
ローカル環境を構成する
開始する前に、次の項目を用意する必要があります。
次のいずれかのツール。Azure リソースの作成に使用します。
Azure Az PowerShell モジュール バージョン 5.9.0 以降。
アクティブなサブスクリプションを含む Azure アカウントも必要です。 無料でアカウントを作成できます。
Azure Functions Core Tools のインストール
Core Tools をインストールするための推奨される方法は、ローカル開発用コンピューターのオペレーティング システムによって異なります。
次の手順で、Windows インストーラー (MSI) を使用して Core Tools v4.x をインストールします。 その他のパッケージベースのインストーラーの詳細については、Core Tools の Readme をご覧ください。
Windows のバージョンに応じて、 以下の Core Tools インストーラーをダウンロードして実行します。
- v4.x - Windows 64 ビット (推奨。Visual Studio Code デバッグには 64 ビットが必要です)。
- v4.x - Windows 32 ビット
以前に Windows で Windows インストーラー (MSI) を使用して Core Tools をインストールした場合は、最新のバージョンをインストールする前に、[プログラムの追加と削除] から古いバージョンをアンインストールする必要があります。
ローカル関数プロジェクトを作成する
Azure Functions における関数プロジェクトとは、それぞれが特定のトリガーに応答する個別の関数を 1 つまたは複数含んだコンテナーです。 プロジェクト内のすべての関数は、同じローカル構成とホスティング構成を共有します。 このセクションでは、関数を 1 つだけ含んだ関数プロジェクトを作成します。
次のように
func init
コマンドを実行して、特定のランタイムを含んだ LocalFunctionProj という名前のフォルダーに関数プロジェクトを作成します。func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
プロジェクト フォルダーに移動します。
cd LocalFunctionProj
このフォルダーにはプロジェクト用の各種ファイルが格納されています。たとえば、local.settings.json や host.json といった名前の構成ファイルです。 local.settings.json には Azure からダウンロードしたシークレットを含めることができるため、このファイルは既定で .gitignore ファイルによってソース管理から除外されます。
次のコマンドを使用して、関数をプロジェクトに追加します。ここで、
--name
引数は関数の一意の名前 (HttpExample) で、--template
引数は関数のトリガー (HTTP) を指定します。func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
func new
によって、HttpExample.cs コード ファイルが作成されます。
(省略可) ファイルの内容を確認する
先に「関数をローカルで実行する」に進み、ファイルの内容は後から確認してもかまいません。
HttpExample.cs
HttpExample.cs には、要求データを req
変数で HttpRequest オブジェクトとして受け取る Run
メソッドが含まれています。 そのパラメーターは、トリガーの動作を定義するために、HttpTriggerAttribute で修飾されます。
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Company.Function
{
public class HttpExample
{
private readonly ILogger<HttpExample> _logger;
public HttpExample(ILogger<HttpExample> logger)
{
_logger = logger;
}
[Function("HttpExample")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
返されるオブジェクトは、HTTP 応答に戻されるデータを格納する IActionResult オブジェクトです。
詳細については、「Azure Functions の HTTP トリガーとバインド」を参照してください。
関数をローカルで実行する
LocalFunctionProj フォルダーから、ローカルの Azure Functions ランタイム ホストを起動して関数を実行します。
func start
出力の最後の方に、次の行があります。
... 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 ...
Note
HttpExample が上記のように表示されない場合、プロジェクトのルート フォルダー以外からホストを起動したと考えられます。 その場合は Ctrl+C キーを使用してホストを停止し、プロジェクトのルート フォルダーに移動して、前出のコマンドを再度実行してください。
この出力から
HttpExample
関数の URL をブラウザーにコピーし、関数 URL を参照すると、"Azure Functions へようこそ" メッセージが表示されます。完了したら、Ctrl+C キーを押し、
y
を選択して関数ホストを停止してください。
関数用の関連 Azure リソースを作成する
関数コードを Azure にデプロイする前に、3 つのリソースを作成する必要があります。
- リソース グループ。関連リソースの論理コンテナーです。
- ストレージ アカウント。関数についての情報 (状態など) を維持する目的で使用されます。
- 関数アプリ。関数コードを実行するための環境となります。 関数アプリは、ローカルの関数プロジェクトと対応関係にあります。これを使用すると、リソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。
以下のコマンドを使用してこれらの項目を作成します。 Azure CLI と PowerShell の両方がサポートされます。
まだ Azure にサインインしていない場合は、Azure にサインインします。
az login
az login コマンドで Azure アカウントにサインインします。
選択したリージョンに
AzureFunctionsQuickstart-rg
という名前のリソース グループを作成します。az group create --name AzureFunctionsQuickstart-rg --location <REGION>
az group create コマンドでリソース グループを作成します。 上記のコマンドで、
<REGION>
コマンドから返された使用可能なリージョン コードを使用して、<REGION>
を自分の近くのリージョンに置き換えます。リソース グループとリージョン内に汎用ストレージ アカウントを作成します。
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS --allow-blob-public-access false
az storage account create コマンドでストレージ アカウントを作成します。
前の例の
<STORAGE_NAME>
は、適宜、Azure Storage 内で一意の名前に置き換えてください。 名前は 3 文字から 24 文字とし、小文字のみを使用する必要があります。Standard_LRS
は汎用アカウントを指定します。これは Functions でサポートされています。
重要
ストレージ アカウントは、アプリケーション コード自体を含む重要なアプリ データを格納するために使用されます。 他のアプリやユーザーからのアクセスをストレージ アカウントに制限する必要があります。
Azure に関数アプリを作成します。
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet-isolated --functions-version 4 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create コマンドで Azure に関数アプリを作成します。
前の例では、
<STORAGE_NAME>
を前の手順で使用したアカウントの名前に、<APP_NAME>
を適宜グローバルに一意の名前に置き換えてください。<APP_NAME>
は、関数アプリの既定の DNS ドメインでもあります。このコマンドでは、Azure Functions 従量課金プラン (ここで発生する使用量に関しては無料) で、指定された言語ランタイムで実行される関数アプリを作成します。 また、このコマンドを実行すると、関連する Azure Application Insights インスタンスが同じリソース グループに作成されます。このインスタンスを使用することで、関数アプリを監視し、ログを確認できます。 詳しくは、「Azure Functions を監視する」をご覧ください。 このインスタンスは、アクティブにするまでコストが発生しません。
Azure に関数プロジェクトをデプロイする
Azure 内に関数アプリを作成することに成功したら、func azure functionapp publish
コマンドを使用してローカル関数プロジェクトをデプロイする準備が整います。
ルート プロジェクト フォルダーで、次の func azure functionapp publish
コマンドを実行します。
func azure functionapp publish <APP_NAME>
この例では、<APP_NAME>
をご自身のアプリの名前に置き換えてください。 デプロイが成功すると、次の出力のような結果 (簡潔にするために切り詰められています) が表示されます。
... 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 上の関数を呼び出す
この関数は HTTP トリガーを使用しており、GET 要求をサポートしているため、これを呼び出すには、その URL に対して HTTP 要求を行います。 これは、ブラウザーで行うのが最も簡単です。
publish コマンドの出力に表示されている完全な呼び出し URL をブラウザーのアドレス バーにコピーします。 この URL にアクセスすると、この関数をローカルで実行したときと同様の出力がブラウザーに表示されるはずです。
凖リアルタイムのストリーミング ログを表示するには、次のコマンドを実行します。
func azure functionapp logstream <APP_NAME>
別のターミナル ウィンドウまたはブラウザーで、もう一度リモート関数を呼び出します。 Azure で実行された関数の詳細ログがターミナルに表示されます。
リソースをクリーンアップする
次の手順に進んで Azure Storage キュー出力バインディングを追加する場合、既存の作業をベースにするので、リソースはすべてそのままにしておいてください。
それ以外の場合は、追加コストの発生を避けるために、次のコマンドを使用して、リソース グループとそこに含まれるすべてのリソースを削除してください。
az group delete --name AzureFunctionsQuickstart-rg