Entenda na prática como é possível utilizar serviços 100% gerenciados pela AWS para hospedar sua solução SaaS, multi-tenant e whitelabel domain (com códigos de automação em Python).

Antes de iniciar o texto, gostaria de afirmar que o termo “whitelabel domain” não me agrada muito, mas infelizmente não achei outra definição. Fico aberto a sugestões :).

SaaS

Este artigo possui alguns tópicos nas primeiras seções pois algumas definições necessitam ser contextualizadas, bem como desafios e motivações. Então caso já entenda sobre o assunto e quer apenas saber como fazer isso na AWS, sugiro que siga direto para a seção “Configurando a solução na AWS”.
Vamos lá!
Para contextualizar o que vamos debater, deixo aqui a definição do que é um Software as a Service (SaaS):
Software como serviço, do inglês Software as a service (SaaS), é uma forma de distribuição e comercialização de software. No modelo SaaS, o fornecedor do software se responsabiliza por toda a estrutura necessária à disponibilização do sistema (servidores, conectividade, cuidados com segurança da informação), e o cliente utiliza o software via internet, pagando um valor pelo serviço.[1][2]
Fonte: Wikipédia

Após essa definição, podemos focar nos principais desafios das empresas que produzem “Software as a Service” (SaaS) enfrentam e dentre eles podemos elencar:
• Entregar a melhor experiência aos clientes
• Possibilitar customização do software
• Um rápido delivery de atualizações e melhorias
• Conseguir o menor custo possível para o cliente.
Como seria esperado, as empresas que contratam um SaaS buscam fazer algumas customizações, como configurar seu próprio domínio para uso, por exemplo.

Cenário

Imagine o seguinte cenário: A Startup “Leandro Cloud” vai produzir um ERP no modelo SaaS cuja URL é “https://erp.leandro.cloud”. O software ficou pronto e diversos clientes começam a comprar uma assinatura mensal desse software, dentre eles a RHCompany. Só que a RHCompany possui uma exigência em que este software seja acessado via “https://erp.rhcompany.com.br”, isopor conta de uma regra de compliance da empresa. E agora, o que a empresa Leandro Cloud precisa fazer para isso? Abaixo temos algumas possibilidades:

• Implementar uma solução utilizando Let’s Encrypt nos servidores.
• Se a empresa utiliza Kubernetes, por exemplo, pode resolver isso com TLS termination em um ingress controller.
• Pode solicitar a RHCompany que faça o TLS termination nos seus load balancers e apenas configure o DNS.
• Pode disponibilizar o acesso ao sistema sem HTTPS.
• Pode enviar o código do sistema para a empresa RHCompany para que ela execute nos servidores dela.

Todas as soluções acima são possíveis e a empresa Leandro Cloud não precisaria utilizar nenhum serviço da AWS, mas todos eles trazem um ou mais problemas, tais como: complexidade de implantação, fuga do conceito de SaaS, segurança, custo recorrente de manutenção, desvio do foco do negócio, mudanças complexas no cliente, equipe altamente especializada, entre outros. E é aí onde a Leandro Cloud pode utilizar soluções 100% AWS para resolver este problema com baixo custo, baixa necessidade de manutenção e totalmente automatizado.
Neste momento talvez você esteja se perguntando: não basta apenas a RHCompany apontar o DNS para o endereço que a Leandro Cloud disponibilizar? A resposta é: Sim e não.

Se falarmos de customização de URL, sim, basta apenas uma entrada no DNS e a customização “está pronta”, mas e o HTTPS? Como resolver isso? O que vai acontecer quando alguém acessar “https://erp.rhcompany.com.br”? E aqui temos a parte da resposta que é não e vamos entender o porquê.

Um breve resumo sobre HTTPS (SSL/TLS)

