O ambiente de execução do .NET

Visão geral

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

runtime: aspnetcore
env: flex

No ambiente flexível, os tempos de execução são criados por meio do Docker.

O Google Cloud Tools para Visual Studio cria um arquivo app.yaml e um Dockerfile no diretório de saída da versão, caso esses arquivos ainda não estejam no seu projeto.

Se quiser usar o GKE ou outros hosts do Docker, você precisará criar um Dockerfile com base nessa imagem que copia o código do aplicativo e instala as dependências. Por exemplo:

FROM gcr.io/google-appengine/aspnetcore:2.1
COPY . /app
WORKDIR /app
EXPOSE 8080
ENV ASPNETCORE_URLS=http://*:8080
ENTRYPOINT ["dotnet", "Metadata.dll"]

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 um 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 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 processamento 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 aplicativo. Veja-o no Console do Google Cloud Platform.
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 metadataClient = Google.Cloud.Metadata.V1.MetadataClient.Create();
var result = await metadataClient.GetMetadataAsync(
    "instance/network-interfaces/0/access-configs/0/external-ip");
return result.Content.ToString();