クイック スタート: Visual Studio を使用して Azure で初めての C# 関数を作成する

Azure Functions を使用すると、Visual Studio を使用してローカルの C# 関数プロジェクトを作成し、Azure のスケーラブルなサーバーレス環境で実行するために、このプロジェクトを簡単に発行することができます。 Visual Studio Code を使用して C# アプリをローカルで開発する場合は、この記事の Visual Studio Code ベースのバージョンを代わりに検討する必要があります。

既定では、この記事では Functions ホストと同じプロセスで .NET 6 で実行される C# 関数を作成する方法について説明します。 これらの "インプロセス" C# 関数は、.NET 6 などの長期サポート (LTS) の .NET バージョンでのみサポートされます。 プロジェクトを作成するとき、代わりに分離ワーカー プロセスで .NET 6 上で実行する関数を作成することを選択できます。 分離ワーカー プロセスは .NET の LTS と標準期間サポート (STS) バージョンの両方をサポートします。 詳細については、.NET Functions 分離ワーカー プロセス ガイドの「サポートされているバージョン」を参照してください。

この記事では、次のことについて説明します。

  • Visual Studio を使用して、C# クラス ライブラリ プロジェクトを作成します。
  • HTTP 要求に応答する関数を作成します。
  • コードをローカル環境で実行して、関数の動作を確認します。
  • コード プロジェクトを Azure Functions にデプロイします。

このクイックスタートを完了すると、ご利用の Azure アカウントでわずかな (数セント未満の) コストが発生します。

前提条件

関数アプリ プロジェクトを作成する

Visual Studio の Azure Functions プロジェクト テンプレートを使用すると、Azure の関数アプリに発行できる C# クラス ライブラリ プロジェクトを作成できます。 関数アプリを使用すると、リソースの管理、デプロイ、スケーリング、および共有を容易にするための論理ユニットとして関数をグループ化できます。

  1. Visual Studio メニューで、 [ファイル]>[新規]>[プロジェクト] を選択します。

  2. [新しいプロジェクトの作成] の検索ボックスに「functions」と入力し、Azure Functions テンプレートを選択してから、 [次へ] を選択します。

  3. [新しいプロジェクトの構成] で、プロジェクトのプロジェクト名を入力し、[次へ] を選択します。 関数アプリ名は、C# 名前空間として有効である必要があります。そのため、アンダースコア、ハイフン、その他の英数字以外の文字は使用しないでください。

  4. [追加情報] で、Functions worker に対して次のいずれかのオプションを選択します。

    .NET ランタイム プロセス モデル 説明
    .NET 6.0 (Long Term Support) (.NET 6.0 (長期サポート)) インプロセス "インプロセス" C# 関数は、長期サポート (LTS) の .NET バージョンでのみサポートされます。 関数コードは、Functions ホストと同じプロセスで実行されます。
    .NET 6.0 Isolated (Long Term Support) (.NET 6.0 分離 (長期サポート)) 分離ワーカー プロセス Functions は .NET 6 で実行されますが、Functions ホストとは別のプロセスで実行されます。
    .NET 7.0 Isolated (.NET 7.0 分離) 分離ワーカー プロセス .NET 7 は .NET の LTS バージョンではないので、関数は .NET 7 上の分離プロセスで実行する必要があります。
    .NET Framework Isolated v4 (.NET Framework 分離 v4) 分離ワーカー プロセス .NET Framework でのみサポートされているライブラリを関数で使用する必要がある場合は、このオプションを選択します。
    .NET Core 3.1 (Long Term Support) (.NET Core 3.1 (長期サポート)) インプロセス .NET Core 3.1 は.NET のサポート対象バージョンではなくなり、Functions バージョン 4.x ではサポートされません。 代わりに .NET 6.0 を使用してください。
    .NET Framework v1 インプロセス 古いバージョンの .NET Framework でのみサポートされているライブラリを関数で使用する必要がある場合は、このオプションを選択します。 Functions ランタイムのバージョン 1.x が必要です。

    2 つのプロセス モデルでは異なる API が使用され、各プロセス モデルでは関数プロジェクト コードを生成するときに異なるテンプレートが使用されます。 .NET 6.0 以降の .NET ランタイム バージョンのオプションが表示されない場合は、Azure Functions ツールのインストールの更新が必要な場合があります。

  5. 追加情報の残りの設定には、以下の表の値を使用します。

    設定 説明
    Function HTTP トリガー この値は、HTTP 要求によってトリガーされる関数を作成します。
    ランタイムストレージアカウント(AzureWebJobsStorage)にAzuriteを使用する 有効にする Azure の関数アプリにはストレージ アカウントが必要であるため、プロジェクトを Azure に発行する際に割り当てられるか、作成されます。 HTTP トリガーによって、Azure Storage アカウントの接続文字列が使用されることはありません。その他のすべてのトリガーの種類には、有効な Azure Storage アカウントの接続文字列が必要です。 このオプションを選択すると、Azurite エミュレーターが使用されます。
    承認レベル Anonymous 作成される関数を、すべてのクライアントがキーを使用せずにトリガーできます。 この承認設定により、新しい関数のテストが容易になります。 キーと承認の詳細については、「承認キー」と HTTP と Webhook のバインドに関するページをご覧ください。

    Azure Functions プロジェクトの設定のスクリーンショット。

    [承認レベル][匿名] に設定していることを確認します。 関数の既定のレベルを選択した場合、Azure の関数エンドポイントにアクセスする要求で、関数キーを提示する必要があります。

  6. [作成] を選択して、関数プロジェクトと HTTP トリガー関数を作成します。

