Migração de banco de dados usando o AWS DMS (Database Migration Service)

Na área de tecnologia, devido a sua constante evolução nos deparamos diversas vezes com o cenário onde as aplicações também necessitam evoluir para acompanhar o crescimento do negócio. Essa evolução muitas vezes exige, por exemplo, alterações de infraestrutura das aplicações, alterações em recursos de hardware, frameworks de desenvolvimento entre outras.

Nesse tutorial demonstrarei um cenário onde será necessário realizar uma migração de uma tabela de um RDS PostgreSQL para outro RDS PostgreSQL usando a migração de dados Homogênea, mas usando o AWS DMS também poderia ser migrado de um banco de dados On-premises ou de outro mecanismo (engine) diferente para uma instância RDS PostgreSQL, por exemplo, poderíamos migrar de um SQL Server para um PostgreSQL, para isso seria necessária a utilização da ferramenta AWS Schema Conversion Tool (SCT), mas isso é um tema para outro post.

Falando um pouco sobre a solução, o AWS Database Migration Service (DMS) é um serviço de migração de dados da AWS que permite migrar seus dados entre os bancos de dados e os data warehouses comerciais mais usados. Confira a lista de engines compatíveis entre outros detalhes sobre esse serviço aqui:
https://aws.amazon.com/pt/dms/features/

Referente a migração de dados homogênea que iremos utilizar: É quando o banco de dados de origem e destino possuem a mesma engine.

Vamos lá!

Ao acessar a console do DMS pela primeira vez, será carregada uma janela conforme a imagem abaixo, clique no botão Get started:

Será carregada a console do DMS, clique na opção Endpoints no menu esquerdo e depois no botão Create endpoint conforme abaixo:

Primeiramente iremos cadastrar o Source endpoint, que será o banco de dados que iremos realizar a migração de uma tabela. Abrindo a janela devemos informar o Endpoint type, deixaremos marcado a opção Source endpoint e iremos clicar na checkbox Select RDB DB instance e selecionar o database-origem, nesse momento serão preenchidos automaticamente os campos Endpoint identifier e Source engine conforme a imagem:

Após selecionar a instância RDS a janela será rolada automaticamente para a parte Access to endpoint database, selecionamos a opção Provide access information manually, como já selecionamos a instãncia anteriormente os campos já estarão preenchidos, exceto o campo senha (Password) e banco de dados (Database name). Como estamos usando o usuário master do banco (postgres), precisaremos somente de inserir a senha e o nome do banco de dados, após inserido as informações podemos clicar no botão Create endpoint para que o endpoint seja criado:

Agora faremos o mesmo procedimento para cadastrar o Endpoint de destino (Target), segue as imagens para ajudar:

Após a criação dos endpoints (Source e Target), iremos para a etapa de criação do serveless replication, com essa funcionalidade conseguimos acelerar a nossa migração, pois ela permite que o AWS DMS provisione e escale automaticamente os recursos de migração, facilitando as migrações de banco de dados. Usando o Serveless replication, iremos definir somente o limite do hardware (Capacity) que iremos utilizar, a infraestrutura por trás será criada pelo próprio DMS.

Para criarmos a replicação iremos acessar no menu esquerdo a opção Serverless replications e depois clicar no botão Create replication.

Na janela que será carregada, no bloco Configuration, iremos inserir o nome de identificação da replicação (Name), deixaremos o campo Descriptive Amazon Resource Name em branco, depois selecionamos o banco de dados de origem (Source) no campo Source database endpoint e o banco de dados de destino (Target) para onde iremos migrar a tabela no campo Target database endpoint. Após essas configurações precisaremos informar o tipo de replicação que iremos utilizar (Replication Type), nesse tutorial estaremos utilizando o Full load, nesse tipo de migração será migrada a tabela e todos os seus dados.

No bloco configurações da replicação (Settings), iremos deixar marcada a opção Drop tables on target em Target table preparation mode, pois o banco de dados de destino é novo e não existem tabelas nele. Se já existisse tabelas eu poderia selecionar a opção Do nothing, por exemplo, usando essa opção a replicação ignora as tabelas que já existem e cria/replica os dados somente das tabelas que não existem. Em Include LOB columns in replication deixaremos a opção padrão (Limited LOB mode):

Para gerar os logs da migração marcaremos a checkbox Turn on CloudWatch logs, após marcar essa opção serão carregadas algumas opções e nível de log. Veja abaixo como foi configurado para esse tutorial:

Após definido o nível de log, vamos para o Table mappings, nesse bloco mapeamos os dados e as tabelas do banco de dados de origem (Source) e como serão migradas para o banco de destino (Target). Nesse tutorial iremos migrar somente a tabela empresas do banco de dados dmsdatabase, dessa forma configuramos conforme a imagem abaixo:

Em Compute settings, na primeira parte (Connectivity and security) configuramos a VPC, Subnet group e o Security Group que será utilizado pelos recursos do DMS. Um ponto importante aqui, é que o Security Group utilizado, precisa ter acesso aos dois bancos de dados (Source e Target). Para essa demonstração estamos utilizando a VPC padrão (Default) e o Security Group Default, não recomendado para ambientes de produção devido as configurações mais permissivas. Não utilize em ambientes de produção essa VPC e Security Group em um ambiente de produção.

Para o Security Group fique atento a liberação das portas utilizadas pelo banco de dados de origem e destino, pois a instância de replicação precisará ter acesso aos dois bancos para o funcionamento da migração.

Na segunda parte, em (Availability) selecionamos somente Single-AZ em Deployment e em Capacity selecionamos somente o máximo de recursos serveless que iremos utilizar no campo Maximum DMS capacity units (DCU), para esse tutorial selecionamos 8 DCU (2vCPU e 16GB de memória), esse recurso atenderá tranquilamente o nosso ambiente. Após configuradas as opções, clique no botão Create replication para criar a configuração de migração.

A partir desse momento temos o ambiente configurado e pronto para a migração e voltaremos para a console principal do AWS DMS com uma mensagem com o botão Start replication conforme destacado na imagem abaixo:

Após clicar no botão Start replication a replicação será iniciada e uma janela similar a janela abaixo será carregada. O tempo de replicação dependerá das características do seu ambiente. As características são os recursos definido para o Serverless replication, tipo de instância do banco de dados, tamanho de tabela e etc.

