.NET 使用入门

本教程面向刚开始在云端构建应用(例如 工程师和 Web 开发者)的新手,他们希望了解适用于 的关键应用开发概念 Cloud de Confiance by S3NS。

目标

费用

在本文档中,您将使用 的以下可计费组件: Cloud de Confiance by S3NS

本文档中的说明旨在将您的资源使用量控制在 的 Cloud de Confiance's “永久免费” 层级限制范围内。

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. 如需在原生模式下创建 Firestore 数据库,请完成以下步骤:
    1. 在 Cloud de Confiance 控制台中,前往 Firestore 创建数据库 页面。

      前往 Firestore 创建数据库

    2. 选择一种 Cloud Firestore 模式 屏幕中,点击选择原生模式
    3. 选择 Firestore 数据库的 位置。此位置设置是您的 默认 Cloud de Confiance 资源位置,用于您的 Cloud de Confiance 项目 。 此位置将用于您的项目中需要设置位置的服务,特别是默认的 Cloud Storage 存储桶和您的 Cloud Run 应用。
    4. 点击创建数据库
  4. 启用 Cloud Run API、Cloud Storage JSON API、Cloud Logging API 和 Error Reporting API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予 角色

    启用 API

  5. 克隆示例代码库并在 Cloud Shell 中打开示例应用:
    前往 Cloud Shell

    利用 Cloud Shell,您可以直接在浏览器中通过命令行访问 Cloud de Confiance 资源。

  6. 如需将示例代码和更改下载到应用目录,请点击继续
  7. 在 Cloud Shell 中,配置 gcloud 工具以使用 您的新 Cloud de Confiance 项目:

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    PROJECT_ID 替换为您使用 Cloud de Confiance 控制台创建的 Cloud de Confiance 项目 ID。

    Google Cloud CLI 是您从命令行与 Cloud de Confiance 资源进行交互的主要方式。在本教程中,您将使用 gcloud 工具来部署和监控 应用。

运行应用

  1. 运行应用:
    GOOGLE_CLOUD_PROJECT=PROJECT_ID dotnet run
    
    PROJECT_ID 替换为您 Cloud de Confiance 创建的项目 ID。
  2. 在 Cloud Shell 中,点击网页预览 , 然后选择通过 8080 端口预览。此时浏览器会打开一个新窗口,显示出您运行中的应用。

将应用部署到 Cloud Run

Cloud de Confiance 提供了 多种运行代码的选项。在此 示例中,您要使用 Cloud Run 将可伸缩 应用部署到 Cloud de Confiance。通过零服务器管理,Cloud Run 让您专注于编写代码。此外,Cloud Run 会自动扩缩以应对突发的流量高峰。

Dockerfile 告诉 Cloud Run 如何运行您的应用:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Bookshelf.dll"]

Dockerfiles 可以 更丰富,但是此配置适用于许多应用。

Cloud Run 通过设置 PORT 环境变量来告诉您的应用要监听哪个端口。Bookshelf 的 Program.cs 包含用于 观察 PORT 变量并监听该端口的代码:

using Google.Cloud.Diagnostics.AspNetCore;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using System;

namespace Bookshelf
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseGoogleDiagnostics(Startup.GetProjectId(), "Bookshelf", "0.01")
                .UseStartup<Startup>().UsePortEnvironmentVariable();
    }

    static class ProgramExtensions
    {
        // Google Cloud Run sets the PORT environment variable to tell this
        // process which port to listen to.
        public static IWebHostBuilder UsePortEnvironmentVariable(
            this IWebHostBuilder builder)
        {
            string port = Environment.GetEnvironmentVariable("PORT");
            if (!string.IsNullOrEmpty(port))
            {
                builder.UseUrls($"http://0.0.0.0:{port}");
            }
            return builder;
        }
    }
}

在终端窗口中,使用 gcloud CLI 将应用部署到 Cloud Run:

  1. 在本地构建应用。
    dotnet publish -c Release
  2. 使用 Cloud Build 来构建 Docker 容器并发布到 Container Registry。
    gcloud builds submit --tag gcr.io/PROJECT_ID/bookshelf \
        bin/Release/netcoreapp2.1/publish
  3. 使用 Cloud Run 运行容器。
    gcloud run deploy bookshelf --region us-central1 --platform managed \
        --image gcr.io/PROJECT_ID/bookshelf --allow-unauthenticated
    现在,您可以在 gcloud run 输出中显示的网址处查看您的应用:
    Service [bookshelf] revision [bookshelf-00001] has been deployed and is serving traffic at
    https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app
  4. 将网址复制到您的网络浏览器以查看该应用。Bookshelf 应用首页

如需详细了解如何部署到 Cloud Run,请参阅 Cloud Run 文档

使用 Firestore 保留数据

您不能在 Cloud Run 实例中存储信息,因为实例重启时信息会丢失,当新实例创建时该信息已不再存在。所以,您需要一个所有实例都能在其中读写的数据库。