Segundo a Wikipédia, a definição de HTTPS é a seguinte:
HTTPS (Hyper Text Transfer Protocol Secure — protocolo de transferência de hipertexto seguro) é uma implementação do protocolo HTTP sobre uma camada adicional de segurança que utiliza o protocolo SSL/TLS. Essa camada adicional permite que os dados sejam transmitidos por meio de uma conexão criptografada e que se verifique a autenticidade do servidor e do cliente por meio de certificados digitais. A porta TCP usada por norma para o protocolo HTTPS é a 443.
E é justamente pelo motivo de termos uma conexão criptografada que verifica autenticidade do servidor e do cliente, que o HTTPS exige que um certificado digital seja configurado para isso, pois é ele que vai garantir esta autenticidade.

Um certificado digital é um documento eletrônico, geralmente configurado no servidor que o sistema está executando. Ele vai garantir que aquele servidor, o qual está hospedando o site “https://erp.rhcompany.com.br” tem autorização de utilizar aquele nome, uma vez que todos os trâmites prévios de validação foram realizados.

Se este certificado não for emitido pela RHCompany e configurado nos servidores da Leandro Cloud, então o site “https://erp.rhcompany.com.br” vai informar que aquele certificado não é seguro, assim trazendo diversos problemas de segurança. Por este motivo, a Leandro Cloud precisa pedir a RHCompany que autorize utilizar um certificado com o nome “erp.rhcompany.com.br” em seus servidores.

NOTA: Ao ler esse artigo, é possível notar que na barra de endereço existe um cadeado, que ao clicar em “Informações do Certificado” encontramos a informação do certificado que garante que ele é valido para o domínio medium.com.


Certificado valido emitido para medium.com

Configurando a solução na AWS

Agora que entendemos os desafios e motivações que uma solução como essa exige, vamos compreender como ao utilizar os serviços 100% gerenciados, você pode ter seu SaaS, multi-tenant e whitelabel domain na AWS compartilhando os mesmos recursos de back-end e infraestrutura, tais como: EC2, Lambda, ECS, EKS, AppRunner, entre outros.

Neste artigo vamos abordar um SaaS utilizando as seguintes tecnologias na AWS:
• API Gateway para configurar as rotas do backend
• Lambda para executar códigos Python de backend
• ACM para criar os certificados
• S3 para hospedar meu site estático em qualquer framework JavaScript
• Cloudfront para distribuir o tráfego otimizado e suportar terminação SSL


Arquitetura da solução

Achei um projeto que tem um código que possibilita se adaptar a essa necessidade, então caso queira automatizar, utilize o código do seguinte repositório.

Lambda

A função Lambda não é um ponto extremamente relevante neste processo, mas eu vou mostrar como ela foi criada:

A função acima testa o domínio que está acessando e define as variáveis de retorno. Absolutamente existem outras dezenas formas de programar isso, mas é apenas um exemplo.

Você pode ser back-end em EC2/ECS/EKS/AppRunner e vai funcionar do mesmo jeito. Outro ponto que precisamos frisar é que seu back-end vai ter regras de negócios complexas, CORS, chaves de verificação e coisas do tipo, mas a intenção aqui é demonstrar a solução funcionando.

Essa função Lambda é única e vai servir para atender todo o ambiente multi-tenant.

API Gateway

Foi criada uma API Rest no API Gateway com apenas uma rota “/” com GET e utilizando a Lambda acima como PROXY INTEGRATION.

ATENÇÃO: lembre-se de habilitar o CORS.

API Gateway

Essa API Gateway é única e vai servir para atender todo o ambiente multi-tenant.

S3

Foi criado um bucket chamado “medium-saas-multitenant” para hospedar nosso front-end estático. Também foi criada uma página HTML simples com apenas uma chamada para a API Gateway criada anteriormente e que vai consultar o back-end. Essa página vai simular a index do nosso sistema ERP e verificar qual domínio está acessando o sistema para customizar a página inicial. Neste bucket você pode ter seu site estático desenvolvido em VueJs, React, Angular, Flutter ou qualquer outro framework desses que gera sites estáticos em JS/HTML/CSS.
O seguinte arquivo HTML foi criado:


