Use o código BLACKFRIDAY2024 e tenha 25% de desconto! Válido até 29/11/2024
Modernização de Aplicação no Microsoft Azure Explorando o potencial da nuvem
Time de Customer Engineers da MicrosoftIntrodução
Sejam bem-vindos ao mundo da computação, onde aplicações podem ser desenvolvidas em um curto espaço de tempo e hospedadas em ambientes prontos e capazes de atender qualquer volume de usuários simultâneos ou de demanda de negócio, seja ele sazonal ou diário. E sim, estamos falando da computação em nuvem, no mundo Microsoft, o Microsoft Azure.
Logicamente, essa é uma afirmação que conta com inúmeras variáveis para ser verdadeira. Mas felizmente a maioria delas está cada vez mais sob responsabilidade de quem constrói as aplicações, sejam eles arquitetos de desenvolvimento, arquitetos de infraestrutura ou desenvolvedores. No atual momento em que vivemos, a maioria dos serviços utilizados pelas aplicações, como banco de dados, caches, notificações, mensagerias, monitorações e outros, já foi pensada, desenhada e desenvolvida na nuvem para ter alta disponibilidade, escalabilidade e, dessa forma, atender altíssimos volumes de transações simultâneas, e tudo dependendo apenas das escolhas corretas dos serviços de nuvem, seu tamanho, região e suas configurações.
Não estamos afirmando que toda a responsabilidade de fazer uma aplicação cumprir o seu papel com excelência seja unicamente do time que a produziu, mas com certeza conseguimos afirmar que cada vez mais o poder para isso acontecer está nas mãos dos arquitetos e desenvolvedores, pois toda infraestrutura necessária (e serviços dependentes) para rodar nossas aplicações está pronta, disponível e cada dia mais robusta e madura. Sabemos também que o sucesso de uma aplicação não está apoiado unicamente no seu processo de desenvolvimento inicial, mas sim em um ciclo de desenvolvimento e entrega contínua, e aqui entra a importância da cultura e prática DevOps.
Porém, para que possamos extrair todo esse potencial mencionado da computação em nuvem para nossas aplicações, precisamos conhecer os serviços disponíveis na nuvem, suas características de uso e corretas aplicabilidades. Somente assim tomaremos as decisões corretas para obter os principais benefícios da computação em nuvem, que estão atreladas a produtividade e agilidade no desenvolvimento (time to market), disponibilidade, performance e eficiência operacional (redução de custos).
Além de conhecer os serviços disponíveis e suas características a fim de fazer as escolhas corretas dadas as necessidades de sua aplicação, também precisamos entender os novos padrões de arquitetura, desenvolvimento e metodologias para obter os benefícios da computação em nuvem. Por exemplo, para termos uma aplicação com alta disponibilidade, não podemos contar somente com as escolhas corretas dos serviços de nuvem, precisamos também definir uma arquitetura e produzir código capaz de se recuperar de erros em tempo de execução (resiliente) e escalar com base na demanda, sem perder performance.
Agora imagine a situação de aplicações que recebem grandes variações no volume de acessos e processamento, com picos baseados em sazonalidades e datas especiais. Se elas não forem arquitetadas e construídas pensando nos pontos mencionados, provavelmente não conseguirão tirar proveito da computação em nuvem e sua performance não será satisfatória.
O objetivo aqui não é trazer uma visão de dificuldade ou complexidade para o desenvolvimento de aplicações para nuvem, muito pelo contrário, pois ela realmente traz muita facilidade, agilidade e um potencial quase sem limites para nossas necessidades atuais. O objetivo principal até aqui é entendermos que, quanto mais essas aplicações estiverem adequadas para nuvem, melhor poderão explorar os benefícios deste novo mundo, citados anteriormente. Dessa forma, uma aplicação que foi desenhada para nuvem desde o início de seu desenvolvimento com certeza terá vantagem em obter esses benefícios.
Sabemos que esse não é um cenário único, principalmente falando do mundo corporativo, que possuía aplicações projetadas e desenvolvidas em uma época em que nem se imaginava a computação em nuvem. Agora, essas aplicações podem ser migradas para nuvem e obter os mesmos benefícios através de um processo de modernização. É exatamente este cenário que exploraremos em detalhes neste livro. Passaremos por todas as etapas, processos, conceitos e práticas para levar uma aplicação não projetada para nuvem, obtendo o máximo da computação em nuvem.
Antes de iniciarmos nossa jornada na modernização de aplicação, falaremos um pouco sobre alguns conceitos essenciais do Microsoft Azure e também do Microsoft Azure Well-Architected Framework, framework de arquitetura de soluções para nuvem. Esses conceitos serão a base para nossa jornada e todas as ações tomadas durante a modernização.
Como este livro está organizado?
O livro está organizado para você ter uma sequência cronológica para migrar sua aplicação para a nuvem. Começamos no 'Capítulo 1 - Conceitos iniciais' falando dos conceitos básicos, modelos de implantação e sobre o framework Azure Well-Architected. No 'Capítulo 2 - Lift & Shift', apresentamos a arquitetura da aplicação que vamos utilizar no livro e abordamos a estratégia Lift & Shift de migração para o Microsoft Azure com o mínimo de alterações. No 'Capítulo 3 - Provisionamento da infraestrutura', criaremos todo o ambiente necessário para a aplicação onde ela possa ser facilmente escalada e, no 'Capítulo 4 - Publicação da aplicação', vamos adaptá-la para que ela seja executada em um ambiente escalável e fazer a primeira publicação da aplicação. No 'Capítulo 5 - Automação da publicação', criaremos um script para ajudar em todos os processos de publicação.
No 'Capítulo 6 - Gerenciamento de código-fonte', começamos a adicionar algumas práticas básicas para o time de desenvolvimento, como gerenciamento de código, estratégias de branch e merge usando o GitHub e a adotar algumas práticas de DevOps, como Integração Contínua (CI) e Entrega Contínua (Continuous Delivery). Vamos usar GitHub Actions para automatizar todo o processo de Build e Release visto no capítulo anterior. Com a aplicação rodando no Microsoft Azure, adicionaremos algumas melhorias na aplicação. Dentro do 'Capítulo 7 - Monitoramento da solução', vamos configurar o Application Insights para monitorar a aplicação, acompanhar algumas métricas e começar a conhecer os usuários da aplicação, criando um processo de feedback contínuo.
No 'Capítulo 8 - Testes & QA', vamos melhorar o processo de desenvolvimento com a adoção de testes unitários, testes integrados, testes de interface etc., aumentando a qualidade da nossa aplicação. Para realizar a execução dos testes de maneira automatizada, no 'Capítulo 09 - Automação em ambientes de testes', descrevemos como criar um ambiente isolado para rodar os testes e também integrar a execução do testes unitários como parte do processo de CI.
A partir do 'Capítulo 10 - Desacoplamento' iniciamos uma jornada de melhorias na aplicação. Para que a aplicação possa evoluir, é necessário que ela possua características de flexibilidade e manutenibilidade que podemos obter através de baixo acoplamento entre as suas partes utilizando interfaces e injeção de dependências. No 'Capítulo 11 - Microsserviços', vamos abordar como podemos evoluir nossa aplicação monolítica para que ela possa atender uma maior demanda de usuários adotando uma arquitetura de microsserviços e, no 'Capítulo 12 - Introdução ao contêiner', iniciamos a criação de imagens Docker. Vamos enviá-las para um Container Registry e reconfigurar nosso processo de CI para automatizar tudo isso.
Depois, no 'Capítulo 13 - Orquestração de contêineres', veremos como podemos migrar a aplicação para rodar em um ambiente Docker e sendo orquestrado pelo Kubernetes. O 'Capítulo 14 - Identidade', vamos falar sobre os protocolos OAuth 2.0 e OpenID Connect e algumas formas de manter a aplicação mais segura utilizando serviços de gestão de identidade e proteção como o Azure B2C. Por fim, no 'Capítulo 15 - Resumo' falamos sobre os benefícios que toda essa jornada de adoção à nuvem trouxe para a aplicação e outros serviços do Azure que podemos utilizar.
Prefácio
Rubiana Rosa
Em 2016, o nosso time de engenheiros de suporte da Microsoft teve a fantástica e gratificante experiência em poder compartilhar seu conhecimento, as melhores práticas de desenvolvimento, através da publicação do nosso primeiro livro chamado Desenvolvimento efetivo na plataforma Microsoft: Como desenvolver e suportar software que funciona.
Naquela ocasião, recebemos inúmeros feedbacks sobre como era importante ter um livro feito por desenvolvedores para desenvolvedores, e como o livro havia contribuído positivamente com a enorme comunidade técnica no Brasil. Isso nos incentivou a seguir adiante e a pensar na publicação de um segundo livro.
Durante esse período, muitas coisas mudaram, evoluíram. É sempre impressionante pensar que nos últimos cinco anos direcionamos nossos esforços e trabalhos para suportar nossos clientes no desenvolvimento e migração de suas aplicações para a nuvem. Nós nos preparamos para dar suporte aos nossos clientes para que eles consigam tirar o maior e melhor proveito do investimento feito em nossa plataforma.
Trabalhamos no advento de migrações e no desenvolvimento das aplicações, atendemos a milhares de clientes mundiais e pudemos observar que a transformação digital, a modernização e a migração para a nuvem são um caminho que para muitos ainda pode parecer distante, mas que, por outro lado, pode ser planejado e percorrido de modo rápido e seguro.
Decidimos então escrever nosso segundo livro com o objetivo de compartilhar a experiência do time de engenheiros de suporte da Microsoft, para guiar pessoas pelo caminho para a nuvem com sucesso! Certamente os nossos clientes poderão ter o retorno dos seus investimentos fazendo uso de técnicas e por meio da experiência de se ter um planejamento de modernização e migração e um desenvolvimento efetivo, que os permitam ter suas aplicações rodando na nuvem de maneira segura, escalável e ágil.
É um orgulho enorme poder fazer parte de um time que está sempre se atualizando, buscando o que há de mais moderno para os clientes e para a nossa comunidade técnica. Em um mundo onde a tecnologia muda tão rápido, ter esse compromisso com a atualização tecnológica é um desafio que o time de engenheiros de suporte da Microsoft gosta de enfrentar e compartilhar.
Espero que vocês aproveitem este novo livro, feito com dedicação, e que embarquem conosco nesta jornada para desenvolver suas aplicações seguindo as melhores práticas para que funcionem com sucesso na nuvem!
Rubiana Dalla Rosa, cloud solution architect manager, Apps & Infra, Microsoft
Scott Guthrie
The developer community has the unique opportunity to define the future. This book, written for developers by developers, explores concepts and tools that businesses and organizations of all sizes can adopt to modernize their applications on Microsoft Azure and build their own digital capability.
Scott Guthrie, executive vice president, Cloud + AI, Microsoft
Scott Hanselman
The cloud is confusing. It's happening and it's scary, but it brings with it opportunity and power. One engineer can do the work of many with a clear understanding of the cloud. I run three large websites in Azure and 15 small ones...alone. I have a CI/CD pipeline, reliable builds, automated tests in the cloud, automatic deployments, robust backups, and the result is scalable websites!
This book is rooted in the real world of the cloud and builds on top of real code in the form of the eShopOnTheWeb sample. This sample is then modernized step by step and is moved into the cloud.
There are enough tech books written in English. But this is a cloud book, an Azure book, a Brazilian book, written by Brazilians, for Brazilians. These engineers are your friends, your community leaders, and your software architects.
As a member of the .NET and Azure team at Microsoft, I want to thank the authors for taking this journey, and thank YOU the reader for coming along! Let's build something great!
Scott Hanselman, partner program manager, Developer Division, Microsoft
Quem somos nós?
Alexandre Teoi é engenheiro de computação e atua com desenvolvimento de software há 30 anos. Nesse período, teve a oportunidade de trabalhar com várias linguagens (C, C++, C#), criando e depurando softwares nos mais diversos sistemas operacionais (MS-DOS, Windows, Unix e Linux). Nas horas livres, gosta de passar o tempo com a família.
Augusto Araujo atua como DevOps customer engineer no time de Apps & Infra Microsoft Brasil. Possui graduação em Tecnologia em Processamento de Dados e trabalha com desenvolvimento e suporte ao DevOps há 16 anos. Em seu tempo livre, gosta de praticar artes marciais (Jiu-Jitsu), assistir a séries e viajar para Minas Gerais para ver e passar um tempo com o Joaquim, seu filho.
Beatriz Matsui é bacharel em Ciência da Computação e em Ciência e Tecnologia pela Universidade Federal do ABC (UFABC). Tem experiência nas áreas de Inteligência Artificial e aprendizado de máquina e atua com desenvolvimento de software, DevOps e codificação de testes. Atualmente, é consultora de Azure Cloud & AI na Microsoft e cursa o mestrado em Ciência da Computação na UFABC. Em seu tempo livre, gosta de ler, assistir a filmes e séries e aprender novos idiomas.
Christiano Donke trabalha com desenvolvimento desde os 12 anos de idade, e há 10 profissionalmente. É especialista em desenvolvimento mobile, serviços cognitivos e chatbots. Trabalha na Microsoft há sete anos, atuando com suporte e ministrando treinamentos. Também atua como professor no curso de Inteligência Artificial do SENAC-SP. No tempo livre, gosta de ficar em família, ver filmes e jogar um pouco.
Cleber Dantas é especialista em desenvolvimento de software com foco em computação em nuvem, arquitetura de soluções e troubleshooting. Tem 15 anos de experiência no mercado de TI, possui passagens por startups e empresas de grande porte.
Demetrio Costa atua como customer engineer na Microsoft. É formado em Processamento de Dados pela FATEC-SP e possui especialização em Engenharia de Software pela PUC-SP. Com quase 15 anos de experiência e 5 de Microsoft, atua com desenvolvimento e suporte de soluções diversas. Demetrio gosta de passar seu tempo livre com sua esposa Aline e seu filho Pedro, conhecendo lugares novos ou assistindo a filmes e séries.
Eric Shimokawa sempre foi apaixonado por tecnologia e informática. Aos 11 anos já brincava de desenvolvimento em seu MSX e desde lá nunca mais abandonou o computador. Com mais de 25 anos de experiência em TI, já atuou com infraestrutura, desenvolvimento, testes e gerenciamento de equipes. Apaixonado por agilidade e boas práticas, trabalhou por 8 anos como PFE/CE de Desenvolvimento e DevOps. Atualmente é Head de TI na Nova Futura Investimentos.
Fernando Henrique Inocêncio Borba Ferreira atua como software engineer em produtos dentro do Microsoft Azure. No passado, atuou como software engineer no Microsoft Windows e como premier field engineer em Modern Apps. Fernando possui bacharelado e mestrado em sistemas de informação. Atuando com desenvolvimento de software há mais de dez anos, ele também foi Microsoft MVP em Data Platform Development e Visual C#. Fernando usa seu tempo livre com sua família, livros, passeando ao ar livre e auxiliando pesquisas acadêmicas.
Iury Oliveira atua como customer engineer na Microsoft. Bacharel em Administração de Empresas e Ciência da Computação, trabalha com desenvolvimento e suporte ao desenvolvimento de software há quase 20 anos. Foi Microsoft Certified Trainer e ministra palestras em diversos eventos. Em seu tempo livre, gosta de ler, assistir a filmes, ir ao Parque do Ibirapuera com o pequeno João, seu primeiro filho.
James Jodai atua como customer engineer em CSU Apps & Infra. Possui bacharelado em Ciência da Computação e MBA em gestão estratégica e econômica de projetos e atua com suporte e desenvolvimento de software há mais de 20 anos. Em seu tempo livre, gosta de assistir a filmes com sua família e pescar.
José Otávio Quaglio atua como software engineer no time do M365. Anteriormente atuava como customer engineer no time de Apps & Infra. Possui bacharelado em Ciência da Computação e MBA em Gestão de Projetos. Trabalha com desenvolvimento de software e suporte há mais de 15 anos, em sua maior parte com tecnologias Microsoft. Em seu tempo livre costuma assistir a séries, jogar videogame, viajar e sair com os amigos e família.
Leandro Prado (Piá) atua como customer engineer em Apps & Infra focado em DevOps. Bacharel em Sistemas de Informação pela PUC-PR, ao longo da carreira trabalhou como desenvolvedor em diversas linguagens (Delphi, PHP, Java, .NET) e atualmente ajuda clientes Microsoft Premier a adotar as melhores práticas em DevOps. Em seu tempo livre, costuma sujar a mão de graxa debaixo do seu carro de arrancada.
Luís Henrique Demetrio possui bacharelado em Análise de Sistemas e pós-graduação em Engenharia de Software no ITA. Possui 20 anos de experiência na profissão. Trabalha como customer engineer no time global da Microsoft em conjunto com os Program Managers do Windows.
Marcelo Tokunaga Nakamura é engenheiro do time Azure App Consult baseado em São Paulo e tem mais de 20 anos de experiência trabalhando com a Microsoft e parceiros desenvolvendo e arquitetando soluções. Desde 2010 trabalha com Azure focando em contêineres, dispositivos e microsserviços. Marcelo também é pai de três filhos e avô de um neto, músico e proprietário de um pequeno pet shop.
Rafael Guglielmello de Andrade atua como customer engineer em Apps & Infra. Formado em Análise de Sistema e MBA em Engenharia de Software. Atua com aplicações corporativas há dez anos com foco em tecnologias Microsoft e projetos de integração. Em seu tempo livre, gosta de tocar clássicos do rock na guitarra/violão e estuda técnicas de fotografia.
Rafael Teixeira é formado em Engenharia da Computação, pós-graduado em Segurança da Informação pelo ITA e possui MBA em Gestão de Tecnologia pela FGV. É apaixonado por computadores e tecnologia desde a infância. Curioso em todas as áreas da computação, acabou focando sua carreira em desenvolvimento de software, análise avançada de performance e problemas produtivos de aplicações. Com mais de 12 anos de experiência e há 8 atuando como engenheiro (Customer Engineer) na Microsoft, ajuda clientes em suas jornadas de sucesso através da tecnologia. Além disso, participou do desenvolvimento de ferramentas e produtos da Microsoft, como o DebugDiag e *.NET Performance Tuning e Optimization*. Fora da computação, adora conhecer e aprender coisas novas, desde a prática de diferentes esportes, mecânica, eletrônica, liderança, pessoas até gastronomia.
Rubiana Dalla Rosa possui mais de 25 anos de experiência em TI. Trabalhou nos últimos 14 anos na Microsoft, empresa pela qual tem profunda admiração e respeito. Com foco em atendimento aos clientes e gerenciamento de pessoas, Rubiana acredita que um time forte, com pessoas altamente capacitadas e preparadas, é a chave para revolucionar os negócios.
Victor Zamora (Vitão) atua como customer engineer em Apps & Infra. Bacharel em Administração de Empresas, trabalha com desenvolvimento de software há mais de 30 anos tendo desempenhado diversos papéis ao longo desse tempo. Microsoft Certified Trainer, ministrou treinamentos nos principais parceiros MS em São Paulo. Nas horas vagas, gosta de ler, ouvir música ou assistir a algo interessante na televisão.
Sumário
- 1 Conceitos iniciais
- 1.1 O que é o Microsoft Azure?
- 1.2 Modelos de implantação
- 1.3 Microsoft Azure Well-Architected
- 2 Lift & Shift
- 2.1 Aplicação utilizada
- 2.2 Estratégia de migração com Azure
- 2.3 Resumo
- 3 Provisionamento da infraestrutura
- 3.1 Criação dos recursos em nuvem
- 3.2 Resumo
- 4 Publicação da aplicação
- 4.1 Adaptação da aplicação
- 4.2 Publicação
- 4.3 Teste da aplicação
- 4.4 Resumo
- 5 Automação da publicação
- 5.1 Script de publicação
- 5.2 Artefatos de publicação
- 5.3 Arquivos de configuração da extensão de script personalizado
- 5.4 Habilitação do script personalizado
- 5.5 Resumo
- 6 Gerenciamento de código-fonte
- 6.1 Sistemas de controle de versão
- 6.2 O que é Git?
- 6.3 Como iniciar a utilização do Git?
- 6.4 Enviando seu código para o GitHub
- 6.5 Estratégia de branch/merge
- 6.6 Pull Request
- 6.7 GitHub Actions
- 6.8 Criando um workflow no GitHub Actions
- 6.9 Resumo
- 7 Monitoramento da solução
- 7.1 Ativação da monitoração com Application Insights
- 7.2 Monitoração customizada
- 7.3 Resolvendo problemas com o Application Insights
- 7.4 Resumo
- 8 Testes & QA
- 8.1 Importância dos testes
- 8.2 Teste exploratório
- 8.3 Teste de unidade
- 8.4 Resumo
- 9 Automação em ambientes de testes
- 9.1 Teste de Interface
- 9.2 Testes Automatizados de Interface com Selenium
- 9.3 Testes Automatizados com Selenium no Visual Studio
- 9.4 Ambientes de Testes
- 9.5 Reconfiguração CI/CD
- 9.6 Resumo
- 10 Desacoplamento
- 10.1 Reduzir o acoplamento
- 10.2 Interfaces
- 10.3 Injeção de dependências
- 10.4 Como o eShopOnWeb usa interfaces e injeção de dependências
- 10.5 REST APIs
- 10.6 Repositórios binários
- 10.7 Resumo
- 11 Microsserviços
- 11.1 Vantagens ao adotar microsserviços
- 11.2 Microsserviços: usar ou não usar?
- 11.3 Onde hospedar nossa aplicação OrderApi?
- 11.4 Centralizar o armazenamento e o gerenciamento de configurações das aplicações
- 11.5 Configurar a proteção de dados da nossa aplicação em ASP.NET Core
- 11.6 Migração da Versão do .NET para o 5.0
- 11.7 Resumo
- 12 Introdução ao contêiner
- 12.1 O que é?
- 12.2 Armazenamento e distribuição de imagens
- 12.3 Como criar as imagens de contêiner da solução
- 12.4 Automatizar a criação das imagens e envio para registro
- 12.5 Resumo
- 13 Orquestração de contêineres
- 13.1 Introdução ao Kubernetes
- 13.2 Introdução ao Azure Kubernetes Service
- 13.3 Monitoração dos recursos do cluster de AKS
- 13.4 Infraestrutura como código
- 13.5 Resumo
- 14 Identidade e segurança
- 14.1 O que é Identidade como Serviço (IDaaS)?
- 14.2 Diferenças entre Azure AD e Azure AD B2C
- 14.3 Os protocolos OAuth 2.0 e OpenID Connect
- 14.4 Como implementar o Azure AD B2C
- 14.5 Configuração da aplicação
- 15 Resumo
- 15.1 Benefícios
- 15.2 Outros serviços que merecem ser explorados
- 16 Referências
Dados do produto
- Número de páginas:
- 468
- ISBN:
- 978-65-86110-72-2
- Data publicação:
- 06/2021