.NET ランタイム

.NET ランタイムは、アプリケーションのコードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。

.NET のバージョン

.NET 8 は Buildpack を使用してビルドされます。サポートされている .NET のバージョンと、それに対応する Ubuntu のバージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。

サポート対象の .NET バージョンを使用するには、次のことを行う必要があります。

  • 使用する .NET バージョンでプロジェクト ファイルを更新します。

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
    
      <ItemGroup>
        <None Update="app.yaml">
          <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        </None>
      </ItemGroup>
    
    </Project>
    

    詳細については、ASP.NET Core 3.1 から 6.0 に移行するをご覧ください。

  • gcloud CLI バージョン 420.0.0 以降をインストールします。CLI ツールを更新するには、gcloud components update コマンドを実行します。インストールされているバージョンを表示するには、gcloud version コマンドを実行します。

  • app.yaml ファイルで operating_system 設定を指定します。

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    
  • 必要に応じて、app.yaml ファイルに runtime_version 設定を含めると、ランタイム バージョンを指定できます。runtime_version の設定が指定されていない場合、App Engine はデフォルトで使用可能な最新の LTS .NET バージョンを使用します。たとえば、Ubuntu 22 で .NET 8 を指定する場合、app.yaml ファイルは次のようになります。

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          runtime_version: "8"
          operating_system: "ubuntu22"
    

以前のランタイム バージョン

特定の .NET SDK バージョンをターゲットにするには、プロジェクト ファイルを更新します。詳細については、ASP.NET Core 3.1 から 6.0 に移行するをご覧ください。

GKE や他の Docker ホストを使用する場合は、アプリケーション コードをコピーして依存関係をインストールする Dockerfile を作成する必要があります。詳細については、カスタム ランタイムをご覧ください。

.NET アプリをデプロイするには、アプリが存在するルート ディレクトリから次のコマンドを実行します。

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

他の .NET ランタイムのサポート

サポート対象外の .NET バージョンを使用する必要がある場合は、カスタム ランタイムを作成し、必要な .NET バージョンを含む有効なベースイメージを選択します。

Google 提供のベースイメージまたは Docker .NET ベースイメージについては、カスタム ランタイムのビルドをご覧ください。

HTTPS プロキシと転送プロキシ

App Engine はロードバランサで HTTPS 接続を終了し、リクエストをアプリケーションに転送します。アプリケーションで X-Forwarded-Proto を調べると、元のプロトコルが HTTP か HTTPS かを確認できます。

一部のアプリケーションでは、ユーザーの IP アドレスの確認が必要になります。これは標準の X-Forwarded-For ヘッダーで使用できます。

ランタイムの拡張

フレキシブル環境の .NET ランタイムを実行すると、カスタム ランタイムを作成できます。 カスタム ランタイムは Dockerfile を介して構成されます。

必要に応じて、Dockerfile.dockerignore をカスタマイズできます。最後に、app.yamlruntime: aspnetcore の代わりに runtime: custom を指定する必要があります。詳細については、.NET ランタイムのカスタマイズをご覧ください。

環境変数

次の環境変数が、ランタイム環境によって設定されます。

環境変数 説明
GAE_INSTANCE 現在のインスタンスの名前。
GAE_MEMORY_MB アプリケーション プロセスで使用可能なメモリ量。
GAE_SERVICE アプリケーションの app.yaml ファイルで指定されたサービス名。サービス名が指定されていない場合は、default に設定されます。
GAE_VERSION 現在のアプリケーションのバージョン ラベル。
GOOGLE_CLOUD_PROJECT アプリケーションに関連付けられたプロジェクト ID。この ID は、Google Cloud Console に表示されます。
PORT HTTP リクエストを受信するポート。

appsettings.json で、追加の構成変数を設定できます。

メタデータ サーバー

アプリケーションのインスタンスは、ホスト名、外部 IP アドレス、インスタンス ID、カスタム メタデータ、サービス アカウント情報など、インスタンスに関する情報を Compute Engine メタデータ サーバーから取得します。App Engine では、インスタンスごとにカスタム メタデータを設定することはできませんが、プロジェクト単位のカスタム メタデータを設定して、App Engine インスタンスや Compute Engine インスタンスから読み取ることができます。

次のサンプル関数では、メタデータ サーバーからインスタンスの外部 IP アドレスを取得します。

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Metadata-Flavor", new[] { "Google" });
response = await client.GetStringAsync(
    "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip");