Em um runtime personalizado, seu pacote de código (formato ZIP) é um programa de servidor HTTP. O Function Compute inicia esse servidor HTTP durante uma cold start e roteia todas as requisições recebidas por ele.
Como funciona
Quando o Function Compute executa uma cold start, ele utiliza o Startup Command e o Startup Parameter configurados por você para iniciar o servidor HTTP. O servidor HTTP passa a processar todas as requisições do Function Compute.
Se você não configurar um comando ou parâmetros de inicialização, o Function Compute iniciará o servidor HTTP a partir de /code/bootstrap por padrão.
A cold start ocorre em duas etapas:
Preparação da plataforma — O Function Compute inicializa o ambiente de execução e prepara o lançamento do seu código.
Inicialização do servidor HTTP — O Function Compute executa o comando de inicialização. O servidor HTTP deve estar pronto em até 120 segundos.
Configurar o comando de inicialização
O comando de inicialização é definido em customRuntimeConfig:
| Campo | Descrição |
|---|---|
command | O executável a ser executado |
args | Argumentos passados ao executável |
O Function Compute concatena command e args para formar o comando de inicialização completo.
Suponha que seu pacote de código tenha o nome function.zip. Os exemplos a seguir mostram a estrutura do pacote e o customRuntimeConfig correspondente para cada runtime.
Java 8 ou Spring Boot
.
└── demo.jarcustomRuntimeConfig:
command:
- java
args:
- '-jar'
- 'demo.jar'Python 3.7
.
└── server.pycustomRuntimeConfig:
command:
- python
args:
- 'server.py'Node.js 10
.
└── server.jscustomRuntimeConfig:
command:
- node
args:
- 'server.js'PHP 7.4
.
└── server.phpcustomRuntimeConfig:
command:
- php
args:
- 'server.php'Requisitos do servidor HTTP
Configure o servidor HTTP para atender aos seguintes requisitos. O descumprimento de qualquer um deles faz com que o Function Compute rejeite ou falhe a conexão.
| Requisito | Detalhes | Erro se violado |
|---|---|---|
| Vincular ao endereço correto | Escute em 0.0.0.0:CAPort ou *:CAPort. Não utilize 127.0.0.1:CAPort. | FunctionNotStarted — conexão recusada |
| Corresponder à porta configurada | A porta de escuta do servidor deve corresponder ao valor de CAPort nas configurações da sua função. O padrão é 9000. Para usar uma porta diferente (por exemplo, 8080), defina CAPort como 8080 nas configurações da função. | FunctionNotStarted — ping falhou |
| Ativar keep-alive | Ative o modo keep-alive e defina o tempo limite de conexão como no mínimo 24 horas (a duração máxima de execução da função). | Conexões encerradas durante a execução |
| Iniciar em até 120 segundos | O servidor HTTP deve estar pronto para aceitar conexões em até 120 segundos após o lançamento. | Falha na inicialização |
Exemplo: configuração de keep-alive (Node.js com Express)
const server = app.listen(PORT, HOST);
server.timeout = 0; // never timeout
server.keepAliveTimeout = 0; // keep-alive, never timeoutReferência de erro: vinculação a 127.0.0.1
Se o servidor HTTP escutar em 127.0.0.1 em vez de 0.0.0.0, o Function Compute não conseguirá alcançá-lo e retornará:
{
"ErrorCode": "FunctionNotStarted",
"ErrorMessage": "TheCA'shttpservercannotbestarted:ContainerStartDuration:25000000000.PingCAfaileddueto:dialtcp21.0.XX.XX:9000:getsockopt:connectionrefusedLogs:2019-11-29T09:53:30.859837462ZListeningonport9000"
}