Visual Studio によってプロジェクトとクラスが作成されます。クラスの中には、HTTP トリガー関数型のスケルトン コードが含まれています。 スケルトン コードは、要求本文またはクエリ文字列の値を含む HTTP 応答を送信します。 HttpTrigger属性は、関数が HTTP 要求によってトリガーされることを指定します。

フォルダーの名前を変更する

FunctionName メソッド属性は、関数の名前を設定します。これは、既定では Function1 として生成されます。 このツールでは、プロジェクトを作成するときに既定の関数名をオーバーライドすることはできないため、ここで関数クラス、ファイル、およびメタデータに対してより適切な名前を指定します。

  1. エクスプローラーで Function1.cs ファイルを右クリックし、HttpExample.cs という名前に変更します。

  2. コードで、Function1 クラスの名前を HttpExample に変更します。

  3. Run という名前の HttpTrigger メソッドで、FunctionName メソッド属性の名前を HttpExample に変更します。

関数の定義は次のコードのようになります。

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

関数の名前の変更が済んだので、この関数をローカル コンピューターでテストできるようになりました。

関数をローカルで実行する

完全な Azure Functions ランタイムを使用してローカルで関数をテストできるように、Visual Studio は Azure Functions Core Tools と統合されます。

  1. 関数を実行するには、Visual Studio で F5 キーを押します。 ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にすることが必要になる場合があります。 承認レベルは、ローカルで関数を実行するときには適用されません。

  2. Azure Functions のランタイムの出力から、関数の URL をコピーします。

    Azure ローカル ランタイム

  3. HTTP 要求の URL をブラウザーのアドレス バーに貼り付けます。 この URL にクエリ文字列 ?name=<YOUR_NAME> を追加して、要求を実行します。 次の図は、関数によって返されるローカル GET 要求に対するブラウザーでの応答です。

    ブラウザーでの関数 localhost の応答

  4. デバッグを停止するには、Visual Studio で Shift+F5 キーを押します。

関数がローカル コンピューター上で正常に動作することを確認したら、プロジェクトを Azure に発行します。

Azure にプロジェクトを発行する

