NET で HTTP Cloud Functions を作成してデプロイする

NET で HTTP Cloud Functions を作成してデプロイする

このガイドでは、.NET ランタイム言語の C# を使用して Cloud Functions の関数を記述するプロセスを説明します。Cloud Functions の関数には次の 2 つのタイプがあります。

  • HTTP 関数。標準的な HTTP リクエストから呼び出します。
  • イベント ドリブン関数。Pub/Sub トピック上のメッセージや Cloud Storage バケット内の変更など、Cloud インフラストラクチャのイベントによってトリガーされます。

詳細については、HTTP 関数の作成イベント ドリブン関数の作成をご覧ください。

準備

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。

    API を有効にする

  8. Google Cloud SDK をインストールして初期化します。
  9. 次のコマンドを使用して、gcloud コンポーネントを更新してインストールします。
    gcloud components update
  10. 開発環境を準備します。

    .NET 設定ガイドに移動

関数を作成する

このセクションでは、.NET 関数を手動で作成する方法について説明します。また、Functions Framework テンプレートを使用して関数を作成することもできます。

関数を作成するには:

  1. 関数コードで使用するため、ローカル システムにディレクトリを作成します。

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    

    Linux / Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    
  2. helloworld ディレクトリに、次の内容のファイルを Function.cs という名前で作成します。

    using Google.Cloud.Functions.Framework;
    using Microsoft.AspNetCore.Http;
    using System.Threading.Tasks;
    
    namespace HelloWorld;
    
    public class Function : IHttpFunction
    {
        public async Task HandleAsync(HttpContext context)
        {
            await context.Response.WriteAsync("Hello World!");
        }
    }

依存関係を指定する

Cloud Functions 関数には、Functions Framework と呼ばれる一連のライブラリが必要です。Functions Framework をビルドで使用できるようにするには、次の手順を実行します。

  1. 作成した helloworld ディレクトリに移動します。

     cd ~/helloworld
    
  2. helloworld ディレクトリに、次の内容のファイルを HelloWorld.csproj という名前で作成します。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.1.0" />
      </ItemGroup>
    </Project>

プロジェクト ファイルを使用、または依存関係の挿入を使用してコード内で他のライブラリをビルドで使用できるようにする場合は、Functions スタートアップ クラスを使用したカスタマイズをご覧ください。

関数をローカルでビルドしてテストする

  1. 次のコマンドを使用して、関数をローカルでビルドして実行します。

    dotnet run
    
  2. ブラウザで http://localhost:8080 にアクセスするか、別のウィンドウから curl localhost:8080 を実行して、関数をテストします。Cloud Shell を使用している場合は、[ウェブでプレビュー] ボタン アイコンをクリックして、[ポート 8080 でプレビュー] を選択して関数の出力を表示します。

    詳細については、ローカル関数にリクエストを送信するをご覧ください。

関数をデプロイする

関数をデプロイするには、helloworld ディレクトリで次のコマンドを実行します。

  gcloud functions deploy csharp-http-function \
    --gen2 \
    --entry-point=HelloWorld.Function \
    --runtime=dotnet6 \
    --region=REGION \
    --source=. \
    --trigger-http \
    --allow-unauthenticated

REGION は、関数をデプロイする Google Cloud リージョンの名前(例: us-west1)に置き換えます。

csharp-http-function は関数が Google Cloud コンソールで識別される登録名で、--entry-point は関数の完全修飾クラス名(FQN)を指定します。

オプションの --allow-unauthenticated フラグを使用すると、認証なしで関数にアクセスできます。

デプロイした関数をテストする

  1. 関数がデプロイされたら、gcloud functions deploy コマンドの出力の uri プロパティをメモするか、次のコマンドを使用して取得します。

    gcloud functions describe csharp-http-function \
      --region=REGION
    

    REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1)に置き換えます。

  2. ブラウザで http://localhost:8080 にアクセスするか、別のウィンドウから curl localhost:8080 を実行して、関数をテストします。

    詳細については、ローカル関数にリクエストを送信するをご覧ください。

関数のログを表示する

コマンドライン ツールでログを表示する

関数のログは、Cloud Logging UI または Google Cloud CLI を使用して確認できます。

gcloud CLI を使用して関数のログを表示するには、logs read コマンドを使用します。

  gcloud functions logs read \
    --gen2 \
    --limit=10 \
    --region=REGION \
    csharp-http-function

REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1)に置き換えます。

出力は次のようになります。

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.221
LOG: Request finished HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - - - 404 0 - 0.9393ms

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.220
LOG: Request starting HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - -

ロギング ダッシュボードでログを表示する

ロギング ダッシュボードで関数のログを表示するには、Cloud Functions の概要ページを開き、リストから関数の名前をクリックして、ログタブをクリックします。

テンプレート パッケージを使用して関数を作成する

以下の手順は、単純な関数の作成に役立ちます。実際には、Functions Framework テンプレートを使用して関数を作成することをおすすめします。

Functions Framework テンプレートを使用して関数を作成、ビルド、テストするには:

  1. .NET SDK をインストールします。Cloud Shell を使用している場合は、この手順は省略できます。

  2. テンプレート パッケージをインストールします。

    dotnet new install Google.Cloud.Functions.Templates
    
  3. プロジェクトのディレクトリと空の HTTP 関数を作成します。

    mkdir HelloFunctions
    cd HelloFunctions
    dotnet new gcf-http
    

    これにより、HelloFunctions.csprojFunction.cs が現在のディレクトリに作成されます。Function.cs を開いてコードを確認し、必要に応じてカスタム メッセージを入力します。

  4. 必要に応じて、前述の手順に沿ってローカルで関数をビルドしてテストします。

  5. 次の gcloud deploy コマンドを実行して関数をデプロイします。

    gcloud functions deploy HelloFunctions.Function \
      --gen2 \
      --entry-point=HelloWorld.Function \
      --runtime=dotnet6 \
      --region=REGION \
      --source=. \
      --trigger-http \
      --allow-unauthenticated
    

    REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1)に置き換えます。

Functions Framework の詳細については、Functions Framework のドキュメントをご覧ください。