O tempo de execução do .NET

O tempo de execução do .NET é a pilha de software responsável por instalar o código e as dependências da sua aplicação e, em seguida, executar essa aplicação no ambiente flexível.

Versões do .NET

O .NET 8 é criado com buildpacks. Para ver a lista completa de versões do .NET suportadas e a respetiva versão do Ubuntu, consulte a Programação de suporte do tempo de execução.

Para usar uma versão suportada do .NET, tem de:

  • Atualize o ficheiro do projeto com a versão do .NET que quer 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 mais informações, consulte o artigo Migrar do ASP.NET Core 3.1 para o 6.0.

  • Instale a versão 420.0.0 ou posterior da CLI gcloud. Pode atualizar as ferramentas de CLI executando o comando gcloud components update. Para ver a versão instalada, pode executar o comando gcloud version.

  • Especifique a definição operating_system no ficheiro app.yaml:

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    
  • Opcionalmente, pode especificar uma versão do tempo de execução incluindo a definição runtime_version no ficheiro app.yaml. Por predefinição, o App Engine usa a versão LTS .NET mais recente disponível se a definição runtime_version não for especificada. Por exemplo, o ficheiro app.yaml tem o seguinte aspeto quando especifica o .NET 8 no Ubuntu 22:

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

Versões de tempo de execução anteriores

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

Se quiser usar o GKE ou outros anfitriões do Docker, tem de criar um Dockerfile que copie o código da sua aplicação e instale as dependências. Para mais informações, consulte o artigo Tempos de execução personalizados.

Para implementar a sua app .NET, execute os seguintes comandos a partir do diretório raiz onde a app reside:

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

Suporte para outros tempos de execução .NET

Se precisar de usar uma versão do .NET que não seja suportada, pode criar um tempo de execução personalizado e selecionar uma imagem base válida com a versão do .NET de que precisa.

Para imagens base fornecidas pela Google ou imagens base do Docker .NET, consulte o artigo Criar tempos de execução personalizados.

HTTPS e proxies de encaminhamento

O App Engine termina a ligação HTTPS no balanceador de carga e encaminha o pedido para a sua aplicação. As aplicações podem examinar o X-Forwarded-Proto para observar se o protocolo original era HTTP ou HTTPS.

Algumas aplicações também precisam de determinar o endereço IP do utilizador. Esta opção está disponível no cabeçalho X-Forwarded-For padrão.

Prolongar o tempo de funcionamento

O tempo de execução .NET do ambiente flexível pode ser usado para criar um tempo de execução personalizado. Os tempos de execução personalizados são configurados através de um Dockerfile.

Pode personalizar os campos Dockerfile e .dockerignore conforme desejado. Por último, tem de especificar runtime: custom em vez de runtime: aspnetcore em app.yaml. Consulte o artigo Personalizar o tempo de execução do .NET para mais informações.

Variáveis de ambiente

As seguintes variáveis de ambiente são definidas pelo ambiente de tempo 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 da aplicação.
GAE_SERVICE O nome do serviço especificado no ficheiro app.yaml da sua aplicação ou, se não for especificado nenhum nome do serviço, é definido como default.
GAE_VERSION A etiqueta da versão da aplicação atual.
GOOGLE_CLOUD_PROJECT O ID do projeto associado à sua aplicação, que é visível na Google Cloud consola
PORT A porta que vai receber pedidos HTTP.

Pode definir variáveis de configuração adicionais com appsettings.json.

Servidor de metadados

Cada instância da sua aplicação pode usar o servidor de metadados do Compute Engine para consultar informações sobre a instância, incluindo o respetivo nome do anfitrião, endereço IP externo, ID da instância, metadados personalizados e informações da conta de serviço. O App Engine não lhe permite definir metadados personalizados para cada instância, mas pode definir metadados personalizados ao nível do projeto e lê-los a partir das suas instâncias do App Engine e Compute Engine.

Esta função de exemplo usa o servidor de metadados para obter 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");