/Azure-Lab-SAA

Documentação da execução do laboratório prático do evento Semana Arquiteto Azure promovido pela TFTEC Cloud.

Evento Semana Arquiteto Azure

Documentação das atividades realizadas na execução do laboratório prático do evento Semana Arquiteto Azure promovido pela TFTEC Cloud.

Objetivos do Projeto SAA

  • Realizar a migração das Aplicações da TFTEC Cloud para o Azure
  • Escopo técnico:
    • Configuração de um Modelo de Nuvem Híbrida: Azure e On-premises
    • Definição de conectividade ligando a rede local com o ambiente do Azure
  • Avaliações para estabelecer critério técnico e financeiro para estratégia de migração

Etapas de Migração para Nuvem

  • Fazer o Inventário do Ambiente (Azure Migrate)
  • Definir a Estratégia de Migração
  • Desenhos arquiteturais (atual/ proposta para migração)
  • Estimativa de Precificação
  • Avaliação CPSDM
  • Padrões de Taxonomia

Arquitetura Local (atual) - On Premises

  • Servidor com duas Aplicações: Sistema de Lçto de Despesas; Dashboard de apresentação de informações
  • Servidor de Database sendo acessado pelas duas aplicações

Diagrama da Arquitetura Local:

diagram-onpremises

Arquitetura proposta para Migração - Azure e Local

Diagrama da Arquitetura Híbrida:

  • VPN S2S: conexão do Azure com On Premises
    • Azure: VPN Gateway
    • Local: Firewall
  • Migração do Sistema de Lçto de Despesas: Azure App Service
  • Migração do DB: Azure SQL Database

diagram-azure

Precificação do Projeto

Estimativa de Preço para o Projeto:

estimativa-preço

Metodologia CPSDM

Fatores:

  • Custo: peso 2
  • Performance: peso 1,5
  • Seguro: peso 1,5
  • Disponível: peso 1
  • Moderno: peso 1

Pontuações:

  • 1: Não aderente
  • 2: Parcialmente aderente
  • 3: Totalmente aderente

Resultados:

  • 21 - 15: recurso altamente adequado às necessidades do Cliente
  • 14 - 12: recurso moderadamente adequado às necessidades do Cliente
  • 07 - 12: recurso não recomendado às necessidades do Cliente

Resultados da avaliação CPSDM realizada para o Projeto:

resultados-CPSDM

Padrões de Taxonomia

Padrões de nomenclatura para os recursos do Azure utilizados no Projeto.

Recurso Ex. Taxonomia Descrição
Resource Group rg-prd-prj rg - recurso
prd - ambiente
prj - projeto
Virtual Machine vm-ad-prd-eastus vm - recurso
ad - workload
prd - ambiente
eastus - região
Virtual Network vnet-prd-eastus-001 vnet - recurso
prd - ambiente
eastus - região
Subnet snet-prd-eastus-001 snet - recurso
prd - ambiente
eastus - região
Network Security Group nsg-prd-eastus-001 nsg - recurso
prd - ambiente
eastus - região
Public IP pip-vm-prd-eastus-001 pip - recurso
vm - recurso associado
prd - ambiente
eastus - região
Application Gateway agw-prd-uks-001 agw - recurso
prd - ambiente
uks - região

Ambiente Local: detalhes de execução do Projeto

O ambiente Local (On-premises) será representado dentro do próprio Azure, simulando o que seria o ambiente local das aplicações.

Simulação do ambiente Local criado no Azure

  • Resource Group: rg-local
  • Virtual Network: vnet-local
    • CIDR: 10.0.0.0/16
    • Subnet sub-app: 10.0.1.0/24
    • Subnet sub-db: 10.0.2.0/24
  • Virtual Machines:
    • vm-app: Windows Server 2022 Datacenter Azure Edition
    • vm-db: SQL Server 2022 on Windows Server 2022
  • Network security group: nsg-local
    • Inbound security rules - allow: 3389, 80, 8080

Simulação do Firewall para conectividade da VPN S2S entre Local e Azure

Criação de VM para ser o Firewall/Roteador (NVA - Network Virtual Appliance)

  • Virtual Network: vnet-local-fw
    • CIDR: 10.1.0.0/16
    • Subnet sub-fw: 10.1.1.0/24
  • Virtual Machine (firewall): vm-fw
  • Image: Windows Server 2022 Datacenter Azure Edition
  • Size: Standard B2s
  • Username: [my_user]
  • Password: [my_password]
  • Virtual Network: vnet-local-fw
  • Subnet: sub-fw
  • NIC nsg: Basic (ambiente local: NSG direto na placa de rede)
    • Ports: 3389