Como utilizamos o Full load como Replication Type, quando finalizar a replicação o status ficará conforme abaixo. Caso seja necessário fazer uma nova migração, será necessário criar uma nova replicação.

Concluído! Nesse ponto, está finalizada a migração da tabela para uma nova instância RDS sem que indisponibilizasse o banco de dados de origem durante o processo de migração..

Até breve!

Usando o VPC Origins no CloudFront para publicar aplicações web com segurança.

Com o CloudFront VPC Origins é possível publicar uma aplicação Web em uma VPC privada, sem a necessidade de nenhuma rota direta para a internet e garantirmos que o CloudFront seja a única forma de acesso para sua apliçação e que todas as requisições passem por ele (CloudFront).

Criando um VPC Origin será possível usar o CloudFront para publicar aplicações que estão em sub-redes privadas evitando o uso de IP público ou a necessidade de colocar a sua aplicação em uma sub-rede pública.

O Cloud Front é uma CDN (Content Delivery Network) da AWS para entrega de conteúdo com alta velocidade e baixa latência, devido a sua quantidade de Pontos de Presença (PoPs) espalhados pelo mundo.  
Mais detalhes sobre esse serviço aqui: https://aws.amazon.com/pt/cloudfront/

Usando o CloudFront ainda contamos com a proteção contra ataques de Denial of Service (DoS) que é disponibilizado por padrão no serviço.

Vamos analisar um pouco sobre a arquitetura do cenário proposto…

Qual foi a base dessa demonstração?

Foi criada uma instância EC2 com o Amazon Linux 2 em uma subnet privada sem nenhuma rota de acesso a internet, instalado o Apache e configurada uma página simples (Hello World) no caminho /var/www/html/index.html. Após a criação da instância, foi criado um Elastic Load Balancer do tipo ALB interno (Application Load Balancer). Utilizaremos esse ALB como a origem (apontamento) do VPC origin e assim teremos acesso público na aplicação através do CloudFront sem a instância ser exposta na internet.

Acessando a console do CloudFront pela primeira vez, será exibida uma janela similar a essa abaixo, clique no menu no canto superior esquerdo e depois em VPC origin.

Será exibida a janela abaixo com o botão Create VPC origin:

Após clicar no botão carregará a janela para criação do VPC origin, conforme a imagem a seguir. Nessa janela iremos preencher com as seguintes informações, no primeiro campo (Name) deverá ser preenchido o nome que identifique o recurso (VPC origin).
No segundo campo (Origin ARN) preencher com o ARN (Amazon Resource Name) de uma Instância EC2 ou de um Elastic Load Balancer.
Agora, será preciso selecionar o protoloco (Protocol), deixaremos a opção padrão Match viewer com o TLSv1.2 que já vem selecionada, com as configurações realizadas, clique no botão Create VPC origin.

Falando um pouco sobre o ARN (Amazon Resource Name), ele é basicamente um identificador único utilizado para nomear os recursos no ambiente da AWS.
Mais detalhes aqui:
https://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/reference-arns.html

Após clicar no botão Create VPC origin uma página similiar a janela abaixo será carregada:

Com o VPC origin criado, iremos criar a Distribution para que o CloudFront possa realizar a entrega de conteúdo com alta velocidade e baixa latência. Na console do CloudFront clique no botão Create a CloudFront distribution.

Abrirá uma janela para criação do Distribution, clique no campo Origin domain e selecione o VPC origin criado anteriormente.

Os campos VPC origin domain e Name serão preenchidos automaticamente conforme podemos ver na imagem abaixo:

Na sessão Default cache behavior é possível configurar o comportamento do cache, métodos HTTP permitidos e a política de protocolo, mas para essa demonstração deixaremos todas as opções como padrão e seguiremos para a próxima parte.

Em Function associations, podemos ignorar essa sessão, pois não estaremos trabalhando com CloudFront Functions ou Lambda@Edge nessa aplicação. A próxima sessão será a Web Application Firewall (WAF) onde iremos simplesmente, selecionar Do not enable security protections para não ativar o WAF. Pois não iremos focar no WAF nesse tutorial.

Caso tenha interesse em aprender como proteger uma Aplicação Web com o WAF na AWS. Confira no link abaixo:
https://brenocarvalho.cloud/2023/12/31/como-proteger-a-sua-aplicacao-web-na-aws-usando-waf-web-application-firewall/

Após selecionar a opção Do not enable security protections e desabilitar o WAF, clique no botão Create distribution e o Distribution será criado no CloudFront.

Acessando o Distribution criado na console do CloudFront, será possível ter acesso ao endereço do CloudFront para acessar a página de exemplo:

Ao entrar no endereço será possível visualizar o site abaixo:

Consideramos que o novo recurso do CloudFront facilitou a publicação de Aplicações Web com segurança. Esperamos que esse tutorial possa contribuir positivamente na comunidade da AWS.

Até breve!

Automatizando a migração para AWS com Application Migration Service

Em 2020 fiz um post sobre o tema Migração para AWS com Cloud Endure, mas essa ferramenta foi descontinuada (exceto nas regiões AWS GovCloud e da China), devido a essa mudança, resolvi criar esse tutorial detalhando sobre a migração para a AWS usando o Application Migration Service.

Com o Application Migration Service podemos automatizar o processo de conversão de servidores para execução nativa na nuvem AWS. Com essa solução podemos migrar por exemplo, aplicações como Oracle, SAP e SQL Server executadas em servidores físicos, VMware vSphere, Microsoft Hyper-V e outras infraestruturas on-premises. Nesse tutorial irei demonstrar a migração de um servidor Linux que está em um ambiente on-premises convertendo esse servidor para uma Instância EC2.

Vamos lá!

Primeiramente vamos criar o usuário no Identity and Access Management (IAM) para utilizarmos no AWS Application Migration Service. Acessando a console do IAM, clique na opção Users do menu lateral e depois no botão Create user, conforme imagem abaixo:

Após clicar no botão Create user irá carregar a janela abaixo, onde iremos inserir o nome de usuário (user name), para essa demonstração iremos inserir o nome de usuário migration e clicar no botão Next:

