O blog da AWS
Migrando aplicações desktop rapidamente para a nuvem de maneira segura e automatizada
Existem diversos tipos de aplicações no mercado com diferentes características e requisitos. Uma empresa quando pensa em colocar suas aplicações na nuvem para ter os benefícios de escalabilidade, resiliência e economia de custo, às vezes esbarra em algumas dificuldades técnicas de compatibilizar sua aplicação com as tecnologias do ambiente na nuvem. Um exemplo disso são as aplicações desktop, por exemplo baseadas em Delphi, que foram e ainda são muito utilizadas, mas que estão em um modelo de utilização de recursos de computação na ponta junto do usuário final.
Quando se fala em estratégias de migração de aplicações, geralmente lembramos dos 6 R’s:
- Rehosting: também conhecida como “lift and shift”, é a migração pura sem nenhuma implementação ou otimização do que já existe.
- Replatforming: migração onde são feitas poucas otimizações para atingir alguma benefício tangível, por exemplo, diminuir o esforço de gestão de banco de dados migrando para uma plataforma de banco de dados como serviço como o Amazon Relational Database Service (Amazon RDS).
- Repurchasing: movimentação para um produto diferente, por exemplo, alguma plataforma de SaaS. Migrando uma aplicação CRM para Salesforce.com, um CMS para Drupal e assim por diante.
- Refactoring/Re-architecting: redesenhar como a aplicação está arquitetada e desenvolvida e utilizar funcionalidades nativas da nuvem.
- Retain: Em alguns casos não faz sentido para o negócio migrar alguma aplicação seja por que ela foi atualizada recentemente ou porque ainda não foi priorizada no momento da jornada.
- Retire: Aposentar aplicações que já não são mais utilizadas ou que não fazem mais sentido para uma evolução de negócio.
Aplicações desktop apresentam um desafio um pouco diferente, pois são baseadas principalmente em execução no computador do usuário final. Isto implica também alguns problemas, pois nem sempre o hardware na ponta possui os requisitos mínimos e gestão de segurança que um servidor precisa para executar uma aplicação. Neste contexto, fica a pergunta: É possível trabalhar com este tipo de carga de trabalho na nuvem AWS?
A resposta é SIM!
O cenário a seguir apresenta uma arquitetura real onde uma empresa fornece e gerencia uma plataforma de aplicações na nuvem AWS que são disponibilizadas para os usuários finais substituindo o antigo modelo de instalação local. A migração das aplicações para a nuvem AWS foi feita sem ter feito nenhuma modificação nas aplicações existentes entregando maior segurança e muitas vezes melhor performance para o usuário final.
TRABALHANDO COM DIVERSOS BINÁRIOS E RECURSOS NA NUVEM
Combinando alguns serviços de automação, gerenciamento e computação para usuário final é possível portar facilmente suas cargas de trabalho para a nuvem AWS sem necessidade de refatoração de aplicação agilizando sua migração.
O Amazon AppStream 2.0 é um serviço de computação para usuário final que permite fazer streaming de aplicações tais como cliente/servidor (SAP GUI), gráficos 3D, ferramentas de engenharia (Matlab, R Studio, AutoCad) diretamente para o navegador dos usuários finais.
Os passos do processo de configuração do Amazon AppStream 2.0 são apresentados abaixo:
Geralmente, uma única imagem contém diferentes aplicações que podem ser disponibilizadas para um grupo de usuários acessarem. Em um cenário onde existem várias versões de uma mesma aplicação a ser disponibilizada por tipo de usuário final é necessário se preocupar como organizar suas aplicações e os recursos que cada aplicação terá acesso.
No caso de Amazon AppStream 2.0 existem também alguns limites para a definição de recursos no serviço. Um recurso que pode ser utilizado para conseguirmos trabalhar com um número virtualmente ilimitado de aplicações é o Session Script. Você pode utilizar session scripts para gerenciar a experiência do usuário de streaming do Amazon AppStream 2.0. Ele permite executar scripts antes da sessão de streaming iniciar, depois da sessão finalizar e também para acessar recursos no armazenamento do Amazon S3, entre outras opções.
Visão Geral da Solução
Considerando que cada usuário final deve ter acesso a um executável podendo ser diferente dos demais e um arquivo de propriedades INI para comunicação com os recursos adicionais, podemos utilizar a seguinte estrutura:
- Bucket no Amazon S3 com pastas para todas as versões de cada aplicação. Dentro dessas pastas ficam o executável, DLL, e arquivo INI. Estes arquivos são copiados para a instância do usuário usando session script antes do início da sessão deixando pronto o ambiente para o usuário utilizar;
- Uma tabela de banco de dados no Amazon DynamoDB com a relação entre as versões de aplicações e os usuários. Esta tabela é acessada pelo session script para determinar em qual pasta do bucket deve-se procurar os arquivos a serem copiados para a instância do Amazon AppStream 2.0;
- Uma imagem do Amazon AppStream 2.0 com um session script para identificar o usuário logado e verificar no banco de dados a qual aplicação ele tem acesso para copiar os arquivos do S3 para dentro da imagem e executar a aplicação.
- Repositório de usuários, por exemplo Microsoft Active Directory, para controlar o acesso.
- A frota de instâncias EC2 que suportam os acessos tem mecanismo de Auto Scaling para crescer ou diminuir o número de instâncias conforme a carga.
- Métricas do Amazon CloudWatch para contabilizar o uso do serviço e permitir que seja feito posteriormente o cálculo de cobrança do uso das aplicações para o usuário final.
Conclusão e próximos passos
Nesse blog post, descrevemos uma arquitetura que possibilita distribuir diferentes versões de aplicações para os usuários finais diretamente via streaming para o navegador.
Para saber mais sobre outros casos de uso e funcionalidades do Amazon AppStream 2.0, visite os seguintes posts:
Creating an image programmatically with AppStream 2.0 Image Assistant CLI operations
How to use Amazon AppStream 2.0 to reduce your bastion host attack surface
Sobre o autor
Luiz Yanai é arquiteto de soluções na AWS e especialista em tecnologias Serverless, atua auxiliando clientes de diversos segmentos em suas jornadas para a nuvem. Com mais de 15 anos de experiência em arquitetura e desenvolvimento de soluções envolvendo sistemas empresariais e de missão crítica.