Realizar configurações de roteamento na VM (encaminhamento de tráfego)

Obs.: realizar essas configurações após criar recursos do Azure definidos no tópico "Recursos Básicos" mais abaixo.

Configurações no lado do Ambiente Local:

  • Virtual Machines > "vm-fw" > Networking settings > clicar em Network interface (NIC)

    • NIC > IP configurations > IP Settings > Enable IP forwarding: habilitar
  • Conectar na "vm-fw" via RDP (configurar RRAS - Role Remote Access Server - roteamento)

    • Server Manager > Manage > Add Roles and Features
      • Server Roles - Remote Access: habilitar
      • Remote Access > Role Services
        • DirectAccess and VPN (RAS): habilitar
        • Routing: habilitar
      • [Install]
    • Configuração: clicar na notificação no topo direito > Open the Getting Started Wizard (irá carregar janela de configuraçaõ do RAS)
      • Deploy VPN only > botão dir. "vm-fw" > Configure and Enable RAS (criação da Network Interface com Azure)
        • Configuration - selecionar Secure connection between two private networks
        • Demand-Dial Interface Wizard
          • Interface name: VPN-AZURE
          • Connection Type: VPN
          • VPN Type: IKEv2
          • Destination Address: [IP_VirtualNetworkGateway_Azure]
      • "vm-fw" > IPv4 > Static Routes > botão dir. > New Static Route (configuração de Static Rote p/ rede no AZure)
        • Interface: VPN-AZURE
        • Destination: [192.168.0.0] (IP da VNet criada no ambiente do Azure)
        • Mask: 255.255.0.0
      • "vm-fw" > Network Interfaces > "VPN-AZURE" > botão dir. > Properties
        • Options:
          • Connection type: selecionar "Persistent connection"
          • Dialing policy > Redial attempts: 3
        • Security (definição de uma chave compartilhada para conexão):
          • Authentication > selecionar "Use preshared key": [definir_uma_chave_compartilhada]

Configurações no lado do Ambiente Azure:

  • Local Network Gateway > create (representação no Azure do ambiente Local)

    • Name: lng-prd-uks-001
    • Endpoint: IP address
    • IP address: [191.232.171.229] [IP da "vm-fw" - firewall do ambiente local]
    • Address Space(s): (Endereço das redes do ambiente local)
      • 10.0.0.0/16 (vnet-local)
      • 10.1.0.0/16 (vnet-local-fw)
  • Virtual Network Gateway > "vng-prd-uks-001" > Settings > Connections > + Add (configuração da Connection entre VNG e LNG)

    • Connection type: Site-to-Site (IPSec)
    • Name: vpn-azure
    • Virtual network gateway (VNG): vng-prd-uks-001
    • Local network gateway (LNG): lng-prd-uks-001
    • IKE Protocol: IKEv2
  • Connections > "vpn-azure" > Authentication (configurar "Chave Compartilhada" do ambiente Local no Azure)

    • Shared key (PSK): [chave_compartilhada_definida]
    • [Save]

Nesse ponto, a VPN está conectando os dois ambiente, o que precisa agora é definir o Roteamento para que os demais recursos também consigam se comunicar pela VPN.

  • Route Tables > Create

    • Resource group: rg-local
    • Name: rt-azure
  • Route Tables > "rt-azure" > Routes > + Add

    • Route name: route-firewall
    • Destination type: IP Address
    • Destination IP: 192.168.0.0/16 (Endereço da VNet do ambiente do Azure)
    • Next hop type: Virtual appliance
    • Next hop address: 10.1.1.4 (IP da "vm-fw" - firewall)
  • Route Tables > "rt-azure" > Subnets > + Associate

    • VNet: vnet-local-fw
    • Subnet: sub-fw
  • Route Tables > Create

    • Resource group: rg-local
    • Name: rt-azure-eastus
  • Route Tables > "rt-azure-eastus" > Routes > + Add

    • Route name: route-firewall
    • Destination type: IP Address
    • Destination IP: 192.168.0.0/16 (Endereço da VNet do ambiente do Azure)
    • Next hop type: Virtual appliance
    • Next hop address: 10.1.1.4 (IP da "vm-fw" - firewall)
  • Route Tables > "rt-azure-eastus" > Subnets > + Associate

    • VNet: vnet-local
    • Subnet: sub-app
  • Route Tables > "rt-azure-eastus" > Subnets > + Associate

    • VNet: vnet-local
    • Subnet: sub-db