Na próxima janela iremos definir as permissões que esse usuário terá no ambiente da AWS, como iremos utilizá-lo somente para o Application Migration Service, iremos selecionar a política (policy) AWSApplicationMigrationFullAccess e clicar no botão Next conforme imagem abaixo:

A política selecionada acima dará acesso total (full) ao Application Migration Service (MGN) necessárias para esse ambiente de demonstração. Para mais detalhes sobre as políticas (policies) do Application Migration Service, confira abaixo no link:
https://docs.aws.amazon.com/mgn/latest/ug/security-iam-awsmanpol.html

Clicando no botão Next, será carregada a página de Review onde será possível revisar as configurações realizadas. Após revisar e estando de acordo com as configurações, clique no botão Creater user para criar o usuário:

Após a criação do usuário, iremos criar as credenciais para acesso programático. Através dessas credenciais que Application Migration Service terá acesso para realizar a migração do servidor para a AWS. Na console do IAM, selecionamos o usuário que criamos clicando em seu nome (imagem abaixo):

Será aberta uma janela similar a da imagem abaixo, onde iremos clicar no link Create access key:

Na próxima janela, selecione a opção Third-party service, confirme a escolha através do checkbox “I understand…” e clique no botão Next conforme imagem abaixo:

Na próxima tela, clique no botão Create access key:

Clicando no botão, serão exibidas as credenciais que foram criadas, salve-as em um local seguro, caso as perca, será necessário criar novas credenciais, pois não é possível recuperá-las:

Com o usuário e suas credenciais criadas, vamos para a próxima etapa.
Precisaremos agora instalar o AWS Replication Agent que é o agent que irá realizar a replicação do servidor com a AWS para que seja possível migrá-lo posteriormente.

Agora, iremos acessar a console do Application Migration Service para realizar o download do agent na console do Application Migration Service, basta acessar o menu Source servers na barra lateral esquerda, clicar em Add server na tela que irá carregar no lado direito. Confira os passos descritos na imagem abaixo:

Para essa demonstração iremos utilizar como base um servidor Linux, após clicar no botão Add server irá carregar uma janela conforme abaixo:

Descendo a barra de rolagem você verá os itens 5 e 6 onde haverá as seguintes linhas de comando, na primeira (item 5), faz o download do instalador e na segunda (item 6) faz a instalação do agent:

Agora, em posse das linhas de comando, iremos acessar o servidor que iremos migrar para a AWS. Após fazer o download e iniciar a instalação, você verá uma tela similar a tela abaixo, caso tenha sucesso na instalação, aparecerá a seguinte mensagem “The AWS Replication Agent was successfully installed.” conforme a última linha da imagem abaixo:

Caso ocorra algum erro na instalação, confira na página de troubleshooting abaixo, os possíveis erros de instalação:
https://docs.aws.amazon.com/pt_br/mgn/latest/ug/Troubleshooting-Agent-Issues.html

É importante lembrar que para a replicação o Application Migration Service cria uma Instância EC2 de replicação (Replication Server) automaticamente. Por padrão será uma instância t3.small,  essa instância atende muito bem o nosso cenário de teste. Para migração de um ambiente de vários servidores, sugiro que leiam na documentação abaixo:
https://docs.aws.amazon.com/mgn/latest/ug/instance-type.html
Para alterar o tipo de instância basta alterar através do menu Settings / Replication template na console do Application Migration Service.

Com o AWS Replication Agent instalado será possível visualizar o servidor na console do Application Migration Service, na imagem abaixo o servidor já foi replicado para a AWS e já está pronto para seguirmos para a próxima etapa que é subir uma instância EC2 de teste do servidor replicado.

Na janela acima, clicamos no nome do servidor que queremos migrar para a AWS conforme descrito na imagem abaixo:

Ao clicar será carregada a janela com o dashboard de migração, por essa tela será possível acompanhar o status atual do ciclo de vida da Migração desse servidor:

A seguir, iremos na aba Launch settings onde teremos as configurações da Instancia EC2 que irá subir no momento da migração. Essa configuração é puxada através do Launch template padrão, que foi criado pelo próprio serviço (Application Migration Service):

Depois de verificado as configurações da Instância, iremos subir uma instância de teste para validar o funcionamento antes da migração definitiva. Para fazer esse teste precisaremos clicar no botão Test and cutover e depois na opção Launch test instance, conforme demonstrado na imagem abaixo:

Aparecerá um pop-up alertando que a instância que será criada, utilizará como base as configurações do Launch template, basta clicar no botão Launch e o processo de subir a Instância será iniciado.

Nesse momento, o Application Migration Service irá subir uma nova Instância EC2 para realizar o processo de conversão (Tag name: AWS Application Migration Service Conversion Server), esse servidor realiza a conversão dos discos para iniciar na EC2, faz alterações no bootloader, injeta os drives do hypervisor e instala as ferramentas de nuvem (cloud tools). Servidor de conversão criado na imagem abaixo:

Após esse processo e a Instância iniciada, o servidor de conversão (Conversion Server) será deletado, conforme imagem abaixo:

Com a instância de teste iniciada, você poderá acessá-la para testar as aplicações contidas e validar que estão em perfeito funcionamento. Após a validação, voltamos para a console do Application Migration Service para confirmar que a instância está pronta para ser migrada para a AWS e avançarmos para a próxima etapa do ciclo de vida da migração.
Para isso basta clicar no menu Mark as “Ready for cutover”, conforme imagem abaixo:

Após clicar será aberta um pop-up informando que ao confirmar a Instância de teste será deletada:

É interessante que a própria solução vai informando qual a próxima etapa no ciclo de vida da migração, evitando que você fique confuso durante esse processo. É importante lembrar que, nessa demonstração estamos migrando somente 1 servidor, mas em um cenário real poderiam ser vários servidores.

Agora vamos para a etapa de cutover (transição) onde iremos subir a instância EC2 em definitivo para a AWS. Para isso basta clicar no menu Launch cutover instance e confirmar no botão Launch no pop-up que irá carregar, conforme imagens abaixo :

Após os ações acima, o Application Migration Service irá executar os passos realizados no momento de subida da instância EC2 de teste, criando o servidor de conversão e apagando ele após o processo.

