Il runtime .NET

Il runtime .NET è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione e dell'esecuzione dell'applicazione nell'ambiente flessibile.

La versione 6 di .NET e successive vengono create utilizzando i buildpack, che richiedono di scegliere un sistema operativo nel file app.yaml. Ad esempio, per utilizzare .NET 8, devi specificare Ubuntu 22 come sistema operativo.

Per l'elenco completo delle versioni di .NET supportate e delle versioni di Ubuntu corrispondenti, consulta la pianificazione del supporto per l'esecuzione.

Scegli una versione di .NET

Nuove versioni di runtime

Per .NET versione 6 e successive, devi includere le impostazioni runtime_config e operating_system nel file app.yaml per specificare un sistema operativo.

Per utilizzare la nuova versione, devi:

  • Aggiorna il file di progetto.

    <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>
    

    Per ulteriori informazioni, consulta Eseguire la migrazione da ASP.NET Core 3.1 a 6.0.

  • Installa gcloud CLI versione 420.0.0 o successiva. Puoi aggiornare gli strumenti dell'interfaccia a riga di comando eseguendo il comando gcloud keys update. Per visualizzare la versione installata, puoi eseguire il comando gcloud version.

  • Specifica l'impostazione operating_system nel file app.yaml:

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

Se vuoi, puoi specificare una versione del runtime includendo l'impostazione runtime_version nel file app.yaml. Per impostazione predefinita, App Engine utilizza la versione LTS .NET più recente disponibile se l'impostazione runtime_version non è specificata. Ad esempio, il file app.yaml ha il seguente aspetto quando specifichi .NET8 su Ubuntu 22:

    runtime: aspnetcore
    env: flex

    runtime_config:
        runtime_version: "8"
        operating_system: "ubuntu22"

Versioni di runtime precedenti

Per scegliere come target una versione specifica dell'SDK .NET, aggiorna il file di progetto. Per ulteriori informazioni, consulta Eseguire la migrazione da ASP.NET Core 3.1 a 6.0.

Se vuoi utilizzare GKE o altri host Docker, devi creare un Dockerfile che copia il codice dell'applicazione e installa le dipendenze. Per ulteriori informazioni, consulta Runtime personalizzati.

Esegui il deployment dell'app App Engine

Per eseguire il deployment della tua app .NET:

Esegui questi comandi dalla directory root in cui si trova la tua app:

v6 e versioni successive

    gcloud app deploy

3.1 e versioni precedenti

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

HTTPS e proxy di inoltro

App Engine termina la connessione HTTPS al bilanciatore del carico e inoltra la richiesta alla tua applicazione. Le applicazioni possono esaminare X-Forwarded-Proto per osservare se il protocollo originale era HTTP o HTTPS.

Alcune applicazioni devono anche verificare l'indirizzo IP dell'utente. Questa opzione è disponibile nell'intestazione X-Forwarded-For standard.

Estendere il runtime

Il runtime .NET dell'ambiente flessibile può essere utilizzato per creare un runtime personalizzato. I runtime personalizzati sono configurati tramite un Dockerfile.

Puoi personalizzare Dockerfile e .dockerignore come preferisci. Infine, dovrai specificare runtime: custom anziché runtime: aspnetcore in app.yaml. Per ulteriori informazioni, consulta Personalizzazione del runtime .NET.

Variabili di ambiente

Le seguenti variabili di ambiente sono impostate dall'ambiente di runtime:

Variabile di ambiente Descrizione
GAE_INSTANCE Il nome dell'istanza corrente.
GAE_MEMORY_MB La quantità di memoria disponibile per il processo di applicazione.
GAE_SERVICE Il nome del servizio specificato nel file app.yaml della tua applicazione oppure, se non viene specificato alcun nome, il nome è impostato su default.
GAE_VERSION L'etichetta della versione dell'applicazione corrente.
GOOGLE_CLOUD_PROJECT L'ID progetto associato all'applicazione, visibile nella console Google Cloud
PORT La porta che riceverà le richieste HTTP.

Puoi impostare altre variabili di configurazione con appsettings.json.

Server metadati

Ogni istanza dell'applicazione può utilizzare il server di metadati di Compute Engine per eseguire query sulle informazioni relative all'istanza, tra cui nome host, indirizzo IP esterno, ID istanza, metadati personalizzati e informazioni sull'account di servizio. App Engine non consente di impostare metadati personalizzati per ogni istanza, ma puoi impostare metadati personalizzati a livello di progetto e leggerli dalle istanze di App Engine e Compute Engine.

Questa funzione di esempio utilizza il server metadati per ottenere l'indirizzo IP esterno dell'istanza:

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