Peering entre VNets "vnet-local" e "vnet-local-fw"

Obs.: a separação em duas VNets para simulação do ambiente Local (On-premises) foi para criação das VMs em Regiões diferentes, possibilitando assim, a realização do laboratório utilizando uma contra "Free Tier".

  • Virtual Network > "vnet-local" > Settings - Peerings > + Add:
    • This VNet - Peering link name: local-to-local-fw
    • Allow 'vnet-local' to access 'vnet-local-fw': habilitado
    • Allow 'vnet-local' to receive forwarded traffic from 'vnet-local-fw': habilitado
    • Remote Vnet - Peering link name: local-fw-to-local
    • Virtual network: vnet-local-fw
    • Allow 'vnet-local-fw' to access 'vnet-local': habilitado
    • Allow 'vnet-local-fw' to receive forwarded traffic from 'vnet-local': habilitado

Simulação de um "Client" para teste de conectividade nas Aplicações/rede/Azure

  • Virtual Machine: vm-client
  • Image: Windows 11 Pro
  • Size: Standard B2s
  • Username: [my_user]
  • Password: [my_password]
  • Virtual Network: vnet-local-fw
  • Subnet: sub-fw
  • NIC nsg: Basic (ambiente local: NSG direto na placa de rede)
    • Ports: 3389

Obs.: acessar as VMs e desabilitar o firewall para realizar os testes de conectividade entre ambientes

Ambiente Azure: detalhes de execução do Projeto

Recursos Básicos

  • Resource Group: rg-prd-saa
  • Virtual Network: vnet-prd-uks-001
    • CIDR: 192.168.0.0/16
    • Subnet snet-prd-uks-001: 192.168.1.0/24
  • VNet > Subnet > + Gateway subnet:
    • GatewaySubnet: 192.168.2.0/24
  • Network Security Group:
    • nsg-prd-uks-001
    • Subnets > + Associate: snet-prd-uks-001
  • Virtual Network Gateway:
    • vng-prd-uks-001
    • Gateway type: VPN
    • SKU: VpnGw1
    • VNet: vnet-prd-uks-001 (deve carregar a Subnet "GatewaySubnet")
    • Public IP > new: pip-vng-prd-uks-001
    • Enable active-active mode: Disable

Criação de uma VM para testes de conectividade no ambiente

  • Resource group: rg-prd-saa
  • vm-tmp-dev
  • Image: Windows Server 2022 Datacenter Azure Edition
  • Size: Standard B2s
  • Username: [my_user]
  • Password: [my_password]
  • Virtual Network: vnet-prd-uks-001
  • Subnet: snet-prd-uks-001
  • NIC nsg: None (irá usar o NSG da Subnet)

Habilitar conexão RDP com a VM no NSG:

  • Network Security Group > "nsg-prd-uks-001"
    • Inbound security rules > + Add:
      • Source: Any
      • Destination: IP Addresses [192.168.1.4]
      • Service: RDP
      • Allow
      • Priority: 300

Obs.: acessar a VM e desabilitar o firewall para realizar os testes de conectividade entre ambientes

Migração da Aplicação na VM para um App Service

Projeto do Azure Migrate

  • Azure Migrate > Create project
    • Project: prj-saa
    • Geography: US

Azure App Service Plans

  • App Service Plans > Create
    • Name: asp-sis-uks-001
    • OS: Windows
    • Pricing Plan: Standard S1

Executar o processo de migração na VM para o App Services

  • Conectar na "vm-app" e Instalar o Assistente de Migração do App Service para .NET
    • baixar/instalar assistente: https://appmigration.microsoft.com/api/download/windows/AppServiceMigrationAssistant.msi
    • Abrir o App Service Migration Assistant
      • Executar o "Assessment Report" para o web site desejado
      • Azure Migrate Hub: projeto do Azure Migrate criado anteriormente no portal do Azure - "prj-saa"
      • Destination Site Name: app-saa [unique-site-name]
      • App Service Plan > Use existing: criado anteriormente no portal do Azure - "asp-sis-uks-001"
      • [Migrate]

Ajustes de Conectividade do App Service com a Database na "vm-db"

  • Virtual Network > "vnet-prd-uks-001" > Subnets > + Subnet (Subnet exclusiva para VNet Integration do App Service)

    • Name: snet-int-uks-001
    • Subnet address range: 192.168.3.0/24
  • App Service > "app-saa" > Networking > Outbound traffic > VNet integration > clicar em "Not configured"

    • Add VNet integration
    • VNet: "vnet-prd-uks-001"
    • Subnet: "snet-int-uks-001"