Como podemos ver, o servidor foi migrado para a AWS como uma instância EC2 e está pronto para o uso.

Agora vamos finalizar o processo no Application Migration Service. Nesse ponto precisaremos ter certeza que a Instância que subiu está funcionando perfeitamente. Tendo essa certeza, basta clicar no menu Finalize cutover.

Como citado anteriormente, ao clicar no botão Finalize todos os dados de replicação e recursos usados nessa migração serão apagados. Depois que clicar não terá mais volta.

A partir desse momento o ciclo de migração estará finalizado e a Instância EC2 pronta para ser colocada em produção na AWS. 🙂

Para finalizar, clicaremos em Mark as archived no menu Actions e o servidor será removido da janela Source server do Application Migration Service

Concluído! Finalizamos nossa migração de um servidor Linux para a AWS.

Até breve!!! 🤓

Como proteger a sua aplicação web na AWS usando WAF (Web Application Firewall)

Atualmente na era digital, a segurança online se tornou uma prioridade, especialmente quando se trata da proteção de aplicações web contra ameaças cibernéticas. No ecossistema da Amazon Web Services (AWS), a implementação de medidas robustas de segurança é fundamental para garantir a integridade e disponibilidade de seus recursos na nuvem. Neste post, exploraremos em detalhes a utilização do WAF (Web Application Firewall) na AWS, uma ferramenta essencial para fortificar a segurança de suas aplicações web. Descubra como o WAF pode ser uma barreira eficaz contra ameaças do tipo: ataques DDoS, injeção de SQL e outros exploits comuns, proporcionando uma camada adicional de proteção para o seu site hospedado na AWS. Prepare-se para aprofundar seus conhecimentos e elevar o nível de segurança de sua presença online na nuvem.

Essa publicação demonstrará como configurar o WAF como a primeira camada de proteção da aplicação, trabalhando em conjunto com o CloudFront (CDN).

O Cloud Front é uma CDN (Content Delivery Network) da AWS para entrega de conteúdo com alta velocidade e baixa latência devido a sua quantidade de (PoPs) Pontos de Presença espalhados pelo mundo.  
Mais detalhes sobre esse serviço aqui: https://aws.amazon.com/pt/cloudfront/

Acessando a console do WAF pela primeira vez, será exibida uma janela similar a essa abaixo, clique no botão laranja Create web ACL:

Será carregada uma janela de configuração da Web ACL, nessa primeira etapa será necessário informar o tipo de recurso que você irá associar a essa ACL, existem duas opções CloudFront distributions (opção padrão) ou recursos regionais, por exemplo: Application Load Balancers, API Gateway entre outros serviços.

Nessa demonstração iremos criar a ACL para o CloudFront, inserindo o nome da Web ACL, o campo CloudWatch metric name será automaticamente preenchido, esse nome será para indentificar as métricas da Web ACL no Cloud Watch:

No próximo bloco de configurações podemos definir o Body size limit que o WAF irá inspecionar, esse limite se aplica ao request body, headers e cookies. Para essa demonstração, iremos deixar a opção Default (Padrão) que é 16 KB, pagando um valor adicional, esse valor pode ser alterado até 64 KB conforme imagem abaixo:

Definido o Body size limit, iremos selecionar o CloudFront Distribution que iremos associar a Web ACL que estamos criando.

Clicando no botão Add AWS resource conforme imagem acima, irá carregar uma janela com as Distributions existentes, selecione o Distribution e clique no botão Add conforme imagem abaixo:

Irá voltar para a tela anterior (imagem abaixo), clique no botão Next:

Nessa etapa, iremos definir as regras conforme os comportamentos das requisições web e de acordo com o que for identificado na requisição, a ação que será tomada. Por exemplo, se será liberado (Allow) ou bloqueado (Block).

Clicando em Add rules e depois em Add managed rule groups, será carregado uma tela com as regras gerenciadas, existem regras da própria AWS (que iremos usar aqui) e também de outros diversos fabricantes. Clicando em AWS managed rule groups vai expandir as regras gerenciadas pela AWS…

Iremos selecionar as regras gratuitas da AWS chamada Core rule set, que inclui proteções para aplicações Web incluindo OWASP publications (publicações OWASP) e Amazon IP reputation list que é baseada na Amazon threat intelligence (Inteligência de Ameaças Amazon) e irá bloquear IPs associados a bots entre outras ameaças já conhecidas pela AWS.

Após selecionar as regras desejadas, basta clicar no botão Add rules no final da página.

Um ponto importante que deve ser considerado é que cada regra (Rules) tem um limite de capacidade que é de 5000 WCUs, mas usando acima de 1500 WCUs existirá um custo adicional.
O WCU é basicamente uma unidade de medida de capacidade da Web ACL, que a AWS utiliza para calcular e controlar os recursos necessários para executar as regras.
Para saber dos custos envolvidos nas regras, acesse: https://aws.amazon.com/waf/pricing/

Entendendo a regra abaixo, no nosso cenário usamos somente duas regras que utilizam uma capacidade de 725 WCUs e estaremos liberando o tráfego das requisições que o comportamento não for o esperado nas regras adicionadas na sessão Rules:

Clique no botão Next.

Após configurar as regras e seu comportamento, iremos definir a prioridade de processamento delas no WAF, quando uma requisição chegar eles serão avaliadas de cima para baixo.

No cenário da nossa Web ACL, é necessário que o WAF faça o bloqueio de qualquer IP que esteja na lista AWS-AWSManagedRulesAmazonIpReputationList, antes que ele faça a análise da regra AWS-AWSManagedRulesCommonRuleSet, com isso será alterada a ordem de processamento. Observe no vídeo abaixo:

Nessa etapa, iremos configurar o nome que as métricas serão enviadas para o CloudWatch para monitoramento, deixaremos com as opções padrão:

Ao clicar no botão Next será exibida a tela de Review (análise), onde você poderá visualizar o que foi configurado em todas as etapas da configuração da Web ACL, caso esteja de acordo, é só clicar no botão Create web ACL para criar a Web ACL.

