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.

Versiones de .NET

.NET 8 se compila con paquetes de compilación. 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.

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

  • Actualiza el archivo de proyecto con la versión de .NET que deseas 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 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 .NET de LTS disponible si no se especifica la configuración de runtime_version. Por ejemplo, el archivo app.yaml se ve de la siguiente manera cuando se especifica .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 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.

Para implementar la aplicación de .NET, ejecuta los siguientes comandos desde el directorio raíz en el que se encuentra la 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 es compatible, puedes crear un entorno de ejecución personalizado y seleccionar una imagen base válida con el versión de NET que necesitas.

Para las imágenes base que proporciona Google o las imágenes base .NET de Docker, consulta Compila entornos de ejecución personalizados.

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