Migração do SQL Server na VM para o Azure SQL Database

Executar o processo de migração na VM de dados para o SQL Database

  • SQL databases > Create

    • Database name: saa-database (utilizar mesmo nome do DB no SQL Server na VM)
    • Server > Create new:
      • Server name: srv-saadb-prd-uks-001
      • Authentication: Use SQL Authentication
      • Server admin login: [my_username] (usar mesmo usuário do SQL Server na VM)
      • Password: [my_password] (usar mesmo password do SQL Server na VM)
    • Workload environment: Production
    • Compute + storage > Configure database:
      • Service tier: DTU-based - Standard
      • [Definir DTUs e Storage, ex.: 10 DTUs; 5 Gb storage]
  • SQL servers > "srv-saadb-prd-uks-001" > Networking (definição de Private Endpoint para conectividade interna com o SQL Database)

    • Private access > Create a private endpoint
      • Name: pvt-saadb-prd-uks-001
      • VNet: vnet-prd-uks-001
      • Subnet: snet-prd-uks-001
      • Integrate with private DNS zone: Yes
  • Private DNS zones > "privatelink.database.windows.net" > VNets links (cria o link das demais VNets ao DNS Zone criado pelo Private Endpoin)

    • Add:
      • Link name: link-local
      • Virtual network: vnet-local
    • Add:
      • Link name: link-local-fw
      • Virtual network: vnet-local-fw
  • Conectar na "vm-db" e Instalar o Microsoft Data Migration Assistant

    • baixar/instalar assistente: https://www.microsoft.com/en-us/download/details.aspx?id=53595
    • Abrir o Data Migration Assistant > + New (primeiro faz o Assessment da Database)
      • Project type: Assessment
      • Project name: ass-saa-db
      • Assessment type: Database Engine
      • Source server type: SQL Server
      • Target server type: Azure SQL Database
      • [Create]
      • Select Sources
        • Server name: localhost
        • Authentication type: SQL Server Authentication
        • Username: [my_username]
        • Password: [my_password]
        • Connection properties (marcar): Encrypt connection; Trust server certificate
  • Abrir o Data Migration Assistant > + New (agora faz o projeto de Migração do Schema da Database)

    • Project type: Migration
    • Project name: mgt-saa-db
    • Source server type: SQL Server
    • Target server type: Azure SQL Database
    • Migration scope: Schema only (melhor prática migrar de forma separada o Schema e depois Dados)
    • [Create]
    • Select Source (SQL Server local na VM)
      • Server name: localhost
      • Authentication type: SQL Server Authentication
      • Username: [my_username]
      • Password: [my_password]
      • Connection properties (marcar): Encrypt connection; Trust server certificate
    • Select target (Azure SQL Database)
      • Server name: "srv-saadb-prd-uks-001.database.windows.net"
      • Authentication type: SQL Server Authentication
      • Username: [my_username]
      • Password: [my_password]
      • Connection properties (marcar): Encrypt connection; Trust server certificate
  • Abrir o Data Migration Assistant > + New (finalmente faz o projeto de Migração dos Dados da Database)

    • Project type: Migration
    • Project name: mgt-saa-db-data
    • Source server type: SQL Server
    • Target server type: Azure SQL Database
    • Migration scope: Data only
    • [Create]
    • Select Source (SQL Server local na VM)
      • Server name: localhost
      • Authentication type: SQL Server Authentication
      • Username: [my_username]
      • Password: [my_password]
      • Connection properties (marcar): Encrypt connection; Trust server certificate
    • Select target (Azure SQL Database)
      • Server name: "srv-saadb-prd-uks-001.database.windows.net"
      • Authentication type: SQL Server Authentication
      • Username: [my_username]
      • Password: [my_password]
      • Connection properties (marcar): Encrypt connection; Trust server certificate

Atualizar a Connection String das Aplicações apontando para o Azure SQL Database

  • SQL databases > "saa-database" > Connection strings

    • ADO.NET (SQL authentication): copiar connection string
  • Conectar na "vm-app" > Editar arquivo "appsettings.json" das aplicações trocando a connection string

    • c:/inetpub/wwwroot/Dashboard (Nuvem Híbrida: apenas o Dashboard ficará rodando na VM)
  • App Services > "app-saa" > Settings - Configuration > Connection strings > New connection string

    • Name: DefaultConnection
    • Value: [colar_connection_string_copiada]
    • Type: SQLAzure
    • [Save]

Configuração do Azure Application Gateway

Diagrama de como o Application Gateway trabalha:

