Você está lendo a documentação do Apigee Edge.
Acesse a documentação da
Apigee X. info
Qual versão do Node.js é compatível com o Apigee Edge?
No momento, o Edge é compatível com o Node.js 0.10.32.
Quais módulos padrão do Node.js são compatíveis com o Edge?
Use a tabela a seguir para determinar quais módulos padrão do Node.js estão incluídos no Edge. Em alguns casos, os módulos incluídos são parcialmente compatíveis. Esses são módulos integrados ao Node.js.| Módulo | Status | Observações |
|---|---|---|
assert |
Compatível | |
buffer |
Compatível | |
child_process |
Restrito | Uma exceção será gerada se houver uma tentativa de gerar um subprocesso. No entanto, "fork" é compatível para gerar subscripts. |
cluster |
Desativado | O método cluster.isMaster sempre retorna "true", e outros métodos não são implementados. Uma cópia de cada script do Node.js é implantada em cada processador de mensagens do Edge. |
crypto |
Compatível | |
dns |
Compatível | |
domain |
Compatível | |
dgram |
Restrito | Os aplicativos Node.js no ambiente do Apigee não poderão acessar serviços na Internet via UDP devido à nossa arquitetura de rede. |
events |
Compatível | |
fs |
Restrito | O acesso ao sistema de arquivos é restrito ao diretório em que o script foi iniciado: o diretório
/resources/node. Os scripts do Node.js podem ler e gravar arquivos nesse diretório, por exemplo, como uma área de trabalho temporária, mas não há garantias de quanto tempo os arquivos vão persistir. |
http |
Compatível | O host virtual e o caminho para solicitações recebidas são especificados no proxy de API, não pelo módulo HTTP. Consulte "Entender o suporte aos módulos http e https" para mais informações. |
https |
Compatível | A criação de um servidor "https" é idêntica à de um servidor "http". Consulte "Entender o suporte para os módulos http e https" para mais informações. |
module |
Compatível | |
net |
Restrito | As tentativas de detectar conexões TCP de entrada vão gerar uma exceção. |
path |
Compatível | |
module |
Compatível | |
process |
Parcialmente compatível | Não há suporte para funcionalidades de manipulação de ID do usuário, associação a grupos e diretório de trabalho. |
punycode |
Compatível | |
querystring |
Compatível | |
readline |
Desativado | Não há uma entrada padrão para scripts em execução no Apigee Edge. |
repl |
Desativado | Não há uma entrada padrão para scripts em execução no Apigee Edge. |
module |
Incluído | |
STDIO |
Compatível |
A saída e o erro padrão são encaminhados para um arquivo de registro na infraestrutura do Apigee Edge. Para ver esses registros, clique no botão Registros do Node.js na interface de gerenciamento do Apigee Edge para seu proxy de API. Não há uma entrada padrão para scripts em execução no Apigee Edge. No entanto, é possível transmitir argumentos usando o elemento ScriptTarget de TargetEndpoint. Consulte Configuração avançada de ScriptTarget para mais informações. |
stream |
Compatível | |
string_decoder |
Compatível | |
timers |
Incluído | |
tls |
Compatível | Os parâmetros do Transport Layer Security (TLS) funcionam basicamente da mesma forma que no Node.js normal. Consulte Usar o módulo TLS (SSL) do Node.js no Apigee Edge para mais detalhes. |
tty |
Desativado | Não há uma entrada padrão para scripts em execução no Apigee Edge. |
url |
Compatível | |
util |
Compatível | |
vm |
Compatível | |
zlib |
Compatível |
Outros módulos compatíveis
Esta seção lista módulos adicionais que não são compatíveis com o Node.js padrão, mas são compatíveis com o Trireme e o Trireme em execução no Apigee Edge. O Trireme é o contêiner Node.js de código aberto que é executado no Apigee Edge. Ele foi projetado para executar scripts do Node.js em uma máquina virtual Java (JVM). Todos esses módulos estão disponíveis no NPM.
| Módulo | Descrição |
|---|---|
| apigee-access | Permite que aplicativos Node.js em execução na plataforma Apigee Edge acessem funcionalidades específicas do Apigee. Você pode usar este módulo para: acessar e modificar variáveis de fluxo, recuperar dados do repositório seguro e usar serviços de cache, cota e OAuth do Edge. Consulte também Como usar o módulo apigee-access. |
| trireme-support | Permite que aplicativos Node.js aproveitem recursos específicos do Trireme. No momento, há apenas um recurso compatível: carregar módulos do Node.js criados em Java. Observação: o loadJars não é compatível com o Edge Cloud. |
| trireme-xslt | Apresenta uma abstração do processamento de XLST. Ele foi projetado especificamente para a plataforma Trireme, permitindo o processamento eficiente de XSLT quando aplicativos Node.js são executados em Java. |
| trireme-jdbc | Fornece acesso ao JDBC do Node.js. Observação: não compatível com o Edge Cloud. Para o Edge Private Cloud, é possível colocar arquivos JAR do JDPC no caminho de classe e usar este módulo. |
Suporte para módulos Node.js usados com frequência
Restrições em scripts do Node.js
No entanto, o Edge impõe algumas restrições aos scripts do Node.js, como as seguintes:
- Os aplicativos Node.js no ambiente do Apigee Edge não podem acessar serviços na Internet via UDP devido à arquitetura de rede de borda do Edge.
- O acesso ao sistema de arquivos é restrito ao diretório em que o script do Node.js foi iniciado: o diretório /resources/node. Os scripts do Node.js podem ler e gravar arquivos nesse diretório, por exemplo, como uma área de trabalho temporária, mas não há garantias de quanto tempo os arquivos vão persistir.
- As tentativas de detectar conexões TCP de entrada geram uma exceção.
- Não há suporte para funcionalidades de manipulação de ID do usuário, associação a grupos e diretório de trabalho.
- Para entrada padrão, você só pode transmitir argumentos usando o elemento ScriptTarget
de TargetEndpoint. Consulte Configuração avançada de
ScriptTarget para mais informações.
- Para a saída padrão, você só pode usar o botão "Registros do Node.js" na interface de gerenciamento do Edge
para seu proxy. Também é possível usar o comando "apigeetool getlogs". Para mais informações, consulte Como implantar um app Node.js independente.
- Módulos que dependem de código nativo não são compatíveis.
- Módulos que dependem de recursos do EcmaScript 6, como Promises e Generators, não são compatíveis.
- As flags de ambiente de execução do Node.js, como "harmony-proxies", não são compatíveis.
Como definir restrições de conexão por IP no Edge para nuvem privada
O Edge para nuvem privada pode restringir o acesso do código Node.js a endereços IP que começam com "10.", "192.168" e localhost. Se você tentar acessar esses endereços IP, vai receber um erro no formulário:
{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }
Para modificar essas restrições, defina a propriedade conf_nodejs_connect.ranges.denied no arquivo message-processors.properties de cada processador de mensagens. Por padrão, essa propriedade tem o valor:
- Edge 4.17.05 e versões anteriores: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
- Edge 4.17.09 e versões mais recentes: conf_nodejs_connect.ranges.denied= (ou seja, sem restrições)
Para definir essa propriedade:
- Abra o arquivo message-processor.properties em um editor. Se o arquivo não existir, crie-o:
> vi /<inst_root>/apigee/customer/application/message-processor.properties - Defina a propriedade como quiser. Por exemplo, para negar o acesso apenas ao localhost:
conf_nodejs_connect.ranges.denied=127.0.0.1/32 - Salve as alterações.
- Verifique se o arquivo de propriedades pertence ao usuário "apigee":
> chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties - Reinicie o processador de mensagens:
> /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Entender o suporte para os módulos http e https
Todos os aplicativos Node.js em execução no Apigee Edge precisam usar o módulo http ou
https para detectar solicitações recebidas. Se você implantar um script que
não detecta solicitações recebidas, ele simplesmente será executado e encerrado.
O método listen dos módulos http e https no
Node.js usa um número de porta como parâmetro. Exemplo:
svr.listen(process.env.PORT || 9000, function() { console.log('The server is running.'); });
Esse argumento "port" é obrigatório no Node.js, mas o Apigee Edge ignora esse parâmetro. Em vez disso, o proxy de API em que o script do Node.js é executado especifica o "host virtual" em que ele fica em espera, e o aplicativo Node.js usa esses mesmos hosts virtuais, assim como qualquer outro proxy do Apigee Edge.
Cada ambiente na Apigee tem pelo menos um host virtual. O host virtual define as configurações
HTTP para conexão com a organização da Apigee. Todos os proxies de API em um ambiente compartilham os mesmos hosts virtuais. Por padrão, dois hosts virtuais estão disponíveis para cada ambiente: default e secure. Para mais informações, consulte
Receber host virtual e Ciclo de vida de
desenvolvimento de API.
O comando apigeetool deploynodeapp gera um wrapper de proxy do Apigee Edge
em torno do aplicativo Node.js. Quando implantado, o aplicativo Node.js detecta atividade no host virtual padrão definido para o ambiente. O URL de um aplicativo Node.js sempre será
http://{org_name}-{env_name}.apigee.net.
Como processar as solicitações recebidas
Assim como outros aplicativos do Apigee Edge, se o aplicativo proxy estiver configurado para detectar o host virtual secure, ele vai aceitar solicitações recebidas usando HTTPS.
Como processar solicitações de saída
Além de receber tráfego de entrada, os aplicativos Node.js no Apigee Edge podem usar os módulos
http e https para fazer solicitações de saída como qualquer outro aplicativo
Node.js. Esses módulos funcionam como sempre no Node.js.
Entender o suporte para o módulo tls
O Apigee Edge é compatível com o módulo tls do Node.js.
Esse módulo usa o OpenSSL para fornecer Transport Layer Security (TLS) e/ou comunicação de fluxo criptografado Secure Socket Layer (SSL). É possível usar o módulo tls para criar conexões seguras com serviços de back-end de aplicativos Node.js em execução no Edge.
Para entender como o módulo tls funciona no Apigee Edge, é importante saber como os virtual hosts são usados no Apigee Edge. Cada ambiente na Apigee tem pelo menos um host virtual. O host virtual define as configurações HTTP para conexão com a
organização da Apigee. Todos os proxies de API em um ambiente compartilham os mesmos hosts virtuais. Por padrão,
dois hosts virtuais estão disponíveis para cada ambiente: default e
secure. Para mais informações sobre hosts virtuais, consulte
Receber host virtual e Ciclo de vida de
desenvolvimento de API.
Agora, vamos ver como o Apigee Edge processa a comunicação TLS (SSL) para solicitações de entrada e saída em aplicativos Node.js:
Como processar as solicitações recebidas
Dependendo de como os hosts virtuais estão configurados para sua organização, o Edge oferece estas opções:
- Se o proxy de API estiver configurado para escutar no host virtual
default, ele aceitará solicitações via HTTP. - Se o proxy de API estiver configurado para detectar o host virtual
secure, ele aceitará solicitações por HTTPS. O URL vai estar no domínioapigee.net, e um certificado SSL curinga para*.apigee.netserá usado. Enquanto os apps fizerem solicitações ao domínioapigee.net, o certificado SSL será validado normalmente.
Como processar solicitações de saída
Você pode fazer solicitações de saída com o módulo tls da mesma forma que faria normalmente no Node.js. Basicamente, você precisa adicionar chaves e certificados do lado do cliente
(arquivos .pem) ao diretório resources/node e carregá-los no seu
script. Para informações sobre como usar o módulo tls e os métodos dele, consulte a
documentação do módulo tls do Node.js.
Configuração avançada do ScriptTarget
<TargetEndpoint name="default"> <ScriptTarget> <ResourceURL>node://hello.js</ResourceURL> <EnvironmentVariables> <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> </EnvironmentVariables> <Arguments> <Argument>ARG</Argument> </Arguments> </ScriptTarget> </TargetEndpoint>