Cloud de Confiance 提供了 多种存储数据的选项。在此示例中,您将使用 Firestore 存储每本图书的数据。Firestore 是一种全代管式无服务器 NoSQL 文档数据库,可用于存储和查询数据。Firestore 能够根据您的应用需求自动扩缩,并在不使用时缩减到零个实例。现在添加第一本图书。

  1. 如需为部署的应用创建图书,请点击添加图书

    向 Bookshelf 应用添加一本图书
  2. 书名字段中,输入 Moby Dick
  3. 作者字段中,输入 Herman Melville
  4. 点击保存。现在您的 Bookshelf 应用有了一个条目。

    《Moby Dick》Bookshelf 应用条目
  5. 在 Cloud de Confiance 控制台中,前往 Cloud Firestore前往 Cloud Firestore

    现在数据出现在 Firestore 中。Bookshelf 应用将每本图书存储为具有唯一 ID 的 Firestore 文档,这些文档都存储在一个 Firestore 集合中。在本教程中,该集合称为 books。

    Firestore 文档示例

Firestore 使用 Firestore 客户端库存储图书。下面是一个提取 Firestore 文档的示例:

using Google.Cloud.Firestore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Bookshelf.Models
{
    class FirestoreBookStore : IBookStore
    {
        private FirestoreDb _firestore;
        private CollectionReference _books;

        public FirestoreBookStore(string projectId)
        {
            _firestore = FirestoreDb.Create(projectId);
            _books = _firestore.Collection("Books");
        }

如需详细了解如何使用 Firestore,请参阅 向 Firestore 添加数据

在 Cloud Storage 中存储上传的文件

现在您已经添加了一本图书,接下来该添加图书封面图片。您不能在实例中存储文件,数据库也不适合图片文件。这时,您就得用上 Cloud Storage 了。

Cloud Storage 是主要的 Blob 存储库 Cloud de Confiance。您可以使用 Cloud Storage 来 托管要在中共享的应用资源 Cloud de Confiance。如需使用 Cloud Storage,您需要创建一个 Cloud Storage 存储桶, 这是一个保存数据的基本容器。

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Storage 浏览器 页面。

    前往 Cloud Storage 浏览器页面

  2. 点击创建存储桶
  3. 创建存储桶对话框中,通过将 Cloud de Confiance 项目 ID 附加到字符串_bucket来输入存储桶的名称,使名称看起来像 YOUR_PROJECT_ID_bucket。此名称须遵守 存储桶名称要求。其他所有字段可以保留默认值。
  4. 点击创建
  5. 创建存储分区后,必须将对象设为可公开访问,以供用户查看。如需将对象设为可公开访问,请参阅公开数据
  6. 点击修改图书,然后选择一张图片上传为图书的封面。例如,可以使用图中所示的这张属于公共领域的图片:
    《Moby Dick》图书封面
  7. 点击保存。您将被重定向至首页,其中有您 Bookshelf 应用的条目。
    《Moby Dick》Bookshelf 应用条目

Bookshelf 应用会使用 Cloud Storage 客户端库将上传的文件发送到 Cloud Storage。

using Google.Cloud.Storage.V1;
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;
using System.Web;

namespace Bookshelf.Services
{
    public class ImageUploader
    {
        private readonly string _bucketName;
        private readonly StorageClient _storageClient;

        public ImageUploader(string bucketName)
        {
            _bucketName = bucketName;
            _storageClient = StorageClient.Create();
        }

如需详细了解如何使用 Cloud Storage,请参阅 Cloud Storage 简介

使用 Google Cloud Observability 监控应用

您已经部署了应用,创建并修改了 books 集合。如需为用户监控这些事件,可以使用 Application Performance Management。

使用 Cloud Logging 监控日志

  1. 在 Cloud de Confiance中,前往 Logs Explorer

    前往 Logs Explorer

    您可以在其中实时监控应用。如果您的应用出现问题,应该首先查看这里。

    Stackdriver 日志查看器
  2. 资源下拉列表中,选择 Cloud Run Revision, bookshelf

使用 Error Reporting 监控错误

  1. 在 Cloud de Confiance 控制台中,前往 Error Reporting 页面。
    前往 Error Reporting 页面
    Error Reporting 可突出显示应用中的错误和异常, 您还可以设置相关的提醒。
  2. 在浏览器中,转到应用中的 /Home/Throw 网址。
    例如,如果您的应用托管在 https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app 中, 则转到 https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app/Home/Throw。

    此操作会生成一个新的测试异常并将其发送至 Google Cloud Observability。

  3. 在 Cloud de Confiance 控制台中,返回到 Error Reporting 页面,片刻之后, 新错误就会显示出来。点击自动重新加载 ,这样就无需手动刷新页面。

    Error Reporting 中的错误消息。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Cloud de Confiance 控制台中,前往 管理资源 页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击 关闭以删除项目。

后续步骤