Conectores SaaS nativos do Glue: contra AppFlow, zero-ETL e código próprio
cerca de 6 min · áudio gerado ao tocar
Em 9 de novembro de 2026 a AWS anunciou 100 novos conectores nativos no AWS Glue para aplicações SaaS e APIs REST: pagamentos (Adyen, Square, Checkout.com), contabilidade (Xero, QuickBooks), billing (Chargebee, Recurly, Zuora), operação (PagerDuty, Sentry, Jenkins, Vercel) e até dados de uso e custo da Anthropic. A conexão é criada uma vez no Glue Data Catalog e reaproveitada por qualquer job, com o mesmo modelo de permissões do Glue, no Glue 5.0 ou superior e em todas as regiões comerciais. Já escrevi e mantive extratores de API de adquirente à mão. Eles nunca quebraram no deploy. Quebraram no dia em que o fornecedor mudou a paginação e ninguém percebeu por uma semana. Por isso este texto não pergunta se o conector funciona. Pergunta qual dos quatro caminhos disponíveis hoje custa menos para manter.
A escolha real: quatro caminhos para tirar dado de um SaaS
Quando um time de finanças pede "as transações do Adyen no lake até amanhã", hoje existem quatro respostas na AWS.
Conector nativo do Glue: um job Spark no Glue 5.0 lê a entidade pelo connection_type do SaaS, com ENTITY_NAME, SELECTED_FIELDS, FILTER_PREDICATE em Spark SQL e particionamento por PARTITION_FIELD, LOWER_BOUND, UPPER_BOUND e NUM_PARTITIONS. O segredo fica no Secrets Manager, um por conexão.
Zero-ETL do Glue: replicação gerenciada, sem job, para Redshift, S3 ou S3 Tables pela arquitetura de lakehouse do SageMaker. O problema é a cobertura: na documentação atual, as fontes SaaS são Salesforce, Salesforce Marketing Cloud Account Engagement, SAP OData, ServiceNow, Zendesk, Zoho CRM, Facebook Ads e Instagram Ads. Nenhum dos conectores de pagamento do anúncio está nessa lista.
Amazon AppFlow: fluxo gerenciado cobrado por execução e por GB processado, bom para cópia agendada sem transformação.
Extrator próprio: Lambda ou Step Functions chamando a API, gravando em S3. Controle total, e dívida total.
O anúncio muda o equilíbrio porque o primeiro caminho passou a cobrir a cauda longa que antes só o quarto cobria. Para fontes fora dos 100, ainda existe o conector REST do Glue (RegisterConnectionType), com OAuth2 client credentials, authorization code, JWT, basic ou autenticação customizada, e paginação por cursor ou offset. Ou seja, mesmo o caso "meu SaaS não está na lista" tem saída declarativa antes de partir para código.
Os quatro caminhos lado a lado
| Critério | Conector nativo Glue | Zero-ETL Glue | AppFlow | Extrator próprio |
|---|---|---|---|---|
| Cobertura SaaS | 100 novos + anteriores; REST para o resto | 8 aplicações SaaS hoje | Catálogo próprio de conectores | Qualquer API |
| Transformação na ingestão | Spark completo, QUERY e FILTER_PREDICATE | Nenhuma, replica | Mapeamento e filtro simples | O que você escrever |
| Modelo de custo | US$ 0,44/DPU-hora (Flex: US$ 0,29) | Por volume ingerido, mínimo 1 MB por requisição | US$ 0,001/execução + US$ 0,02/GB | Centavos de Lambda + horas de engenharia |
| Incremental | Você controla a marca d'água via filtro | Gerenciado | Gerenciado onde o conector suporta | Você escreve e testa |
| Quem absorve mudança de API | AWS (conector); você (contrato do schema) | AWS | AWS | Seu plantão |
O incremental é seu, e é onde o pagamento quebra
A documentação do conector Stripe deixa claro um detalhe que vale para boa parte da cauda longa: só existe particionamento por campo. Não há particionamento por registro (o conector não tem como obter a contagem total) nem por ID, porque a chave primária é string. Na prática, isso significa que o paralelismo e o incremental dependem de um campo de tempo que você escolhe, e a responsabilidade pela marca d'água é sua.
O desenho que uso é simples. Uma tabela DynamoDB com partition key source#entity guarda o último created processado. O job lê esse valor, monta FILTER_PREDICATE com uma janela de sobreposição de 15 a 30 minutos para trás, define LOWER_BOUND e UPPER_BOUND sobre o mesmo campo e grava num staging em Iceberg. O MERGE pela chave natural da transação (o ID do pagamento no adquirente) torna a reexecução idempotente. Só depois do commit o job atualiza a marca d'água, com ConditionExpression sobre o valor anterior para evitar duas execuções concorrentes avançando o ponteiro.
A sobreposição existe porque API de pagamento não é append-only. Estorno, chargeback e mudança de status alteram registro antigo, e um campo updated nem sempre está disponível como filtro. Sem janela, você perde a atualização. Sem MERGE, você duplica a transação. Os dois erros aparecem do mesmo jeito: a conciliação com o extrato bancário não fecha, e alguém descobre no fechamento do mês, não no dia.
Ingestão de SaaS de pagamento com conector nativo e marca d'água própria
O conector resolve autenticação e paginação; a marca d'água, o MERGE idempotente e a publicação para o Redshift continuam sendo seus. A linha tracejada é a atualização da marca d'água, que só acontece depois do commit no Iceberg. Simplifiquei: um SaaS, uma entidade, sem Lake Formation no desenho.
- Adyen API · REST, paginated
- Secrets Manager · one secret per connection
- Glue connection · Data Catalog
- Watermark · DynamoDB source#entity
- Glue 5.0 job · FILTER_PREDICATE
- S3 Iceberg · MERGE by payment ID
- Redshift · reconciliation
Custo: o DPU é a parte barata
Faço a conta para uma fonte de pagamento puxada de hora em hora. Um job com 2 workers G.1X (2 DPU) rodando 10 minutos consome cerca de 0,33 DPU-hora: uns US$ 0,15 por execução a US$ 0,44, ou perto de US$ 105 por mês com 24 execuções diárias. Em Flex, a US$ 0,29, cai para perto de US$ 70, ao custo de início não garantido. O mesmo volume no AppFlow, com 720 execuções e 1 GB por execução, fica em torno de US$ 15: US$ 0,72 de execuções e US$ 14,40 de dados.
Olhando só a fatura, o AppFlow ganha. Mas a fatura não é o custo. O AppFlow cobra execução que não encontrou dado novo e cobra como sucesso a execução que falhou por configuração errada, e ele não transforma: alguém ainda precisa deduplicar, tipar e fazer o MERGE depois. Se essa etapa já é um job Glue, você paga o DPU de qualquer forma e ganha uma segunda ferramenta para operar.
O extrator próprio tem a fatura mais baixa de todas, centavos de Lambda. O custo dele aparece em outro lugar: rotação de credencial, mudança de versão da API, rate limit novo, campo renomeado. Em plataformas que mantive, um extrator de adquirente consumia algo como dois a três dias de engenharia por trimestre só para continuar funcionando, e esse número nunca entrava no business case.
Regra que uso: se a frequência é horária ou menor, comece por Flex e só mova para padrão quando o SLO de frescor exigir.
Segurança e governança: o que muda numa plataforma regulada
O ganho de governança mais concreto é a conexão como recurso do Data Catalog. Antes, cada extrator tinha seu próprio jeito de guardar chave de API, quase sempre uma variável de ambiente que alguém copiou entre contas. Agora existe um segredo por conexão no Secrets Manager, e o acesso passa por IAM.
Três ajustes que faço antes de liberar em produção:
Escopo do role: o exemplo da documentação concede secretsmanager:GetSecretValue, PutSecretValue e as ações de ENI em "Resource": "*". Em ambiente auditado por BACEN 4.893 ou PCI-DSS, eu restrinjo o recurso ao ARN do segredo da conexão e uso aws:ResourceTag/data-domain para que o job de finanças não leia o segredo do Gusto, que tem dado de folha.
Minimização na origem: SELECTED_FIELDS não é só otimização. Se o relatório de transações do adquirente traz dados de titular que a análise não precisa, não traga. O que não entra no lake não entra no escopo da auditoria.
Rede: a conexão aceita opções de rede próprias. Rodar o job em subnet privada com saída por NAT de IP fixo facilita a allowlist do lado do SaaS, e alguns adquirentes exigem isso.
Por fim, observabilidade: alarme em glue.driver.aggregate.numCompletedTasks igual a zero não basta. O sinal que importa é volume ingerido contra a média móvel da mesma hora, porque o modo de falha típico não é erro, é zero linha com status de sucesso.
Matriz de decisão
Conector nativo Glue
- Cobre a cauda longa de pagamento, billing e operação
- Conexão reaproveitável, segredo por conexão, IAM do Glue
- Transformação e MERGE no mesmo job
- Marca d'água e janela de sobreposição são suas
- Particionamento limitado por campo em vários conectores
- DPU caro para volume pequeno em alta frequência
Padrão para fontes de finanças fora do zero-ETL
Zero-ETL Glue
- Sem job para operar, incremental gerenciado
- Destino em Redshift, S3 ou S3 Tables
- Só 8 fontes SaaS, nenhuma de pagamento
- Sem transformação na entrada
Use sempre que a fonte estiver na lista
AppFlow
- Fatura mais baixa para cópia agendada
- Nenhum código
- Cobra execução vazia e falha de configuração
- Exige uma segunda etapa para deduplicar
Bom para marketing e CRM sem SLO de conciliação
Extrator próprio
- Controle total de rate limit e webhook
- Fatura de centavos
- Todo breaking change da API cai no seu plantão
- Segredo e retry reinventados por fonte
Só para near real-time por webhook ou API exótica
O conector tira a paginação, não o contrato
O conector nativo transfere para a AWS a parte que mais quebrava: autenticação, paginação e mudança de endpoint. O que continua seu é o contrato de dados. Se o Adyen renomeia um campo, o job não falha, ele grava nulo. Um check de Glue Data Quality sobre nulidade e volume na camada de staging é o que transforma essa falha silenciosa em alarme.
Eu começaria inventariando os extratores próprios que já existem e mapeando cada um contra a lista de 100. Os que aparecem na lista viram job Glue com marca d'água em DynamoDB e MERGE em Iceberg, e o código antigo é apagado no mesmo sprint, não deixado como fallback. A lição que paguei caro: extrator caseiro de adquirente nunca é aposentado por decisão, é aposentado por incidente. Fazer a troca enquanto ele ainda funciona sai muito mais barato do que fazer durante o fechamento do mês.
Recomendação
Use o zero-ETL quando a fonte estiver entre as 8 suportadas e você não precisar transformar na entrada. Use o conector nativo do Glue quando a fonte for de pagamento, billing ou contabilidade, houver conciliação envolvida e você puder assumir a marca d'água e o MERGE idempotente: hoje é o padrão que eu adotaria para Adyen, Square, Xero e Chargebee. Use AppFlow para cópia agendada de marketing e CRM, onde uma linha duplicada não fecha balanço errado. Mantenha extrator próprio só para webhook em near real-time ou API que nem o conector REST cobre. Em todos os casos, o alarme que importa é volume contra a média, não status do job.
Referências
Continue lendo
Deep dives de arquitetura, AWS, IA e mercado: direto no seu email. Grátis.
Sem spam · cancele quando quiser
Pergunte ao Fernando sobre isto
Uma resposta focada sobre este artigo, do meu assistente de IA, baseada no meu trabalho.
Participe da conversa
Entre para comentar
Confirme seu e-mail para participar, você também recebe a newsletter. Sem senha.