Finalizada a criação da Web ACL, navegaremos pelo Dashboards e analisaremos o tráfego. Para popular os Dashboards, foi realizado um teste online através de sites gratuitos para gerar tráfego e conseguirmos ver o WAF em funcionamento.
Acessando a Web ACL criada, iremos selecionar a aba Traffic overview. Conforme janela abaixo:

Na primeira parte temos o resumo com a quantidade total do tráfego, o que foi liberado (allow), bloqueado (blocked) e em qual regra foi bloqueado:

Na segunda parte (Traffic characteristics), conseguimos ver a característica do tráfego que são informações importantes, tais como: o tipo do cliente, os tipos de ataques, se é tráfego de Bot ou não e o país de origem do tráfego.

Já nessa última parte, é possível ver em qual regra / grupo de regra a requisição foi categorizada.

A partir de agora, teremos mais uma camada de proteção na aplicação web.

É fundamental destacar que nessa demonstração, foram empregadas apenas duas regras. Isso se deu com o propósito de elucidar o funcionamento da solução de WAF da AWS. No entanto, ao lidar com um ambiente que envolva uma aplicação real e crítica, é imperativo realizar uma análise detalhada da aplicação. Essa análise permitirá identificar quais regras (proteções) devem ser configuradas na WebACL, garantindo uma abordagem personalizada e eficaz para a segurança do ambiente.

Abaixo, observe algumas regras que poderiam ser adicionadas a WebACL:

Espero que essa publicação possa ser uma contribuição valiosa para a comunidade da AWS, como um auxílio para quem está buscando conhecimento na área de Cloud.

Até breve!!

Upgrade RDS MySQL com Blue/Green Deployment

Veja como criar um ambiente de Blue/Green para um banco de dados RDS MySQL em produção e utilizar essa funcionalidade para upgrade do MySQL, reduzindo o downtime durante processo de upgrade de versão, possibilidade de rollback mais rápido entre outras possibilidades que irei comentar nesse post.

O Blue/Green deployment são dois ambientes, onde o ambiente Green (Ambiente de Teste) permanece sincronizado com o ambiente Blue (Ambiente de Produção) através de replicação lógica, possibilitando alterações e testes mais assertivos no ambiente Green sem afetar o banco em produção (Blue).


Vamos lá…

Para esse post, foi criado um banco de dados com a versão 8.0.28 (imagem abaixo) que será o Banco de Dados Blue e no momento da criação do Blue/Green Deployment iremos especificar a versão 8.0.32 para o Banco de dados Green com isso será possível simular um upgrade utilizando o recurso.

Com o banco de dados criado, vamos configurar o ambiente para funcionar como Blue/Green Deployment, acessando a console do RDS iremos selecionar o banco da dados e através do menu Action / Create Blue/Green Deployment iremos fazer as configurações:

Na próxima janela será configurado o Blue/Green deployment, inserindo o nome do ambiente, engine version (versão do banco de dados) e parameter group do banco de dados Green. Nesse ponto selecionamos a versão mais atual disponível.

Após selecionar as opções acima e finalizado o processo de criação do ambiente, que nessa demonstração demorou em torno de 16 minutos, será possível ver a seguinte estrutura abaixo na console do RDS:

Um ponto importante é que após a criação do Blue/Green Deployment, o endpoint de conexão continuará o mesmo, criando apenas um novo endpoint para acesso ao Banco de Dados Green. Como isso não seria necessário alterar os parametros de conexão da sua aplicação.
O banco de dados Green será um clone do banco de dados Blue, portanto, se o banco de dados Blue for MultiAZ e tiver replicas de leitura, o Green também terá essa mesma estrutura.

Com o ambiente Blue/Green criado, irei realizar o teste fazendo o “Switch over” do banco de dados Blue para o Green e com isso irei monitorar o tempo que irá demorar para fazer essa “virada”.
Para realizar o “Switch over” é muito muito simples, basta seguir os passos abaixo:

Clicando no opção Switch over irá carregar a janela abaixo com um sumário dos bancos de dados Blue e Green e também o Timeout setting onde você especificará o tempo limite para o switch over ocorrer. Caso o Switch over demore mais que o tempo especificado em Timeout setting, o procedimento não será concluido e nenhuma alteração será aplicada no ambiente.

Após clicar no botão Switch over, o processo será iniciado e a coluna status dos bancos de dados ficará conforme a image abaixo:

Após o Switch over o DB identifier dos bancos será alterado, o banco de dados que estava como Green assumirá como db-mysql1 e o banco de dados que era o Blue foi renomeado com db-mysql1-old1 como pode ser visto abaixo:

O procedimento demorou em torno de 2 minutos, nesse período toda a gravação (write) foi interrompida no banco, mas a leitura (read) continuou normalmente. Essa funcionalidade ficou sensacional! Não acham?

Aplicação em um cenário real

Imaginando um cenário em um ambiente de produção de uma empresa, onde é necessário fazer um upgrade de um banco de dados, mas com o menor tempo de indisponibilidade possível e a menor carga operacional. 
Essa funcionalidade seria uma ótima opção, pois o upgrade, testes e validações seriam realizados no banco de dados Green, finalizando essas etapas, seria necessário somente programar uma janela de manutenção para fazer o Switch over para colocar a nova versão em produção.

Observações

1 – Realizamos esses procedimentos em um banco de teste, mas em um banco de produção com maior volume gravação, o tempo para o Switch over poderá ser maior.

2 – No momento em que escrevo esse post, o Blue/Green deployment é compatível apenas com o Amazon Aurora com MySQL, RDS MariaDB e RDS MySQL…

Agora só nos resta aguardar essa funcionalidade ficar disponível para outras bancos de dados :).

Até breve!

Aplicações Web com Arquitetura Serverless na AWS

Aprenda como publicar uma Aplicação Web na internet utilizando a nuvem AWS e com uma Arquitetura 100% Serverless, imagine não se preocupar, por exemplo, em atualizações de patches do sistema operacional, pois essa parte será abstraida pela AWS o que reduz a atuação da equipe responsável pela infraestrutura e no quesito segurança, temos uma redução da superfície de ataque.

Com essa arquitetura é possível dar um foco maior na sua aplicação e não se preocupar com a administração da infraestrutura, pois utilizaremos serviços que são altamente disponíveis e administrados pela própria AWS.
Para saber mais detalhes sobre o modelo de responsabilidade compartilhada, você poderá acessar o endereço:

