Pré-requisitos
O que você precisa ter antes de conectar.
- Acesso ao SAP BTP Cockpit da subaccount do cliente
- Uma instância SAP HANA Cloud criada no ambiente do cliente (plano
hanaou equivalente contratado) - Modo padrão: usuário técnico HANA com senha e privilégios combinados para o schema do YNKX
- Modo enterprise opcional: service key JSON + JWT/OAuth configurado no HANA com identity provider e user mapping
Descubra seu IP público
O HANA só aceita conexões de IPs liberados. Anote o seu.
curl -s https://api.ipify.org
Guarde no formato SEU_IP/32. Em cliente corporativo, use o IP público/NAT da rede ou do servidor onde o backend YNKX roda.
Confirme o "SAP HANA Cloud Tools"
É essa assinatura que libera o HANA Cloud Central — o painel onde se liga a instância e libera IP.
- BTP Cockpit → seu subaccount → Instances and Subscriptions
- Botão Create → Subscription
- Service:
SAP HANA Cloud· Plan:tools - Clique Create → status vira Subscribed
tools abre o painel; hana é o banco; hana-cloud-connection é só conexão database/data lake. Não use esse último como banco do YNKX. Plano free/trial é só para desenvolvimento ou homologação, não como referência comercial do manual.
Atribua a role de administrador (e relogue)
Só assinar o Tools não basta — a SAP manda atribuir a Role Collection ao seu usuário. Sem isso, o painel dá "Not authorized".
- BTP Cockpit → subaccount do cliente → Security → Users
- Clique no usuário que vai acessar o YNKX/HANA Central
- No painel da direita, em Role Collection, clique ... → Assign Role Collection
- Selecione SAP HANA Cloud Administrator
- Opcional, mas útil: selecione também SAP HANA Cloud Viewer e SAP HANA Cloud Security Administrator
- Clique Assign Role Collection para concluir
- Logout e login completo no BTP — a permissão só ativa no próximo login
Abra o SAP HANA Cloud Central
Enfim o lugar certo pra gerenciar o banco.
- Aba Subscriptions → clique em SAP HANA Cloud (Tools)
- Botão Go to Application (canto superior direito)
- Abre o painel com a instância SAP HANA Cloud do cliente e um status colorido
Opcional: habilite Cloud Foundry para o botão "Iniciar instância" do YNKX
A conexão SQL não depende disso. O SaaS usa o CF CLI local apenas para mostrar org/space e acionar Start pelo app quando o usuário quiser.
Use o endpoint exibido em Subaccount → Overview → Cloud Foundry Environment.
https://api.cf.SUA_REGIAO.hana.ondemand.com
Não é erro do HANA. Faça login no endpoint certo e mire a org/space:
cf target -o SUA_ORG -s SEU_SPACE
cf logout
cf api https://api.cf.SUA_REGIAO.hana.ondemand.com
cf login --sso
# Abra o link /passcode, escolha "default identity provider",
# copie o Temporary Authentication Code e cole no terminal.
cf target -o SUA_ORG -s SEU_SPACE
cf service SUA_INSTANCIA_HANA
Se der Invalid passcode, gere outro no link. O código expira rápido e só funciona uma vez.
Ligue a instância
A instância pode estar parada por política operacional, janela de manutenção ou economia de custo. Se estiver parada, ligue.
- Bolinha cinza/Stopped → menu ⋯ → Start
- Status Starting → não configure ainda; aguarde e atualize até virar Running
- Bolinha verde/Running → já está no ar, siga adiante
-10709 "Socket closed by peer". Não é bug do seu código — é o HANA te derrubando na porta.
Libere seu IP (allowlist)
Autoriza sua máquina a falar com o banco.
- Espere a instância estar Running; em Starting, a SAP bloqueia parte das abas
- Na instância → Manage Configuration
- Aba Connections ou Allowed Connections
- Add → cole
SEU_IP/32→ Save
Pra testar rápido dá pra usar "Allow all IP addresses", mas reverta depois por segurança.
Configure o backend (.env)
Aponte o YNKX pra instância do cliente. Para onboarding comercial, use usuário técnico HANA. Para ambientes enterprise com SSO/mapeamento pronto, adicione JWT/OAuth.
# Modo padrão SaaS: usuário técnico HANA
HANA_HOST=xxxxx.hna1.prod-us10.hanacloud.ondemand.com
HANA_PORT=443
HANA_USER=USUARIO_TECNICO
HANA_PASSWORD=SENHA_FORNECIDA_PELO_CLIENTE
HANA_SCHEMA=YNKX_HANA
# Opcional enterprise: JWT/OAuth via service key
HANA_SERVICE_KEY=/caminho/cliente-hana-key.json
HANA_CF_INSTANCE=NOME_DA_INSTANCIA_HANA
No YNKX dá pra fazer isso pela própria tela Configuração SAP HANA: preencha host/usuário/senha/schema e salve. Se o cliente optar por JWT/OAuth, registre também a service key.
Teste a conexão real
O momento da verdade.
# Melhor caminho no app:
# Configuração SAP HANA -> Auto resolver
# Teste por terminal usando usuário/senha:
cd backend && ../.venv/bin/python -c "import config_service as cs; print(cs.test_connection())"
# Teste enterprise opcional usando JWT/OAuth:
cd backend && ../.venv/bin/python -c "import config_service as cs; print(cs.test_connection_jwt())"
{'ok': True, 'current_schema': 'YNKX_HANA'}
Tabela rápida: erro apareceu, faz isso
| Sintoma | Causa provável | Correção |
|---|---|---|
| Not authorized | Role Collection faltando ou sessão antiga. | Atribua SAP HANA Cloud Administrator em Security → Users e faça logout/login completo. |
| No org/space targeted | CF logado, mas sem target. | Use o endpoint correto e rode cf target -o ORG -s SPACE. |
| Invalid passcode | Código expirou ou já foi usado. | Abra novamente o link /passcode, use default identity provider e cole o código imediatamente no terminal. |
| Starting | Banco ligando. | Espere virar Running. Durante Starting, Connections/Configuration podem ficar indisponíveis. |
| Socket closed by peer | Instância parada ou IP bloqueado. | Start na instância, aguarde Running e adicione o IP público em Allowed Connections. |
| Usuário/senha conectou | Onboarding comercial OK. | Salve a configuração e siga para migração das tabelas. |
| JWT não habilitado/mapeado | Service key existe, mas o banco não aceita OAuth/JWT como login SQL. | Use usuário técnico ou configure identity provider e user mapping no HANA. |
| JWT aceito, HANA não abriu | Key e OAuth estão OK. | Não mexa na key. Foque em Running + allowlist. |
Prepare as tabelas do cliente no HANA
Cria/atualiza as tabelas do YNKX no schema configurado do cliente. Use seed apenas em desenvolvimento/homologação.
cd backend
../.venv/bin/python -m db.migrate up # cria/atualiza as tabelas YNKX
../.venv/bin/python -m db.seed --reset # opcional: dados demo/homologacao
Pronto — o YNKX agora gerencia dados de um cliente real dentro do HANA.
Conexão concluída!
Se o teste retornou ok: True, o SAP HANA Cloud do cliente está ligado ao YNKX.
Se o cliente trocar IP/NAT, mover o backend ou parar a instância, repita Start + allowlist.