.NET で Cloud Run functions の HTTP 関数を作成してデプロイする(第 1 世代)

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

  • HTTP トリガー関数。標準的な HTTP リクエストから呼び出します。
  • イベント ドリブン関数。Pub/Sub トピックのメッセージや Cloud Storage バケットの変更など、Cloud インフラストラクチャのイベントを処理するために使用します。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  8. gcloud CLI をインストールして初期化します
  9. gcloud コンポーネントを更新してインストールします。
    gcloud components update
  10. 開発環境を準備します。

    .NET 設定ガイドに移動

関数を作成する

このセクションでは、手動で関数を作成する方法について説明します。また、テンプレート パッケージで提供されるテンプレートを使用することもできます。

関数を作成するには:

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

    Windows

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

    Linux / Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    
  2. 次の内容のファイルを 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!", context.RequestAborted);
        }
    }

    この例の関数は、「Hello, World!」という挨拶を出力します。

依存関係を指定する

次に、依存関係を設定します。C# Cloud Run functions で設定できる依存関係には、次の 2 種類があります。

  • Functions Framework を利用できるようにする。このセクションでは、このタスクについて説明します。
  • 他のライブラリも利用できるようにする。プロジェクト ファイルまた依存関係の挿入によりコード内で利用できるようにします。詳細については、Functions Startup クラスを使用したカスタマイズをご覧ください。

Functions Framework を使用できるようにするには、上で作成した helloworld ディレクトリに移動します。

     cd ~/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.2.1" />
  </ItemGroup>
</Project>

をご覧ください。

関数をデプロイする

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

gcloud functions deploy --no-gen2 my-first-function --entry-point HelloWorld.Function --runtime dotnet6 --trigger-http --allow-unauthenticated

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

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

  1. 関数がデプロイされたら、httpsTrigger.url プロパティをメモするか、次のコマンドを使用して検索します。

    gcloud functions describe my-first-function
    

    次のようになります。

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
  2. ブラウザで、この URL にアクセスします。Hello World! というメッセージが表示されます。

ログを表示する

Cloud Run functions のログは、Google Cloud CLI を使用して、また Cloud Logging UI で表示できます。

コマンドライン ツールを使用する

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

gcloud functions logs read my-first-function

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

LEVEL  NAME               EXECUTION_ID  TIME_UTC                 LOG
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.791  Function execution started
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.958  Function execution took 168 ms, finished with status code: 200
...

Logging ダッシュボードを使用する

Google Cloud コンソールから Cloud Run functions のログを表示することもできます。

テンプレート パッケージを使用する

上述のセクションでは、関数を最初から手動で作成する方法を説明しました。ここからは、テンプレートを使用して新しい関数を作成します。

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

  1. .NET SDK をインストールします。

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

    dotnet new install Google.Cloud.Functions.Templates
    
  3. 次に、プロジェクトのディレクトリを作成し、dotnet new を使用して新しい HTTP 関数を作成します。

    mkdir HelloFunctions
    cd HelloFunctions
    dotnet new gcf-http
    

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

  4. 次のように関数をローカルで作成します。

    dotnet run
    
  5. サーバーが稼働したら、http://localhost:8080 を参照して関数を呼び出します。コンソールで Ctrl+C キーを押して、サーバーを停止します。

    この関数により、「Hello Functions Framework」というメッセージが表示されます。

別のターミナル ウィンドウから curl を使用して、この関数にリクエストを送信することもできます。

curl localhost:8080
# Output: Hello Functions Framework