O Node.js 16 já está disponível para visualização.

Ambiente de execução do Node.js

O ambiente de execução do Node.js é a pilha de software responsável por instalar o código do serviço da Web e as dependências dele, além de executar o serviço.

O ambiente de execução do Node.js para o App Engine no ambiente padrão é declarado no arquivo app.yaml:

Node.js 16

runtime: nodejs16

Node.js 14

runtime: nodejs14

Node.js 12

runtime: nodejs12

Node.js 10

runtime: nodejs10

Node.js 8 (obsoleto)

runtime: nodejs8

Versão do Node.js

O ambiente de execução do Node.js é compatível com o Node.js 16 (visualização) Node.js 14, Node.js 12 e Node.js 10. O ambiente de execução usa a versão estável mais recente da versão especificada em seu arquivo app.yaml. O App Engine é atualizado automaticamente para novas versões menores de patch e de lançamento, mas isso não acontece no caso da versão principal.

Por exemplo, é possível implantar o aplicativo no Node.js 10.9.4 e depois atualizá-lo automaticamente para a versão 10.10.0. No entanto, não será feita a atualização automática para o Node.js 12.x.x.

Como as versões secundária e de patch são atualizadas automaticamente, a property engines.node no arquivo package.json só pode especificar a versão principal:

Node.js 16

{
  "engines": {
    "node": "16.x.x"
  }
}

Node.js 14

{
  "engines": {
    "node": "14.x.x"
  }
}

Node.js 12

{
  "engines": {
    "node": "12.x.x"
  }
}

Node.js 10

{
  "engines": {
    "node": "10.x.x"
  }
}

Node.js 8 (obsoleto)

{
  "engines": {
    "node": "8.x.x"
  }
}

A property engines.node é opcional, mas se presente, o valor precisa ser compatível com a versão do Node.js especificada em seu arquivo app.yaml. Exemplo:

Node.js 16

  • 16.x.x
  • ^16.0.0
  • ~16
  • >=6

Node.js 14

  • 14.x.x
  • ^14.0.0
  • ~14
  • >=6

Node.js 12

  • 12.x.x
  • ^12.0.0
  • ~12
  • >=6

Node.js 10

  • 10.x.x
  • ^10.0.0
  • ~10
  • >=6

Node.js 8 (obsoleto)

  • 8.x.x
  • ^8.0.0
  • ~8
  • >=6

Se você especificar uma versão incompatível do Node.js no arquivo package.json, a implantação falhará com uma mensagem de erro.

Dependências

Durante a implantação, o ambiente de execução instala as dependências usando o comando npm install ou, se houver um arquivo yarn.lock, o comando yarn install (links em inglês). Para mais informações, consulte Como especificar dependências. Como o ambiente de execução executa uma nova instalação, não é necessário fazer upload da pasta node_modules.

Para aceitar pacotes do Node.js que exigem extensões nativas, o ambiente de execução inclui pacotes do sistema que possibilitam o uso de ferramentas como o ImageMagick, FFmpeg e Chrome sem comando (links em inglês). Veja a lista completa em Pacotes de sistema incluídos. Para solicitar um pacote, faça um registro no Issue Tracker.

Inicialização do aplicativo

Por padrão, o ambiente de execução inicia o aplicativo executando node server.js. Se você especificar um script start no arquivo package.json, o ambiente de execução executará o script inicial especificado. Exemplo:

"scripts": {
  "start": "node app.js"
}

Para que seu aplicativo receba solicitações HTTP, o script start precisa iniciar um servidor da Web com listener no host 0.0.0.0 e na porta especificada pela variável de ambiente PORT, que pode ser acessada no Node.js como process.env.PORT.

Como o script start é executado sempre que uma nova instância do aplicativo é criada, ele precisa ser leve e excluir as etapas do build para garantir o melhor desempenho.

É possível substituir esse comportamento especificando um script no campo entrypoint em app.yaml. Em vez de executar node server.js ou um script de inicialização, o ambiente de execução inicia o aplicativo com o comando especificado em entrypoint.

Variáveis de ambiente

As seguintes variáveis de ambiente são definidas pelo ambiente de execução:

Variável de ambiente Descrição
GAE_APPLICATION O ID do aplicativo do App Engine. Esse ID tem o prefixo "region code~", como "e~" para aplicativos implantados na Europa.
GAE_DEPLOYMENT_ID O ID da implantação atual.
GAE_ENV O ambiente do App Engine. Defina como standard.
GAE_INSTANCE O ID da instância em que o serviço é executado no momento.
GAE_MEMORY_MB A quantidade de memória disponível para o processo do aplicativo em MB.
GAE_RUNTIME O ambiente de execução especificado no seu arquivo app.yaml.
GAE_SERVICE O nome do serviço especificado no seu arquivo app.yaml. Se nenhum nome de serviço for especificado, ele será definido como default.
GAE_VERSION O rótulo da versão atual do serviço.
GOOGLE_CLOUD_PROJECT O código do projeto do Cloud associado ao aplicativo.
NODE_ENV Definido como production quando o serviço for implantado.
PORT A porta que recebe solicitações HTTP.

É possível definir outras variáveis de ambiente no arquivo app.yaml, mas os valores acima não podem ser modificados, exceto para NODE_ENV.

HTTPS e proxies de encaminhamento

O App Engine encerra as conexões HTTPS no balanceador de carga e encaminha as solicitações para o aplicativo. Em alguns aplicativos, é necessário determinar o protocolo e o IP de solicitação originais. O endereço IP do usuário está disponível no cabeçalho X-Forwarded-For padrão. Os aplicativos que precisam dessa informação devem configurar o framework da Web para confiar no proxy.

Com o Express.js, use a configuração trust proxy:

app.set('trust proxy', true);

Sistema de arquivos

O ambiente de execução inclui um sistema de arquivos completo. O sistema de arquivos é somente leitura, exceto pelo local /tmp, que é um disco virtual que armazena dados na RAM da instância do App Engine.

Servidor de metadados

Cada instância do aplicativo pode usar o servidor de metadados do App Engine para consultar informações sobre a instância e o projeto.

É possível acessar o servidor de metadados por meio dos endpoints a seguir:

  • http://metadata
  • http://metadata.google.internal

As solicitações enviadas ao servidor de metadados precisam incluir o cabeçalho Metadata-Flavor: Google. Esse cabeçalho indica que a solicitação foi enviada para recuperar valores de metadados.

A tabela a seguir lista os endpoints em que é possível fazer solicitações HTTP para metadados específicos.

Endpoint de metadados Descrição
/computeMetadata/v1/project/numeric-project-id Número do projeto atribuído ao seu projeto.
/computeMetadata/v1/project/project-id ID do projeto atribuído ao seu projeto.
/computeMetadata/v1/instance/zone Zona em que a instância está em execução.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email E-mail da conta de serviço padrão atribuído ao seu projeto.
/computeMetadata/v1/instance/service-accounts/default/ Lista todas as contas de serviço padrão do seu projeto.
/computeMetadata/v1/instance/service-accounts/default/scopes Lista todos os escopos compatíveis com as contas de serviço padrão.
/computeMetadata/v1/instance/service-accounts/default/token Retorna o token de autenticação que pode ser usado para autenticar o aplicativo em outras Google Cloud APIs.

Por exemplo, para recuperar o ID do projeto, envie uma solicitação para http://metadata.google.internal/computeMetadata/v1/project/project-id.