O ambiente de execução do .NET

O ambiente de execução do .NET é a pilha de software responsável por instalar o código e as dependências do aplicativo e executá-lo no ambiente flexível.

A versão 6 do .NET e versões mais recentes são criadas usando buildpacks, o que exige que você escolha um sistema operacional no arquivo app.yaml. Por exemplo, para usar o .NET 8, especifique o Ubuntu 22 como o sistema operacional.

Para ver a lista completa de versões compatíveis do .NET e a versão correspondente do Ubuntu, consulte a Programação de suporte ao ambiente de execução.

Escolher uma versão do .NET

Novas versões de ambiente de execução

Para o .NET versão 6 e versões posteriores, é preciso incluir as configurações runtime_config e operating_system no arquivo app.yaml para especificar um sistema operacional.

Para usar a nova versão, você precisa:

  • Atualize o arquivo do projeto.

    <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 mais informações, consulte Migrar do ASP.NET Core 3.1 para o 6.0.

  • Instalar a versão da CLI gcloud 420.0.0 ou posterior do Google Analytics. Para atualizar as ferramentas da CLI, execute o comando gcloud components update. Para conferir a versão instalada, execute o comando gcloud version.

  • Especifique a configuração operating_system no arquivo app.yaml:

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

Como alternativa, é possível especificar uma versão de ambiente de execução incluindo a configuração runtime_version em app.yaml. Por padrão, o App Engine usa a versão mais recente do LTS .NET disponível se a configuração runtime_version não for especificada. Por exemplo, o arquivo app.yaml é semelhante ao seguinte ao especificar .NET8 no Ubuntu 22:

    runtime: aspnetcore
    env: flex

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

Versões anteriores do ambiente de execução

Para direcionar uma versão específica do SDK .NET, atualize o arquivo do projeto. Para mais informações, consulte Migrar do ASP.NET Core 3.1 para a versão 6.0.

Se você quiser usar o GKE ou outros hosts do Docker, precisará criar um Dockerfile que copie o código do aplicativo e instale as dependências. Para mais informações, consulte Ambientes de execução personalizados.

Implantar o aplicativo do App Engine

Para implantar o aplicativo .NET:

Execute os seguintes comandos no diretório raiz em que o app está localizado:

v6 e posteriores

    gcloud app deploy

v3.1 e anteriores

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

HTTPS e proxies de encaminhamento

O App Engine encerra a conexão HTTPS no balanceador de carga e encaminha a solicitação ao aplicativo. Os aplicativos podem examinar o X-Forwarded-Proto para saber se o protocolo original era HTTP ou HTTPS.

Alguns aplicativos também precisam averiguar o endereço IP do usuário. Isso está disponível no cabeçalho X-Forwarded-For padrão.

Como ampliar o ambiente de execução

O ambiente flexível do ambiente de execução do .NET pode ser usado para criar um ambiente de execução personalizado. Os ambientes de execução personalizados são configurados por meio de Dockerfile.

É possível personalizar Dockerfile e .dockerignore conforme você quiser. Por fim, você precisará especificar runtime: custom em vez de runtime: aspnetcore em app.yaml. Para saber mais informações, consulte Como personalizar o ambiente de execução do .NET.

Variáveis de ambiente

As variáveis de ambiente a seguir são definidas pelo ambiente do ambiente de execução:

Variável de ambiente Descrição
GAE_INSTANCE O nome da instância atual.
GAE_MEMORY_MB A quantidade de memória disponível para o processo do aplicativo.
GAE_SERVICE O nome do serviço especificado no arquivo app.yaml do aplicativo. Se nenhum nome de serviço for especificado, será definido como default.
GAE_VERSION O rótulo da versão do aplicativo atual.
GOOGLE_CLOUD_PROJECT O ID do projeto associado ao seu aplicativo, que fica visível no Console do Google Cloud
PORT A porta que receberá as solicitações HTTP.

É possível definir outras variáveis de configuração com appsettings.json.

Servidor de metadados

Cada instância do aplicativo pode usar o servidor de metadados do Compute Engine para consultar informações sobre a instância, incluindo o nome do host, o endereço IP externo, o código da instância, os metadados personalizados e as informações sobre a conta do serviço. Não é possível definir metadados personalizados para cada instância no App Engine. Em vez disso, defina metadados personalizados para todo o projeto e leia esses metadados a partir das instâncias do App Engine e do Compute Engine.

A função de exemplo abaixo usa o servidor de metadados para receber o endereço IP externo da instância:

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