Entorno de ejecución de .NET

El tiempo de ejecución de .NET es la pila de software encargada de instalar el código de tu aplicación y sus dependencias, y, a continuación, ejecutar esa aplicación en el entorno flexible.

Versiones de .NET

.NET 8 se ha creado con paquetes de compilación. Para ver la lista completa de las versiones de .NET admitidas y sus correspondientes versiones de Ubuntu, consulta la programación de asistencia de tiempo de ejecución.

Para usar una versión compatible de .NET, debes hacer lo siguiente:

  • Actualiza el archivo de proyecto con la versión de .NET que quieras usar.

    <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 el artículo Migrar de ASP.NET Core 3.1 a 6.0.

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

  • Especifica el ajuste operating_system en el archivo app.yaml:

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    
  • También puedes especificar una versión del tiempo de ejecución incluyendo el ajuste runtime_version en el archivo app.yaml. De forma predeterminada, App Engine usa la última versión LTS de .NET disponible si no se especifica el ajuste runtime_version. Por ejemplo, el archivo app.yaml tiene el siguiente aspecto al especificar .NET 8 en Ubuntu 22:

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

Versiones anteriores del entorno de ejecución

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

Si quieres usar GKE u otros hosts de Docker, debes crear un archivo Dockerfile que copie el código de tu aplicación e instale las dependencias. Para obtener más información, consulta Runtimes personalizados.

Para desplegar tu aplicación .NET, ejecuta los siguientes comandos desde el directorio raíz en el que se encuentra tu aplicación:

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

Compatibilidad con otros entornos de ejecución de .NET

Si necesitas usar una versión de .NET que no sea compatible, puedes crear un runtime personalizado y seleccionar una imagen base válida con la versión de .NET que necesites.

Para obtener información sobre las imágenes base proporcionadas por Google o las imágenes base de Docker .NET, consulta el artículo Crear tiempos de ejecución personalizados.

Proxies HTTPS y de reenvío

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

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

Prolongar el tiempo de ejecución

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

Puedes personalizar los Dockerfile y .dockerignore como quieras. Por último, tendrás que especificar runtime: custom en lugar de runtime: aspnetcore en app.yaml. Consulta más información sobre cómo personalizar el entorno de ejecución de .NET.

Variables de entorno

El entorno de ejecución define las siguientes variables de entorno:

Variable de entorno Descripción
GAE_INSTANCE Nombre de la instancia actual.
GAE_MEMORY_MB Cantidad de memoria disponible para el proceso de la aplicación.
GAE_SERVICE El nombre del servicio especificado en el archivo app.yaml de tu aplicación o, si no se ha especificado ningún nombre de servicio, se define como default.
GAE_VERSION Etiqueta de versión de la aplicación actual.
GOOGLE_CLOUD_PROJECT El ID del proyecto asociado a tu aplicación, que se puede ver en la Google Cloud consola
PORT Puerto que recibirá las solicitudes HTTP.

Puedes definir variables de configuración adicionales con appsettings.json.

Servidor de metadatos

Cada instancia de tu aplicación puede usar el servidor de metadatos de Compute Engine para consultar información sobre la instancia, como su nombre de host, su dirección IP externa, su ID de instancia, sus metadatos personalizados y la información de su cuenta de servicio. App Engine no te permite definir metadatos personalizados para cada instancia, pero puedes definir metadatos personalizados para 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");