El entorno de ejecución de .NET

El entorno de ejecución de .NET es la pila de software encargada de instalar el código y las dependencias de tu aplicación para luego ejecutarla en el entorno flexible.

La versión 6 de .NET y las versiones posteriores se compilan a través de buildpacks, lo que requiere que elijas un sistema operativo en el archivo app.yaml. Por ejemplo, para usar .NET 8, debes especificar Ubuntu 22 como el sistema operativo.

Para obtener la lista completa de las versiones de .NET compatibles y su versión de Ubuntu correspondiente, consulta el programa de asistencia del entorno de ejecución.

Elige una versión de .NET

Versiones nuevas del entorno de ejecución

Para .NET versión 6 y versiones posteriores, debes incluir la configuración runtime_config y operating_system en tu archivo app.yaml para especificar un sistema operativo.

Para usar la versión nueva, debes seguir estos pasos:

  • Actualizar el archivo de proyecto.

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

    Para obtener más información, consulta Migra de ASP.NET Core 3.1 a 6.0.

  • Instala la versión 420.0.0 o posterior de gcloud CLI Puedes actualizar las herramientas de la CLI si ejecutas el comando gcloud components update. Para ver la versión instalada, puedes ejecutar el comando gcloud version.

  • Especifica la configuración operating_system en el archivo app.yaml:

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

Opcional: Puedes especificar una versión del entorno de ejecución si incluyes la configuración runtime_version en tu archivo app.yaml. De forma predeterminada, App Engine usa la última versión de .NET de LTS disponible si no se especifica la configuración de runtime_version. Por ejemplo, el archivo app.yaml se verá de la siguiente manera cuando se especifica .NET8 en Ubuntu 22:

    runtime: aspnetcore
    env: flex

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

Versiones anteriores del entorno de ejecución

Para orientar una versión específica del SDK de .NET, actualiza el archivo de proyecto. Para obtener más información, consulta Migra de ASP.NET Core 3.1 a 6.0.

Si deseas utilizar GKE, así como otros hosts de Docker, necesitas crear un Dockerfile que copie el código de la aplicación y también instale las dependencias. Para obtener más información, consulta Entornos de ejecución personalizados.

Implementa tu app de App Engine

Para implementar la aplicación de .NET, haz lo siguiente:

Ejecuta los siguientes comandos desde el directorio raíz en el que se encuentra tu app:

v6 y posteriores

    gcloud app deploy

v3.1 y anteriores

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

Proxies HTTPS y de reenvío

App Engine finaliza la conexión HTTPS en el balanceador de cargas y reenvía la solicitud a la aplicación. Las aplicaciones pueden examinar el X-Forwarded-Proto para ver si el protocolo original era HTTP o HTTPS.

Algunas aplicaciones también necesitan verificar la dirección IP del usuario. Esta está disponible en el encabezado estándar X-Forwarded-For.

Extiende el tiempo de ejecución

El tiempo de ejecución del entorno flexible .NET puede usarse para crear un tiempo de ejecución personalizado. Los entornos de ejecución personalizados se configuran mediante un Dockerfile.

Luego, puedes personalizar el Dockerfile y el .dockerignore como desees. Por último, deberás especificar runtime: custom en lugar de runtime: aspnetcore en app.yaml. Para obtener más información, consulta la sección Cómo personalizar el tiempo de ejecución de .NET.

Variables del entorno

Las siguientes variables del entorno se configuran mediante el entorno de ejecución:

Variable del entorno Descripción
GAE_INSTANCE El nombre de la instancia actual.
GAE_MEMORY_MB La cantidad de memoria disponible para el proceso de la aplicación.
GAE_SERVICE El nombre del servicio especificado en el archivo app.yaml de la aplicación; si no se especifica ningún nombre, se configura como default.
GAE_VERSION La etiqueta de versión de la aplicación actual.
GOOGLE_CLOUD_PROJECT El ID del proyecto asociado con la aplicación, que se puede ver en la consola de Google Cloud.
PORT El puerto que recibirá las solicitudes HTTP.

Puedes definir variables de entorno adicionales con appsettings.json.

Servidor de metadatos

Cada instancia de la aplicación puede usar el servidor de metadatos de Compute Engine para consultar la información acerca de la instancia, incluido su nombre del host, dirección IP externa, ID de la instancia, metadatos personalizados y la información de la cuenta de servicio. App Engine no permite definir metadatos personalizados para cada instancia, pero puedes definir los metadatos personalizados de todo el proyecto y leerlos desde tus instancias de App Engine y Compute Engine.

Esta función de ejemplo usa el servidor de metadatos para obtener la dirección IP externa de la instancia:

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