.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 以上版本。您可以執行 gcloud components update 指令來更新 CLI 工具。如要查看已安裝的版本,您可以執行 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 和轉送 Proxy

App Engine 會在負載平衡器上終止 HTTPS 連線,並將要求轉送至您的應用程式。應用程式可以檢查 X-Forwarded-Proto,觀察原始通訊協定是 HTTP 還是 HTTPS。

有些應用程式還需確認使用者的 IP 位址,而這項資訊可在標準 X-Forwarded-For 標頭中取得。

擴充執行階段

.NET 執行階段的彈性環境可用於建立自訂執行階段。自訂執行階段是透過 Dockerfile 進行設定。

您可以視需要自訂 Dockerfile.dockerignore。最後,您必須在 app.yaml 中指定 runtime: custom,而不是 runtime: aspnetcore。詳情請參閱「自訂 .NET 執行階段」。

環境變數

下列為執行階段環境設定的環境變數:

環境變數 說明
GAE_INSTANCE 目前執行個體的名稱。
GAE_MEMORY_MB 應用程式程序可用的記憶體量。
GAE_SERVICE 應用程式的 app.yaml 檔案中指定的服務名稱;如果未指定服務名稱,則設為 default
GAE_VERSION 目前應用程式的版本標籤。
GOOGLE_CLOUD_PROJECT 與應用程式相關聯的專案 ID,會在 Google Cloud 控制台上顯示
PORT 接收 HTTP 要求的通訊埠。

您可以使用 appsettings.json 設定其他設定變數。

中繼資料伺服器

您應用程式中的每個執行個體都可以使用 Compute Engine 中繼資料伺服器來查詢該執行個體的相關資訊,包括主機名稱、外部 IP 位址、執行個體 ID、自訂中繼資料,以及服務帳戶資訊。雖然 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");