https://aws.amazon.com/pt/compliance/shared-responsibility-model/

Utilizaremos os seguintes serviços:


Cloud Front
S3
IAM


CI/CD


Vamos lá…

Iniciaremos com os serviços que serão a base da infraestrutura na AWS 

Criaremos um Bucket no Amazon Simple Storage Service (Amazon S3) ou comumente chamado de S3 para armazenar os arquivos do Web Site, esse é um serviço de Storage na Nuvem da AWS para o armazenamento de objetos onde teremos escalabilidade, alta disponibilidade dos dados, segurança e performance.

S3 – Criação do Bucket

Na tela do Amazon S3, clique no botão laranja Create bucket:

Iremos criar um bucket S3 com as configurações padrões, ativando somente a opção ACLs enabled no Object Ownership e a criptografia padrão conforme as imagens abaixo:

CloudFront – Criar o distribution ID

Agora vamos para o Cloud Front que terá a função de disponibilizar o nosso site para o mundo, pois ele fará a entrega do conteúdo da aplicação.

O Cloud Front é uma CDN (Content Delivery Network) da AWS para entrega de conteúdo com alta velocidade e baixa latência devido a sua quantidade de (PoPs) Pontos de Presença espalhados pelo mundo.  
Mais detalhes sobre esse serviço aqui: https://aws.amazon.com/pt/cloudfront/

Precisaremos criar um Distribution, ao acessar a página do Cloud Front, clique no botão laranja Create distribution:

Ao clicar no botão Create distribution você será direcionado para a página de criação, no primeiro bloco iremos inserir as configurações de Origin, selecionando o bucket que foi criado, a opção Origin access é exibida com algumas opções que iremos configurar conforme as imagens abaixo, visando maior sergurança e performance:

Na etapa de configuração do cache, no Default cache behavior e Cache key and origin requests deixaremos as configurações padrão:

No bloco Function associations, deixaremos o padrão (imagem abaixo), pois não utilizaremos essas configurações nessa demonstração.

Em Settings, podemos configurar a opção de performance, WAF (Web Application Firewall), nome de domínios (CNAME), certificado e versão do HTTP.

Para essa demonstração específica configuraremos o Default root object como index.html, mas dependendo de como a sua aplicação foi construída, pode não ser necessário informar o index.html.

Finalizado a infraestrutura base, seguiremos para o deploy da aplicação…

Deploy da Aplicação

Simularemos uma esteira de CI/CD utilizando o Gitlab para realizar os ajustes na infraestrutura base que criamos anteriormente e o deploy da aplicação (Web Site). O intuito é automatizar esse processo e ganhar agilidade nos deploys.

Obs.: É importante lembrar que as etapas demonstradas a partir desse momento, podem ser realizadas manualmente, desde o upload dos arquivos para o S3 até os ajustes no Cloud Front.

Crie um novo projeto no Gitlab e insira as variáveis (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY e AWS_DEFAULT_REGION) para que o Gitlab tenha acesso ao nosso ambiente AWS e consigar realizar o deploy da aplicação (Web Site) conforme imagem abaixo:

Esse projeto possui uma aplicação web simples para essa demonstração, mas também é possível utilizar a mesma infraestrutura com aplicações em Node.js, React, entre outras, utilizando o arquivo serverless.yml que deixarei disponível nesse projeto.
Iremos focar nos arquivos destacados em vermelho na imagem abaixo:

Na pasta www estão os arquivos que serão enviados para o Bucket S3.
No arquivo .gitlab-ci.yml definimos as ações que serão tomadas, a ordem de execução, em qual condição e os recursos necessários.
Segue abaixo os comandos básicos necessários para fazer o download do projeto para a sua máquina e enviar as alterações para o Gitlab:

# 1- Clonar o projeto com o comando abaixo:
git clone git@gitlab.com:devops-breno/serverless_website.git
# 2 - Faça as alterações necessárias no projeto e envie para o repositório executando os comandos abaixo:
git add .
git commit -m "Novo WebSite Estático"
git origin push main

Após executar os comandos, você poderá acompanhar a execução do Job no menu CI/CD / Jobs, se tiver sucesso no deploy, você irá visualizar uma tela conforme imagem abaixo:

Recebendo a mensagem Job succeeded, o deploy foi realizado com sucesso e você poderá acessar o endereço do Cloud Front para teste conforme abaixo:

Acessando o endereço, será possível acessar a página de exemplo com a arquitetura serverless do ambiente:

Pronto! Agora temos uma Aplicação Web 100% Serverless na AWS.
O link abaixo é referente ao site publicado nesse post:

https://d2uhz4c1bwszas.cloudfront.net

Link para download do projeto utilizado:
https://github.com/BrenoACarvalho/ServerlessWebSite

Até breve! 🙂

Automatizando os backups de Instâncias EC2 com o AWS Backup

Mesmo utilizando os recursos computacionais da nuvem AWS que são altamente disponíveis, a responsabilidade dos Backups será de responsabilidade do proprietário da conta. Para maiores informações sobre o Modelo de Responsabilidade Compartilhada basta conferir no link a seguir:

https://aws.amazon.com/pt/compliance/shared-responsibility-model/

Nesse post buscarei demonstrar como automatizar os backups de instâncias EC2 utilizando o AWS Backup. Com esse serviço é possível realizar o backup também dos serviços Amazon RDS, DynamoDB, EFS, FSx entre outros. Um ponto importante é que o AWS Backup está em conformidade com a PCI e a ISO e está qualificado pela HIPAA.

Então vamos lá!

Ao acessar a console do AWS Backup, uma janela similar a imagem abaixo irá aparecer:

Para que o backup funcione será necessário criar o Backup Vault, nesse cofre (Vault) serão armazenados os backups.

Uma boa prática é criar o Backup Vault referenciando ao tipo do backup, nesse caso o nome do Vault foi Backup_Semanal, pois ele será criado para armazenar os backups semanais, maiores detalhes na imagem a seguir.

Após a criação do Backup Vault, criamos o Plano de Backup (Backup Plan), também como boa prática, colocamos o nome do Backup Plan igual ao nome do Backup Vault para facilitar a identificação.

