.NET ランタイム

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

.NET バージョン 6 以降は Buildpack を使用してビルドされるため、app.yaml ファイルでオペレーティング システムを選択する必要があります。たとえば、.NET 8 を使用するには、オペレーティング システムとして Ubuntu 22 を指定する必要があります。

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

.NET バージョンを選択する

新しいランタイム バージョン

.NET バージョン 6 以降の場合、app.yaml ファイルに runtime_configoperating_system の設定を含めて、オペレーティング システムを指定する必要があります。

新しいバージョンを使用するには、次のことを行う必要があります。

  • プロジェクト ファイルを更新します。

    <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 で .NET8 を指定する場合、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 を作成する必要があります。詳細については、カスタム ランタイムをご覧ください。

App Engine アプリをデプロイする

.NET アプリをデプロイするには:

アプリが配置されているルート ディレクトリから次のコマンドを実行します。

v6 以降

    gcloud app deploy

v3.1 以前

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

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");