Saída de porta flexível
Saiba como configurar e usar saída de porta flexível para suportar conexões externas do AEM as a Cloud Service com serviços externos.
O que é saída de porta flexível?
Saída de porta flexível permite que regras específicas e personalizadas de encaminhamento de porta sejam conectadas ao AEM as a Cloud Service, permitindo que conexões do AEM a serviços externos sejam feitas.
Um Programa Cloud Manager só pode ter um tipo de infraestrutura de rede único. Certifique-se de que a saída de porta flexível seja o tipo mais apropriado de infraestrutura de rede para o AEM as a Cloud Service antes de executar os comandos a seguir.
Pré-requisitos
Os itens a seguir são necessários ao definir ou configurar a saída de porta flexível usando APIs do Cloud Manager:
-
Projeto do Adobe Developer Console com API do Cloud Manager habilitada e permissões de Proprietário da empresa do Cloud Manager
-
Acesso a credenciais de autenticação da API do Cloud Manager
- ID da organização (também conhecida como ID da organização IMS)
- ID do cliente (também conhecida como Chave de API)
- Token de acesso (também conhecido como Token do portador)
-
A ID do programa Cloud Manager
-
As IDs de ambiente do Cloud Manager
Para obter mais detalhes revise como instalar, configurar e obter credenciais da API do Cloud Manager, para usá-las para fazer uma chamada de API do Cloud Manager.
Este tutorial usa curl
para fazer as configurações da API do Cloud Manager. Os comandos curl
fornecidos pressupõem uma sintaxe Linux/macOS. Se estiver usando o prompt de comando do Windows, substitua o caractere de quebra de linha \
por ^
.
Habilitar saída de porta flexível por programa
Comece ativando a saída de porta flexível no AEM as a Cloud Service.
Saída de porta flexível pode ser ativada usando o Cloud Manager. As etapas a seguir descrevem como ativar a saída de porta flexível no AEM as a Cloud Service usando o Cloud Manager.
-
Faça logon no Adobe Experience Manager Cloud Manager como Proprietário da empresa do Cloud Manager.
-
Navegue até o Programa desejado.
-
No menu esquerdo, navegue até Serviços > Infraestrutura de Rede.
-
Selecione o botão Adicionar infraestrutura de rede.
-
Na caixa de diálogo Adicionar infraestrutura de rede, selecione a opção Saída flexível da porta e selecione a Região para criar o endereço IP de saída dedicado.
-
Selecione Salvar para confirmar a adição da saída de porta flexível.
-
Aguarde a infraestrutura de rede ser criada e marcada como Pronta. Esse processo pode levar até 1 hora.
Com a saída de porta flexível criada, agora é possível configurar as regras de encaminhamento de porta usando as APIs do Cloud Manager, conforme descrito abaixo.
A saída flexível da porta pode ser ativada usando as APIs do Cloud Manager. As etapas a seguir descrevem como ativar a saída de porta flexível no AEM as a Cloud Service usando a API do Cloud Manager.
-
Primeiro, determine a região em que a Rede avançada está configurada usando a operação listRegions da API do Cloud Manager. O
region name
é necessário para fazer chamadas de API do Cloud Manager subsequentes. Normalmente, a região em que o ambiente de Produção reside é usada.Encontre a região do seu ambiente do AEM as a Cloud Service em Cloud Manager nos detalhes do ambiente. O nome da região exibido no Cloud Manager pode ser mapeado para o código de região usado na API do Cloud Manager.
solicitação HTTP de listRegions
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/regions \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json'
-
Habilite a saída de porta flexível para um Programa Cloud Manager usando a operação createNetworkInfrastructure da API do Cloud Manager. Use o código
region
apropriado obtido da operaçãolistRegions
da API do Cloud Manager.solicitação HTTP createNetworkInfrastructure
code language-shell $ curl -X POST https://cloudmanager.adobe.io/api/program/{programId}/networkInfrastructures \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "kind": "flexiblePortEgress", "region": "va7" }'
Aguarde 15 minutos para que o programa Cloud Manager provisione a infraestrutura de rede.
-
Verifique se o ambiente concluiu a configuração de saída de porta flexível usando a operação getNetworkInfrastructure da API do Cloud Manager, usando a
id
retornada da solicitação HTTPcreateNetworkInfrastructure
na etapa anterior.solicitação HTTP getNetworkInfrastructure
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/networkInfrastructure/{networkInfrastructureId} \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json'
Verifique se a resposta HTTP contém um status de ready. Se ainda não estiver pronto, verifique novamente o status a cada poucos minutos.
Com a saída de porta flexível criada, agora é possível configurar as regras de encaminhamento de porta usando as APIs do Cloud Manager, conforme descrito abaixo.
Configuração de proxies de saída de porta flexíveis por ambiente
-
Habilite e configure a configuração de saída de porta flexível em cada ambiente do AEM as a Cloud Service usando a operação enableEnvironmentAdvancedNetworkingConfiguration da API do Cloud Manager.
Solicitação HTTP enableEnvironmentAdvancedNetworkingConfiguration
code language-shell $ curl -X PUT https://cloudmanager.adobe.io/api/program/{programId}/environment/{environmentId}/advancedNetworking \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d @./flexible-port-egress.json
Defina os parâmetros JSON em um
flexible-port-egress.json
e fornecido para curl via... -d @./flexible-port-egress.json
.Baixe o exemplo lex-port-egress.json. Este arquivo é apenas um exemplo. Configure seu arquivo conforme necessário com base nos campos opcionais/obrigatórios documentados em enableEnvironmentAdvancedNetworkingConfiguration.
code language-json { "portForwards": [ { "name": "mysql.example.com", "portDest": 3306, "portOrig": 30001 }, { "name": "smtp.sendgrid.com", "portDest": 465, "portOrig": 30002 } ] }
Para cada mapeamento
portForwards
, a rede avançada define a seguinte regra de encaminhamento:table 0-row-5 1-row-5 Host do proxy Porta do proxy Host externo Porta externa AEM_PROXY_HOST
portForwards.portOrig
→ portForwards.name
portForwards.portDest
Se sua implantação do AEM only exigir conexões HTTP/HTTPS (porta 80/443) com um serviço externo, deixe a matriz
portForwards
vazia, pois essas regras são necessárias somente para solicitações não HTTP/HTTPS. -
Para cada ambiente, valide se as regras de saída estão em vigor usando a operação getEnvironmentAdvancedNetworkingConfiguration da API do Cloud Manager.
Solicitação HTTP getEnvironmentAdvancedNetworkingConfiguration
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/environment/{environmentId}/advancedNetworking \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Content-Type: application/json'
-
Configurações flexíveis de saída de porta podem ser atualizadas usando a operação enableEnvironmentAdvancedNetworkingConfiguration da API do Cloud Manager. Lembre-se de que
enableEnvironmentAdvancedNetworkingConfiguration
é uma operaçãoPUT
, portanto todas as regras devem ser fornecidas com cada invocação desta operação. -
Agora, você pode usar a configuração flexível de saída de porta em seu código e configuração personalizados do AEM.
Conexão com serviços externos por meio de saída de porta flexível
Com o proxy de saída de porta flexível ativado, o código e a configuração do AEM podem usá-los para fazer chamadas para serviços externos. Há duas opções de chamadas externas que o AEM trata de forma diferente:
- Chamadas HTTP/HTTPS para serviços externos em portas fora do padrão
- Inclui chamadas HTTP/HTTPS feitas para serviços executados em portas diferentes das portas padrão 80 ou 443.
- chamadas não HTTP/HTTPS para serviços externos
- Inclui chamadas não HTTP, como conexões com servidores de email, bancos de dados SQL ou serviços que são executados em outros protocolos não HTTP/HTTPS.
As solicitações HTTP/HTTPS do AEM em portas padrão (80/443) são permitidas por padrão e não precisam de configuração ou considerações extras.
HTTP/HTTPS em portas fora do padrão
Ao criar conexões HTTP/HTTPS com portas fora do padrão (não-80/443) do AEM, as conexões devem ser feitas por meio de hosts e portas especiais, fornecidas por meio de espaços reservados.
O AEM fornece dois conjuntos de variáveis especiais do sistema Java™ que são mapeadas para proxies HTTP/HTTPS do AEM.
AEM_PROXY_HOST
System.getenv().getOrDefault("AEM_PROXY_HOST", "proxy.tunnel")
$[env:AEM_PROXY_HOST;default=proxy.tunnel]
AEM_HTTP_PROXY_PORT
3128
)System.getenv().getOrDefault("AEM_HTTP_PROXY_PORT", 3128)
$[env:AEM_HTTP_PROXY_PORT;default=3128]
AEM_HTTPS_PROXY_PORT
3128
)System.getenv().getOrDefault("AEM_HTTPS_PROXY_PORT", 3128)
$[env:AEM_HTTPS_PROXY_PORT;default=3128]
Ao fazer chamadas HTTP/HTTPS para serviços externos em portas fora do padrão, nenhum portForwards
correspondente deve ser definido usando a operação enableEnvironmentAdvancedNetworkingConfiguration
da API do Cloud Manager, já que as "regras" de encaminhamento de porta são definidas "no código".
Exemplos de código
Conexões não HTTP/HTTPS com serviços externos
Ao criar conexões não HTTP/HTTPS (por exemplo, SQL, SMTP e assim por diante) do AEM, a conexão deve ser feita por meio de um nome de host especial fornecido pelo AEM.
AEM_PROXY_HOST
System.getenv().getOrDefault("AEM_PROXY_HOST", "proxy.tunnel")
$[env:AEM_PROXY_HOST;default=proxy.tunnel]
As conexões com serviços externos são então chamadas por meio do AEM_PROXY_HOST
e da porta mapeada (portForwards.portOrig
), que o AEM encaminha para o nome de host externo mapeado (portForwards.name
) e a porta (portForwards.portDest
).
AEM_PROXY_HOST
portForwards.portOrig
portForwards.name
portForwards.portDest