Clicando no botão Create Backup plan, a janela abaixo será carregada (Detalhes nas imagens):

Após a criação do Backup Plan, precisaremos definir o Resource assignments, no momento da criação iremos definir uma Tag e quando ela for especificada na Instância EC2, o Backup será realizado de acordo com o plano criado anteriormente (Backup Plan).

Na janela Assign resources, podemos escolher os recursos de acordo com o tipo/ID ou especificando a TAG.

Outra opção é definir uma TAG selecionando no campo Assign by a opção Tags e definindo os valores Key e Value conforme imagem abaixo. Iremos seguir utilizando as Tags conforme especificado na próxima imagem.

Com a Key = Backup e a Value = Semanal, temos o serviço configurado e pronto para realizar os backups de Instâncias EC2.

Foi anunciado recentemente o AWS Backup Audit Manager que permite auditar e relatar a conformidade das políticas de proteção de dados, possibilitando um melhor controle das atividades de backup e geração de relatórios.

Então é isso, espero ter ilustrado bem esse passo a passo de realização do Backup.

Até Breve!

Usando AWS System Manager para In-place Upgrade de Instâncias EC2 Windows

Nesse post irei demonstrar o procedimento de in-place upgrade na Nuvem AWS, onde através do AWS System Manager, usando automation document iremos atualizar a versão do Windows sem remover as aplicações instaladas, ou seja, não teremos a necessidade de fazer uma nova instalação do Windows e migrar as aplicações manualmente. Além disso, esse upgrade ajudará a mitigar os riscos de segurança e compliance do seu ambiente possibilitando uso de versões mais atuais do Sistema Operacional e poderá reduzir o tempo necessário para a migração para uma nova versão do Windows Server.

Os caminhos suportados para atualização (DE-PARA), são os seguintes:
Windows Server 2008 R2 para Windows Server 2012 R2.
Windows Server 2012 R2 para Windows Server 2016.
Windows Server 2012 R2 para Windows Server 2019.
Windows Server 2016 para Windows Server 2019.

Inicialmente, iremos aos pré-requisitos necessários para a atualização:
– É recomendado ter 20 GB de espaço no disco de boot;
– Agent SSM instalado na EC2 que será atualizada: https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-win.html
– Esse Automation funciona somente em instâncias com o EBS Volume Root não encriptado. Instâncias com EBS encriptado, o Automation irá falhar;
– Esse Automation funciona somente nas instâncias com as versões Windows Server 2008 R2, 2012 R2 e 2016 edições Standard e Datacenter.

Limitações:
Esse Automation não dará suporte ao upgrade de Domain Controllers, Clusters ou Sistemas Operacionais Windows de desktop. Também não são suportados instâncias com as seguintes Windows Server Roles:

– Remote Desktop Session Host (RDSH)
– Remote Desktop Connection Broker (RDCB)
– Remote Desktop Virtualization Host (RDVH)
– Remote Desktop Web Access (RDWA)

Referências:
https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-awsec2-CloneInstanceAndUpgradeWindows.html

Cenário:
Na demonstração abaixo, estou realizando o upgrade de uma Instância EC2 com Windows Server 2012 R2 com IIS para o Windows Server 2019 mantendo todas as aplicações instaladas. Foi criada uma página simples em HTML no IIS para validação do funcionamento da aplicação após o upgrade.

Para que o upgrade funcione, precisaremos dar permissão para que o AWS System Manager consiga executar o upgrade na Instância EC2. Com isso, a nossa primeira etapa será criar uma Role no IAM com as devidas permissões. Então vamos lá!

Acessando a console do IAM, clique na opção Role do menu lateral e depois no botão Create role, conforme imagem abaixo:

Na tela abaixo, selecione EC2 e clique no botão Next: Permissions.

A seguir, iremos dar um “Attach” na policy AmazonEC2RoleforSSM para que o AWS System Manager tenha as permissões necessárias para executar o procedimento de upgrade.

Na etapa abaixo, você poderá especificar as Tags. Mas para essa demonstração não utilizei Tags.

Para a etapa final, colocaremos um nome para a Role.

Ao clicar no botão Create role irá aparecer a mensagem seguinte, informando que a Role foi criada com sucesso. Anote o nome da Role, pois iremos utilizá-la na etapa de execução do Automation Document.

Com a Role criada e suas devidas permissões, vamos para o que interessa. Iremos acessar o AWS System Manager e utilizar o recurso de Automation. Na tela do System Manager iremos clicar na opção Automation, no Menu lateral e depois no botão Execute automation conforme a descrição da imagem abaixo:

Será carregado uma tela onde você poderá pesquisar e selecionar o Document desejado. Para esse post iremos utilizar o AWSEC2-CloneInstanceAndUpgradeWindows, basta você digitar uma pequena parte do nome conforme a imagem abaixo:

Após pesquisar o nome do Document, você deverá selecionar o Document AWSEC2-CloneInstanceAndUpgradeWindows e clicar no botão Next conforme as imagens abaixo:

Na próxima etapa, iremos configurar o parâmetros para execução do Automation Document:

Nas imagens abaixo, definimos os parâmetros para a execução do Automation, inserindo o ID da Instância que será atualizada, a Role do IAM que criamos, versão do Windows que queremos que a Instância seja atualizada e a subnet onde o processo de atualização será executado. É recomendando utilizar uma subnet para o Automation, diferente da subnet onde está a Instância que será atualizada. A subnet utilizada deverá ter ainda, conexão de saída para os serviços AWS, S3 e Microsoft para download de patches (Windows Update).
Após inserir os parâmetros e clicar no botão Execute o processo de in-place upgrade será iniciado:

Com o Automation em execução, podemos acompanhar com detalhes todas as etapas do procedimento de upgrade conforme as imagens:

Esse procedimento poderá levar algumas horas para finalizar e durante a execução do procedimento, podemos verificar algumas modificações no ambiente. Na execução foi criada uma instância para a realização do procedimento de upgrade e executado o terminate da mesma, após o término do procedimento conforme as imagens:

Como pode ser visto na próxima imagem, o Automation criou uma AMI da Instância original e uma AMI de “pre-upgrade” para instalação dos drives e updates necessários.