Página inicial do ERP

Esse bucket é único e vai servir para atender todo o ambiente multi-tenant.

ACM

O AWS Certificate Manager (ACM) é um serviço que permite provisionar, gerenciar e implantar facilmente certificados Secure Sockets Layer (SSL)/Transport Layer Security (TLS) para uso com os serviços da AWS e os recursos internos conectados. Em outras palavras, o ACM é um serviço que emite certificados de forma gratuita, para você utilizar dentro da AWS. Imagine o ACM como os tradicionais CA (Certificate Authority) de mercado: GoDaddy, IdenTrust, Let’s Encrypt, GlobalSign, outros.
E onde vamos utilizar o ACM em nossa solução? Lembra-se que no começo desse artigo informamos que a RHCompany precisa autorizar a emissão de um certificado com o nome erp.rhcompany.com.br para ser utilizado nos servidores da Leandro Cloud? Pois é isto que vamos fazer agora:

Como você pode imaginar, a RHCompany é uma empresa fictícia e eu não possuo esse domínio, então para esse teste eu vou utilizar 2 domínios que eu possuo: awscdk.cloud e cloudarchitects.solutions.
Abra o console do ACM na AWS e vamos emitir o certificado. Como iremos utilizar esse certificado para uso no Cloudfront, obrigatoriamente você deve emitir este certificado na us-east-1.
Vamos emitir dois certificados: um para o domínio erp.awscdk.cloud e outro para erp.cloudarchitects.solutions. Clique em “Request a Certificate” -> “Request a public certificate” -> Insira o nome “erp.awscdk.cloud” no domain name -> Selecione o método DNS de validação -> Clique em next até o final e copie os endereços de DNS informados pelo ACM. Esses DNS devem ser enviados para o cliente para que ele insira em sua zona, pois são esses DNS que vão autorizar a validação do certificado.
Aguarde até que o cliente insira os DNS e o ACM coloque o status do certificado em verde e escrito “Issued”. Enquanto o certificado não ficar com status “Issued” você não vai poder usar ele no Cloudfront.

Certificados emitidos.

ATENÇÃO: O ACM tem uma quota de 2500 certificados, mas você pode pedir aumento de quota na AWS.

Cloudfront

Antes de iniciarmos essa etapa, é importante frisar que qualquer conta possui 200 distribuições de quota no Cloudfront, mas que pode ser pedido seu aumento via Service Quotas no painel da AWS. Então se sua solução tiver muitos clientes, solicite este aumento na AWS, pois teremos que ter 1 distribuição Cloudfront para cada cliente.
Agora que já temos todo nosso back-end montado, nosso site estático hospedado e nossos certificados emitidos, é hora de configurarmos o whitelabel domain do cliente e termos a solução completa.
Abra o console do cloudfront e crie uma distribuição. Preencha os seguintes campos:
Origin: Selecione o bucket “medium-saas-multitenant” que criamos anteriormente. O Cloudfront já vai preencher isso para você.
• Configure a Origin Access Identity como quiser
Protocol Policy: Redirect HTTP to HTTPS
Alternate Domain Name (CNAME): Adicione o dominio erp.awscdk.cloud
Custom SSL Certificate: Selecione o certificado erp.awscdk.cloud criado anteriormente
Default root object: index.html

Após a criação da distribuição, o Cloudfront vai informar um nome como XXXXXXXXXXX.cloudfront.net. Anote esse endereço e envie para o cliente criar o registro erp.dominio (CNAME) no DNS dele. Neste caso vamos inserir para o domínio erp.awscdk.cloud o CNAME d1ce578qu63jhs.cloudfront.net, que foi fornecido pelo Cloudfront.

Repita os mesmos passos acima para o domínio erp.cloudarchitects.solutions.

Agora que temos tudo configurado, basta acessar os sites https://erp.awscdk.cloud/ e https://erp.cloudarchitects.solutions/ e temos a solução SaaS compartilhando diversos recursos da AWS e utilizando uma solução de whitelabel domain.


