使用 .NET 创建和部署 HTTP Cloud Run functions

本指南将引导您完成使用 .NET 运行时语言 C# 编写 Cloud Run functions 的过程。Cloud Run functions 有两种类型:

  • HTTP 函数,通过标准 HTTP 请求调用。
  • 事件驱动型函数,由云基础设施中的事件触发,例如 Pub/Sub 主题中收到消息或 Cloud Storage 存储桶发生更改。

如需了解详情,请参阅编写 HTTP 函数编写事件驱动型函数

准备工作

  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, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging 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, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  8. 安装并初始化 Google Cloud SDK
  9. 使用以下命令更新和安装 gcloud 组件。
    gcloud components update
  10. 准备开发环境。

    转到 .NET 设置指南

创建函数

本部分介绍了如何手动创建 .NET 函数。或者,您也可以使用 Functions 框架模板来创建函数。

如需创建函数,请执行以下操作:

  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!", context.RequestAborted);
        }
    }

指定依赖项

Cloud Run functions 函数需要一组称为 Functions 框架的库。如需将 Functions 框架提供给 build,请执行以下步骤:

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

如需了解如何通过项目文件或在代码中通过依赖项注入将其他库提供给 build,请参阅通过 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=dotnet8 \
    --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 界面或通过 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 Run functions 概览页面,点击列表中的函数名称,然后点击日志标签页。

使用模板软件包创建函数

以下说明帮助您创建一个简单的函数。在实际情况下,您可能更希望使用 Functions 框架模板来创建函数。

如需使用 Functions 框架模板创建、构建和测试函数,请执行以下操作:

  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=dotnet8 \
      --region=REGION \
      --source=. \
      --trigger-http \
      --allow-unauthenticated
    

    REGION 替换为您在其中部署函数的 Google Cloud 区域的名称(例如 us-west1)。

如需详细了解 Functions 框架,请参阅 Functions 框架文档。