Após o término do procedimento de upgrade, será criada uma AMI da sua instância atualizada com o Windows Server 2019 com o nome similar ao da imagem:

Após dar um Launch na AMI atualizada com Windows Server 2019, foi possível acessar a página web publicada no IIS, que havia sido criada ainda na Instância com o Windows Server 2012 .

Com isso podemos concluir que esse documento do AWS System Manager Automation pode ser útil para que você possa atualizar o seu ambiente de Instâncias EC2 Windows, minimizando os riscos de segurança e compliance.

Espero que esse post possa contribuir/auxiliar a comunidade de Cloud AWS.

Até breve!!!

Migração para AWS com Cloud Endure

Olá!!
Se essa é a sua primeira vez por aqui, eu sugiro que você leia o post anterior, sobre Migração para a Nuvem, no seguinte link: https://brenocarvalho.cloud/2020/07/04/migracao-para-nuvem/ ou através da barra lateral do site.


Irei demonstrar nesse post, como é possível migrar os seus servidores para o ambiente da AWS através do Cloud Endure.

Então, vamos lá! Mas, primeiramente faremos o nosso registro para obter a licença para a utilização gratuita.

Ao clicar no botão, Obtenha licenças gratuitas do Cloud Endure Migration, irá carregar a página de registro conforme abaixo:

Após o preenchimento dos seus dados, você irá receber um e-mail similar ao e-mail abaixo, para confirmação do seu cadastro.

Após clicar no link, confirm your account request, irá carregar a página abaixo, informando que sua conta está ativada.

Após efetuar o logon, você deverá criar o seu projeto para que possa sincronizar às máquinas que deseja migrar para a AWS.

Com o projeto criado, agora iremos configurar o Cloud Endure para que ele possa acessar a sua conta da AWS, para onde serão migrados os servidores, nessa etapa serão necessárias algumas permissões para que o Cloud Endure funcione, veja abaixo:

Após a configuração das chaves, iremos realizar a configuração de replicação, nesse lab, configurei o Replication Settings conforme abaixo e o restante das configurações eu deixei padrão (Default):

Ao clicar em SHOW ME HOW, serão carregadas as informações para a instalação dos agentes nas máquinas Windows e Linux:

Instalação Servidores Windows:
Vamos iniciar demostrando a instalação em servidores Windows, após fazer o download do Agent através do link https://console.cloudendure.com/installer_win.exe copiei o arquivo para a pasta C:\Temp\, executei a linha de comando, conforme a imagem anterior para a instalação em Servidores Windows:

Instalação Servidores Linux:
Na imagem abaixo, o primeiro comando é para fazer o download do instalador do Agent, e o segundo é o comando de instalação.

Após a instalação do Agent, será possível visualizar na console do Cloud Endure que a replicação do máquina foi iniciada:

Enquanto a replicação é realizada, devemos configurar o Blue Print onde iremos informar as configurações da máquina, tais como, tipo de instância, subnet, security group e etc. Nesse post, configurei da seguinte forma, veja abaixo:

Após a replicação, as máquinas que estiverem prontas para serem migradas estarão com o status conforme a imagem:

Iremos realizar o teste clicando em LAUNCH TARGET MACHINES, depois em Test Mode e no botão Continue.
Obs.: Para esse demonstração usei somente o Test Mode.

O progresso do deploy de teste, pode ser acompanhado clicando na Guia Job Progress, conforme exemplo abaixo:

Na imagem a seguir, podemos visualizar o servidor que foi migrado funcionando como uma Instância EC2:

O procedimento para servidores Linux e Windows são os mesmos.

Podemos utilizar o Cloud Endure Migration para migrar os seguintes sistemas, Windows Server versões 2003/2008/2012/2016/2019 e distribuições Linux, como CentOS, RHEL, OEL, SUSE, Ubuntu e Debian. O CloudEndure Migration oferece suporte a bancos de dados comuns, tais como, Oracle e SQL Server, além de aplicativos de missão crítica, como o SAP.

Até breve!!

Migração para a Nuvem

No atual contexto em que vivemos, das constantes e aceleradas mudanças, para continuar crescendo nessa era digital e nos prepararmos para as próximas revoluções pós-digitais e as transformações necessárias para a continuidade dos negócios, uma tecnologia importante e necessária para ajudar nesse crescimento é a utilização da nuvem (Cloud Computing). Migrando seus workloads para Nuvem possibilitará que as empresas façam um maior investimento em dados e também em infraestrutura social ao invés do investimento em infraestrutura de TI dentro da empresa (on-premises).

Conforme estudo da IDC #US43535718, Fostering Business and Organizational Transformation to Generate Business Value com Amazon Web Services foram levantados os seguintes dados:

Podemos ter até 31% de economia média de custos com infraestrutura em comparação ao ambiente on premises*.

Ocorreram 7x menos horas de inatividade em 2018 em comparação ao próximo maior provedor de serviços de nuvem*

62% mais eficiente em termos de gerenciamento da infraestrutura de TI em comparações a soluções no local*

A adoção da nuvem nas empresas passa por uma ampla mudança, que impacta a cultura, processos e tecnologias da TI. Mas a boa notícia é que existem boas práticas e frameworks para ajudar nessa transição. Uma ferramenta que pode ajudar no processo de preparação para adoção da Nuvem AWS e a elaboração do plano de migração seria o CART:
https://cloudreadiness.amazonaws.com/
O CART é uma ferramenta que irá guiar a sua empresa na sua jornada para a nuvem de acordo com as diretrizes do CAF – Cloud Adoption Framework.

Mas então vamos lá, falando da parte técnica:
A migração para a nuvem AWS deixou de ser complexa com a sua solução de Cloud Migration, o Cloud Endure Migration reduz os custos da migração, pois simplifica e acelera os procedimentos necessários para a migração de uma infraestrutura física, virtual ou baseada em nuvem, transformando um processo complexo em um processo simples e rápido.
Em poucos minutos você pode configurar a solução e estará pronto para migrar seu primeiro workload.

No próximo post, irei mostrar como configurar e migrar seus servidores do ambiente On-Premises para Nuvem AWS utilizando as soluções Cloud Endure Migration.
Veja no link abaixo:

Outra opção é utilizar AWS Server Migration Service. Post em breve!

Até breve!