https://erp.awscdk.cloud/

https://erp.cloudarchitects.solutions/

Para finalizar, vamos aos prós e contras.

Prós

• Por ser uma solução Serverless, não requer administração de infra
• Baixo custo
• Possibilidade de automatizar
• Provisionamento da configuração em minutos

Contras

• Uma atualização do front-end tem que “triggar” um invalidation em todas as distribuições do Cloudfront. Mas isso pode ser facilmente automatizado com um S3 Event trigando um Lambda.
• A limitação de 200 distribuições de Cloudfront pode ser um problema inicialmente, mas dá para solicitar a AWS o aumento.
• A emissão de ACM e validação são processo assíncronos, então isso gera um pouco de trabalho para escrever uma automação. Mas pode ser feito com StepFunctions, por exemplo. Pode ser também agendado um evento no EventBridge para isso.
• CORS pode ser um problema

Veja o último artigo do nosso #cloudspecialist em nosso blog!

OUTRAS PUBLICAÇÕES

Novidades da Semana 14 a 18 de junho

Por Anderson Santos Todos os dias a AWS lança uma série novidades e atualizações em seus produtos que visam melhorar a vida de seus usuários. Reunimos algumas delas que fazem mais sentido para nosso mercado e que certamente aplicaremos em nosso dia a dia. Confira as novidades das últimas semanas. Security AWS Certificate Manager Private – ACM Private Certificate Authority está mais flexível ao compartilhamento de CAs entre contas O AWS Certificate Manager Private estendeu o suporte para compartilhamento de Certificate Authorities através do Resource Access Manager. Os clientes agora podem compartilhar CAs entre contas para emitir certificados de qualquer tipo. Antes era possível emitir apenas certificados do tipo TLS Client-Only ou TLS Server-Only. AWS Key Management Service (KMS) – Novo recurso de replicação de chaves em multi região O AWS KMS introduziu um recurso que permite replicar chaves client-side do KMS de uma região para outra. Assim você pode mover dados entre diferentes regiões sem precisar descriptografar e criptografar novamente com a chave da região de destino. Essas chaves são compatíveis com SDK, AWS S3 Encryptio e AWS DynamoDB Encryption. Desenvolvimento AWS Copilot – Nova versão 1.8 com melhorias em suporte a VPC e DNS O AWS Copilot é uma CLI de comandos declarativos para iniciar e gerenciar de maneira prática aplicativos em contêineres na AWS. Ele automatiza as etapas de implantação, incluindo envio da imagem para um ECR, criação da task definition e do cluster. O serviço anunciou o lançamento da versão 1.8 com algumas melhorias no suporte a VPC e DNS. AWS Amplify – Suporte para limites de permissões em IAM roles gerados pelo Amplify O AWS Amplify agora tem suporte para limites de permissões em papéis IAM gerados pelo serviço. O Amplify CLI é um conjunto de ferramentas de linha de comando que ajuda os desenvolvedores de front-end a criar back-ends de aplicativos na nuvem que incluem IAM roles e controlam o acesso aos recursos da AWS. Com esta novidade, é possível definir que os IAM roles gerados pelo Amplify respeitem os limites definidos pelas políticas e limites de permissões destas roles. Amazon Translate – Integração com CloudWatch Events e EventBridge O Amazon Translate é um serviço gerenciado de tradução automática neural acessível e personalizável em 71 idiomas. A novidade é que agora ele está integrado com o Amazon CloudWatch Events e Amazon EventBridge. Com essa atualização é possível usar eventos do CloudWatch para monitorar o progresso e a conclusão de seus trabalhos de tradução em lote. Amazon Lex – Suporte a slots multi-valor Amazon Lex é um serviço para construir interfaces de conversação em qualquer aplicativo usando voz e texto. O famoso chatbot. O serviço agora conta com a função de slot de vários valores. O slot é usado para capturar respostas do usuário e a partir disso programar a réplica. Compute & Container AWS App Mesh Controller for Kubernetes – Nova versão 1.4.0 O AWS App Mesh Controller for Kubernetes permite configurar o AWS App Mesh diretamente pelo Kubernetes. Com este lançamento, é possível configurar o Gateway e o Roteador virtual para habilitar ou desabilitar regravação de solicitações, adicionar ou remover prefixos e editar o componente do caminho da solicitação à medida que ele entra na sua malha, assim facilitando construção de aplicações de microsserviços com arquiteturas complexas. Amazon EC2 – Criação de AMIs crash-consistent a partir de instâncias com vários volumes EBS sem reiniciá-las O Amazon EC2 agora permite criar AMIs crash-consistent da sua instância com vários volumes EBS sem a necessidade de reinicialização. A AMI criada manterá os dados de todas as operações de I/O concluídas de cada volume anexado à instância. Isso garante que você possa iniciar uma instância da AMI e retornar ao estado exato anterior à criação da imagem. AWS Backup – Suporte a backups crash-consistent EBS associados a um EC2 O AWS Backup anunciou o recurso de criar por padrão backups crash-consistent de volumes do Amazon EBS associados a uma instância do Amazon EC2. Os clientes não precisarão mais interromper sua instância ou organizar múltiplos volumes do Amazon EBS associados à mesma instância do Amazon EC2, a fim de garantir a consistência do estado da aplicação em caso de falha. Amazon EC3 – Novos valores de cobrança Desde 11 de junho de 2021, a AWS estendeu a cobrança por segundo para instâncias do Windows Server e do SQL Server em execução no Amazon EC2. Válido para os modelos OnDemand, Reservado e Spot em execução no Amazon EC2 em incrementos com um mínimo de um minuto. Antes estas instâncias eram faturadas por hora. Amazon EC2 – Novas propriedade de AMI O Amazon EC2 agora possibilita especificar uma nova propriedade chamada “DepreciationTime” nas suas imagens de máquina da Amazon (AMIs) para indicar quando a AMI ficará desatualizada. Database Amazon RDS Aurora PostgreSQL – Suporte a novas extensões O Amazon RDS Aurora PostgreSQL anunciou o suporte de 4 novas extensões, são elas: pg_cron – Permite uso da sintaxe de cron para agendar comandos PostgreSQL diretamente no banco de dados pg_bigm – Fornece capacidade de pesquisa de texto usando index 2-gram para pesquisas mais rápidas pg_partman – Auxilia no gerenciamento de séries temporais e conjuntos de partição de tabela baseada em série pg_proctab – Uma coleção de funções armazenadas que podem acessar a tabela de processos do sistema operacional para que as estatísticas do sistema possam ser consultadas através do banco de dados Amazon RDS for PostgreSQL – Suporte a lista de permissões para extensões O Amazon RDS PostgreSQL adicionou suporte a lista de extensões permitidas para fornecer aos administradores de banco de dados mais controle sobre seu uso. O RDS suporta mais de 70 extensões do PostgreSQL, com a novidade, é possível especificar quais extensões podem ser instaladas em uma instância do RDS PostgreSQL Machine Learning Amazon SageMaker – Feature Store com suporte a nova API BatchGetRecord O Amazon SageMaker Feature Store é um repositório totalmente gerenciado e desenvolvido para armazenar, atualizar, recuperar e compartilhar recursos de machine learning (ML), a API BatchGetRecord oferece maior flexibilidade e maior taxa de

Os benefícios da Telemedicina

A área da saúde é uma das que mais que se beneficiam dos avanços da tecnologia. E a telemedicina vem para auxiliar na forma de como nos tratamos. Leia o artigo do blog da Darede.

FRRouting com Docker

Em mais um artigo sobre container, nosso #cloudspecialist Thiago Marques agora traz um overview sobre FRRouting com Docker. Confere aí!

Nós usamos cookies para garantir e oferecer a melhor experiência de navegação em nosso site! Mais informações