Visual Studio ではローカル プロジェクトを Azure に発行できます。 プロジェクトを発行するには、Azure サブスクリプションに関数アプリが存在する必要があります。 Azure に関数アプリがまだない場合は、プロジェクトを初めて発行するときに、Visual Studio の発行機能によって作成されます。 この記事では、関数アプリおよび関連する Azure リソースを作成します。

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。 [ターゲット]で、[Azure] を選択し、[次へ] を選択します。

    発行ウィンドウのスクリーンショット。

  2. [特定のターゲット][Azure Function App (Windows)] を選択して、Windows で実行される関数アプリを作成し、[次へ] を選択します。

    ターゲットを指定した発行ウィンドウのスクリーンショット。

  3. [Function Instance] (関数インスタンス) で、[新しい Azure 関数を作成] を選択します。

    関数アプリ インスタンスを新規に作成する際のスクリーンショット。

  4. 次の表に示されている値を使用して、新しいインスタンスを作成します。

    設定 説明
    名前 グローバルに一意の名前 新しい関数アプリを一意に識別する名前。 この名前をそのまま使用するか、新しい名前を入力します。 有効な文字は、a-z0-9- です。
    サブスクリプション 該当するサブスクリプション 使用する Azure サブスクリプション。 このサブスクリプションを承諾するか、ドロップダウン リストから新しいものを選択します。
    リソース グループ リソース グループの名前 関数アプリを作成するリソース グループ。 ドロップダウン リストから既存のリソース グループを選択するか、または [新規] を選択して新しいリソース グループを作成します。
    プランの種類 従量課金 従量課金プランで実行される関数アプリにプロジェクトを発行する場合は、関数アプリの実行に対してのみお支払いください。 他のホスティング プランでは、コストが高くなります。
    場所 App Service の場所 最寄りのリージョンまたは関数がアクセスする他のサービスの近くのリージョン内の [場所] を選択します。
    Azure Storage 汎用ストレージ アカウント Functions の共通言語ランタイムでは、Azure ストレージ アカウントが必要です。 [新規] を選択して汎用ストレージ アカウントを構成します。 または、ストレージ アカウントの要件を満たす既存のアカウントを選択することもできます。

    App Service 作成ダイアログのスクリーンショット。

  5. [作成] を選択して、関数アプリとその関連リソースを Azure で作成します。 リソース作成のステータスがウィンドウの左下に表示されます。

  6. [Functions instance] (関数インスタンス) で、[Run from package file] (パッケージ ファイルから実行します) に必ずチェックを入れてください。 関数アプリは、Zip Deploy を使用して、Run-From-Package モードが有効な状態でデプロイされます。 Zip Deploy は、関数プロジェクトの推奨されるデプロイ方法であり、パフォーマンスが向上します。

    プロファイル作成完了のスクリーンショット。

  7. [完了] を選択し、[発行] ページで [発行] を選択して、プロジェクト ファイルを含むパッケージを Azure の新しい関数アプリにデプロイします。

    デプロイが完了すると、Azure の関数アプリのルート URL が [発行] タブに表示されます。

  8. [発行] タブの [ホスティング] セクションで、[Azure portal で開く] を選択します。 これにより、Azure portal に新しい関数アプリの Azure リソースが開きます。

    発行成功メッセージのスクリーンショット。

Azure 内で関数を確認する

  1. Cloud Explorer では、新しい関数アプリが選択されているはずです。 そうでない場合は、自分のサブスクリプション >[App Services] の順に展開して、新しい関数アプリを選びます。

  2. 関数アプリを右クリックし、 [ブラウザーで開く] を選択します。 これにより、関数アプリのルートが既定の Web ブラウザーで開かれ、関数アプリが実行されていることを示すページが表示されます。

    実行されている関数アプリ

  3. ブラウザーのアドレス バーで、ベース URL に文字列 /api/HttpExample?name=Functions を追加し、要求を実行します。

    HTTP トリガー関数を呼び出す URL は、次の形式になります。

    http://<APP_NAME>.azurewebsites.net/api/HttpExample?name=Functions

  4. この URL に移動し、関数によって返されたリモート GET 要求に対する応答がブラウザーに表示されます。次の例のような内容です。

    ブラウザーでの関数の応答

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

Azure の "リソース" とは、関数アプリ、関数、ストレージ アカウントなどのことを指します。 これらは "リソース グループ" に分類されており、グループを削除することでグループ内のすべてのものを削除できます。

このクイックスタートを完了するために Azure リソースを作成しました。 これらのリソースには、アカウントの状態サービスの価格に応じて課金される場合があります。 このコレクションの他のクイックスタートは、このクイックスタートに基づいています。 クイック スタート、チュートリアル、またはこのクイック スタートで作成したサービスのいずれかでの作業を引き続き行う場合は、リソースをクリーンアップしないでください。

追加コストの発生を避けるために、次の手順に従って関数アプリとその関連リソースを削除してください。

  1. Visual Studio の [発行] ダイアログの [ホスト処理] セクションで、[Azure portal で開く] を選択します。

  2. 関数アプリのページで、 [概要] タブを選択してから、 [リソース グループ] の下にあるリンクを選択します。

    関数アプリのページで削除するリソース グループを選択する

  3. [リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。

  4. [リソース グループの削除] を選択し、指示に従います。

    削除には数分かかることがあります。 実行されると、通知が数秒間表示されます。 ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。

次のステップ

このクイックスタートでは、Visual Studio を使用して、シンプルな HTTP トリガー関数を含む C# 関数アプリを作成し、Azure に発行しました。

次の記事は、選択したプロセス モデルによって異なります。

Functions ホストでインプロセスで実行される C# 関数の操作の詳細については、「Azure Functions を使用する C# クラス ライブラリ関数を開発する」を参照してください。

次の記事に進み、Azure Storage キュー バインドを関数に追加する方法を学習してください。