how-application-gateway-works

  • Virtual Network > "vnet-prd-uks-001" > Subnets > + Subnet (Subnet exclusiva para Application Gateway)

    • Name: snet-agw-uks-001
    • Subnet address range: 192.168.4.0/24
  • Application Gateway > Create

    • Name: agw-prd-uks-001
    • Tier: WAF V2 (habilitar o WAF como boa prática de segurança)
    • Enable autoscaling: No
    • Instance count: 2
    • WAF Policy > Create new:
      • Name: rule-WAF
    • VNet: vnet-prd-uks-001
    • Subnet: snet-agw-uks-001
    • Frontend IP type: Public
    • Public IPv4 address > Add new:
      • Name: pip-agw-prd-uks-001
    • Backends > Add a backend pool: (Aplicação no App Service)
      • Name: pool-sistema-app
      • Target type: App Services
      • Target: "app-saa"
    • Backends > Add a backend pool: (Aplicação na VM)
      • Name: pool-dashboard-vm
      • Target type: IP address
      • Target: "10.0.1.4"
    • Configuration > Routing rules > Add a routing rule: (Aplicação no App Service)
      • Rule name: rule-sistema-app
      • Priority: 100
      • Listener:
        • Listener name: lst-sistema-app
        • Protocol: HTTP
        • Port: 80
      • Backend targets:
        • Target type: Backend pool
        • Backend target: "pool-sistema-app"
        • Backend settings > Add new:
          • Backend settings name: https-sistema-app
          • Backend protocol: HTTPS
          • Backend port: 443
          • Backend server's certificate by a well-known CA: Yes
          • Host name: Yes
          • Host name override - Host name: "app-saa.azurewebsites.net"
      • [Add]
    • Configuration > Routing rules > Add a routing rule: (Aplicação na VM)
      • Rule name: rule-dashboard-vm
      • Priority: 101
      • Listener:
        • Listener name: lst-dashboard-vm
        • Protocol: HTTP
        • Port: 8080
      • Backend targets:
        • Target type: Backend pool
        • Backend target: "pool-dashboard-vm"
        • Backend settings > Add new:
          • Backend settings name: http-dashboard-vm
          • Backend protocol: HTTP
          • Backend port: 8080
          • Host name: No
      • [Add]

Ajustes Finais de Segurança

Configurar Private Endpoint para App Service

A configuração de um Private Endpoint no App Service tem o objetivo de impedir o acesso público ao Web App por meio do seu domínio default, permitindo o acesso seguro ao Sistema apenas através do Application Gateway.

  • App Services > "app-saa" > Networking > Inbound traffic config > Private endpoints
    • Add > Express:
      • Name: pvt-wap-prd-uks-001
      • VNet: vnet-prd-uks-001
      • Subnet: snet-prd-uks-001
      • Integrate with private DNS zone: Yes

Retirar o IP público da VM

Retirar o acesso externo à "vm-app" por meio do IP público, permitindo o acesso seguro ao Dashboard apenas através do Application Gateway.

  • Virtual Machines > "vm-app" > Network settings > clicar na NIC > IP configurations > "ipconfig1"
    • Associate public IP address: desabilitar
    • [Save]

Acessar as Aplicações

Aplicação Sistema: [Public_IP_Application_Gateway]

tela-acesso-sistema

Aplicação Dashboard: [Public_IP_Application_Gateway]:8080

tela-acesso-dashboard

Listagem dos Recursos criados no Azure

Listagem de todos os recursos criados no Azure para montagem dos Ambientes "On-premises" e "Azure", totalizando cerca de 44 recursos criados ao longo da execução do laboratório.

all-resources-p01
all-resources-p02
all-resources-p03

Custos com os recursos utilizados no Azure

Visão geral dos custos ocorridos com os recursos utilizados no Azure durante a realização do Laboratório, ao longo de aproximadamente 10 dias. Destacando que mantinha as VMs desligadas nos períodos em que não estava desenvolvendo o laboratório.

azure-spending-rate

Badge de Conclusão da "Semana Arquiteto Azure"

badge-conclusao-SAA

Links de Referência

Azure Pricing Calculator
Azure App Service Pricing
Taxonomy Azure Best Practices
.NET migration cases for Azure App Service | Microsoft Learn
Modernize ASP.NET web apps to Azure App Service code | Microsoft Learn
PowerShell Scripts - Azure/App-Service-Migration-Assistant Wiki | GitHub
Overview of Data Migration Assistant - SQL Server | Microsoft Learn
How an application gateway works | Microsoft Learn


Bons estudos!
André Carlucci