.NET のスタートガイド

このチュートリアルは、初めてクラウドでアプリを構築する方々を対象にしています。エンジニアやウェブ デベロッパーなどが、 Cloud de Confiance by S3NSに適用できるアプリ開発の重要なコンセプトを学習する場合に役立ちます。

目標

費用

このドキュメントでは、課金対象である次の Cloud de Confiance by S3NSコンポーネントを使用します。

このドキュメントの手順は、リソース使用量が Cloud de Confianceの無料枠ティアの制限内に収まるように設計されています。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  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 de Confiance プロジェクトの Cloud de Confiance サービスで使用されます。具体的には、デフォルトの Cloud Storage バケットと Cloud Run アプリです。
    4. [データベースを作成] をクリックします。
  4. Cloud Run、Cloud Storage JSON、Cloud Logging、Error Reporting API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    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 の出力に表示される URL で確認できるようになりました。
    Service [bookshelf] revision [bookshelf-00001] has been deployed and is serving traffic at
    https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app
  4. URL を Web ブラウザーにコピーして、アプリを表示します。 Bookshelf アプリのホームページ

Cloud Run へのデプロイの詳細については、Cloud Run のドキュメントをご覧ください。

Firestore を使用してデータを保存する

Cloud Run インスタンスに情報を保存することはできません。インスタンスを再起動すると情報が失われ、新しいインスタンスが作成されたときにはその情報は存在しないためです。そこで、すべてのインスタンスが読み取りおよび書き込みするデータベースを使用します。

Cloud de Confiance には、データを保存するためのいくつかのオプションが用意されています。この例では、Firestore を使用して各書籍のデータを保存します。Firestore はフルマネージドでサーバーレスの NoSQL ドキュメント データベースで、データを保存および照会できます。Firestore はアプリのニーズを満たすために自動でスケールし、使用しない場合はゼロにスケールします。最初の書籍を追加しましょう。

  1. デプロイしたアプリ用の書籍を作成するには、[Add book] をクリックします。

    Bookshelf アプリに書籍を追加する
  2. [Title] 項目に「Moby Dick」と入力します。
  3. [Author] 項目に「Herman Melville」と入力します。
  4. [保存] をクリックします。Bookshelf アプリにエントリが追加されました。

    Moby Dick の Bookshelf アプリのエントリ
  5. Cloud de Confiance コンソールで、Cloud Firestore に移動します。Cloud Firestore に移動

    データが Firestore に表示されます。Bookshelf アプリは、各書籍を一意の ID とともに Firestore ドキュメントとして保存し、これらのドキュメントはすべて Firestore コレクション内に保存されます。このチュートリアルでは、コレクションを書籍と呼びます。

    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 は Cloud de Confianceのメインの blob ストアです。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. [Edit book] をクリックして、書籍の表紙としてアップロードする画像を選択します。たとえば、このパブリック ドメインの画像を使用します。
    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 を使用してアプリをモニタリングする

アプリをデプロイし、書籍を作成して修正しました。ユーザーのためにこのようなイベントをモニタリングするには、アプリケーション パフォーマンス管理を使用します。

Cloud Logging でログをモニタリングする

  1. Cloud de Confianceで、[ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

    アプリをリアルタイムでモニタリングできます。アプリに問題が発生した場合は、まずこちらの画面を確認してください。

    Stackdriver ログビューア
  2. [リソース] プルダウン リストで、[Cloud Run のリビジョン, bookshelf] を選択します。

Error Reporting でエラーをモニタリングする

  1. Cloud de Confiance コンソールで、[Error Reporting] ページに移動します。
    [Error Reporting] ページに移動
    Error Reporting では、アプリ内のエラーと例外が強調表示され、そのアラートを設定できます。
  2. ブラウザで、アプリの /Home/Throw URL に移動します。
    たとえば、アプリが 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 を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