Partilhar via


Tutorial: Implantar um aplicativo .NET em um contêiner do Windows no Azure Service Fabric

Este tutorial mostra como colocar em contêiner um aplicativo ASP.NET existente e empacotá-lo como um aplicativo do Service Fabric. Execute os contêineres localmente no cluster de desenvolvimento do Service Fabric e implante o aplicativo no Azure. O aplicativo persiste dados no Banco de Dados SQL do Azure.

Neste tutorial, você aprenderá a:

  • Contentorizar uma aplicação existente utilizando o Visual Studio
  • Criar um banco de dados no Banco de Dados SQL do Azure
  • Criar um registro de contêiner do Azure
  • Implantar um aplicativo do Service Fabric no Azure

Observação

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Pré-requisitos

  1. Se não tiver uma subscrição do Azure, crie uma conta gratuita.
  2. Habilite os recursos do Windows Hyper-V e contêineres.
  3. Instale o Docker Desktop para Windows para que você possa executar contêineres no Windows 10.
  4. Instale o runtime do Service Fabric versão 6.2 ou posterior e o SDK do Service Fabric versão 3.1 ou mais recente.
  5. Instale o Visual Studio e habilite o desenvolvimento do Azure e cargas de trabalho de ASP.NET e desenvolvimento Web .
  6. Instalar o Azure PowerShell

Baixe e execute o Fabrikam Fiber CallCenter

  1. Baixe o aplicativo de exemplo Fabrikam Fiber CallCenter do GitHub.

  2. Verifique se o aplicativo Fabrikam Fiber CallCenter é compilado e executado sem erros. Inicie o Visual Studio como administrador e abra o arquivo VS2015\FabrikamFiber.CallCenter.sln . Pressione F5 para executar e depurar o aplicativo.

    Captura de tela da página inicial do aplicativo Fabrikam Fiber CallCenter em execução no host local. A página mostra um painel com uma lista de chamadas de suporte.

Criar um Banco de Dados SQL do Azure

Ao executar o aplicativo Fabrikam Fiber CallCenter em produção, os dados precisam ser mantidos em um banco de dados. Atualmente, não há forma de garantir dados persistentes num contentor, por isso não pode armazenar dados de produção no SQL Server num contentor.

Recomendamos o Banco de Dados SQL do Azure. Para configurar e executar um banco de dados gerenciado do SQL Server no Azure, execute o script a seguir. Modifique as variáveis de script conforme necessário. clientIP é o endereço IP do seu computador de desenvolvimento. Anote o nome do servidor gerado pelo script.

$subscriptionID="<subscription ID>"

# Sign in to your Azure account and select your subscription.
Login-AzAccount -SubscriptionId $subscriptionID

# The data center and resource name for your resources.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$location = "southcentralus"

# The server name: Use a random value or replace with your own value (do not capitalize).
$servername = "fab-fiber-$(Get-Random)"

# Set an admin login and password for your database.
# The login information for the server.
$adminlogin = "ServerAdmin"
$password = "Password@123"

# The IP address of your development computer that accesses the SQL DB.
$clientIP = "<client IP>"

# The database name.
$databasename = "call-center-db"

# Create a new resource group for your deployment and give it a name and a location.
New-AzResourceGroup -Name $dbresourcegroupname -Location $location

# Create the SQL server.
New-AzSqlServer -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -Location $location `
    -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClient" -StartIpAddress $clientIP -EndIpAddress $clientIP

# Create the database in the server.
New-AzSqlDatabase  -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -DatabaseName $databasename `
    -RequestedServiceObjectiveName "S0"

Write-Host "Server name is $servername"

Sugestão

Se você estiver protegido por um firewall corporativo, o endereço IP do seu computador de desenvolvimento pode não ser o endereço IP exposto à Internet. Para verificar se o banco de dados tem o endereço IP correto para a regra de firewall, vá para o portal do Azure e localize seu banco de dados na seção Bancos de Dados SQL. Clique em seu nome e, em seguida, na seção Visão geral, clique em "Definir firewall do servidor". "Endereço IP do cliente" é o endereço IP da sua máquina de desenvolvimento. Certifique-se de que corresponde ao endereço IP na regra "AllowClient".

Atualizar a configuração da Web

De volta ao projeto FabrikamFiber.Web , atualize a cadeia de conexão no arquivo web.config , para apontar para o SQL Server no contêiner. Atualize a parte Servidor da cadeia de conexão para ser o nome do servidor criado pelo script anterior. Deve ser algo como "fab-fiber-751718376.database.windows.net". No XML a seguir, você precisa atualizar apenas o connectionString atributo, os providerName e name atributos não precisam ser alterados.

<add name="FabrikamFiber-Express" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
<add name="FabrikamFiber-DataWarehouse" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
  

Observação

Você pode usar qualquer SQL Server de sua preferência para depuração local, desde que ele seja acessível a partir do seu host. No entanto, localdb não suporta container -> host comunicação. Se você quiser usar um banco de dados SQL diferente ao criar uma compilação de versão do seu aplicativo Web, adicione outra cadeia de conexão ao seu arquivo web.release.config .

Colocar a aplicação num contentor

  1. Clique com o botão direito do rato no projeto FabrikamFiber.Web, depois em >>. Selecione Service Fabric como o orquestrador de contêiner e clique em OK.

  2. Se solicitado, clique em Sim para alternar o Docker para contêineres do Windows agora.

    Um novo projeto de aplicativo do Service Fabric FabrikamFiber.CallCenterApplication é criado na solução. Um Dockerfile é adicionado ao projeto FabrikamFiber.Web existente. Um diretório PackageRoot também é adicionado ao projeto FabrikamFiber.Web , que contém o manifesto do serviço e as configurações para o novo serviço FabrikamFiber.Web.

    O contêiner agora está pronto para ser criado e empacotado em um aplicativo do Service Fabric. Depois de ter a imagem de contêiner construída em sua máquina, você pode enviá-la para qualquer registro de contêiner e puxá-la para baixo para qualquer host para ser executado.

Execute o aplicativo em contêiner localmente

Pressione F5 para executar e depurar o aplicativo em um contêiner no cluster de desenvolvimento local do Service Fabric. Clique em Sim se for apresentada uma caixa de mensagem solicitando a concessão do grupo 'ServiceFabricAllowedUsers' permissões de leitura e execução para o diretório do projeto do Visual Studio.

Se a execução F5 gerar uma exceção como a seguinte, o IP correto não foi adicionado ao firewall do banco de dados do Azure.

System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open server 'fab-fiber-751718376' requested by the login. Client with IP address '123.456.789.012' is not allowed to access the server.  To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>

Para adicionar o IP apropriado ao firewall do banco de dados do Azure, execute o seguinte comando.

# The IP address of your development computer that accesses the SQL DB.
$clientIPNew = "<client IP from the Error Message>"

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClientNew" -StartIpAddress $clientIPNew -EndIpAddress $clientIPNew

Criar um registro de contêiner

Agora que o aplicativo é executado localmente, comece a se preparar para implantar no Azure. As imagens de contêiner precisam ser armazenadas em um registro de contêiner. Crie um registro de contêiner do Azure usando o script a seguir. O nome do Registro do contêiner é visível por outras assinaturas do Azure, portanto, deve ser exclusivo. Antes de implantar o aplicativo no Azure, você envia a imagem do contêiner para este registro. Quando o aplicativo é implantado no cluster no Azure, a imagem do contêiner é extraída desse registro.

# Variables
$acrresourcegroupname = "fabrikam-acr-group"
$location = "southcentralus"
$registryname="fabrikamregistry$(Get-Random)"

New-AzResourceGroup -Name $acrresourcegroupname -Location $location

$registry = New-AzContainerRegistry -ResourceGroupName $acrresourcegroupname -Name $registryname -EnableAdminUser -Sku Basic

Criar um cluster do Service Fabric no Azure

Os aplicativos do Service Fabric são executados em um cluster, um conjunto de máquinas virtuais ou físicas conectado à rede. Antes de implantar o aplicativo no Azure, crie um cluster do Service Fabric no Azure.

É possível:

Este tutorial cria um cluster do Visual Studio, que é ideal para cenários de teste. Se criar um cluster de outra forma ou usar um cluster existente, pode copiar e colar o seu endpoint de ligação ou escolhê-lo da sua subscrição.

Antes de começar, abra FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml no Gerenciador de Soluções. Anote a porta do front-end web listado em Endpoint.

Ao criar o cluster:

  1. Clique com o botão direito do mouse no projeto de aplicativo FabrikamFiber.CallCenterApplication no Gerenciador de Soluções e escolha Publicar.

  2. Entre usando sua conta do Azure para que você possa ter acesso à(s) sua(s) assinatura(s).

  3. Abaixo da lista suspensa do Ponto de Extremidade de Conexão, selecione a opção Criar Novo Cluster...

  4. Na caixa de diálogo Criar cluster , modifique as seguintes configurações:

    a) Especifique o nome do cluster no campo Nome do Cluster , bem como a assinatura e o local que você deseja usar. Anote o nome do seu grupo de recursos de cluster.

    b. Opcional: Você pode modificar o número de nós. Por padrão, você tem três nós, o mínimo necessário para testar cenários do Service Fabric.

    c. Selecione a guia Certificado . Nesta guia, digite uma senha a ser usada para proteger o certificado do cluster. Este certificado ajuda a tornar o cluster seguro. Você também pode modificar o caminho para onde deseja salvar o certificado. O Visual Studio também pode importar o certificado para você, pois essa é uma etapa necessária para publicar o aplicativo no cluster.

    Observação

    Anote o caminho da pasta para onde este certificado é importado. A próxima etapa após a criação do cluster é importar esse certificado.

    d. Selecione a guia Detalhes da VM . Especifique a senha que você gostaria de usar para as máquinas virtuais (VM) que compõem o cluster. O nome de usuário e a senha podem ser usados para se conectar remotamente às VMs. Você também deve selecionar um tamanho de máquina VM e pode alterar a imagem da VM, se necessário.

    Importante

    Escolha uma SKU que suporte a execução de contêineres. O sistema operacional Windows Server nos nós do cluster deve ser compatível com o sistema operacional Windows Server do contêiner. Para saber mais, consulte Compatibilidade do sistema operacional de contentor e do sistema operacional do host do Windows Server. Por padrão, este tutorial cria uma imagem do Docker com base no Windows Server 2016 LTSC. Os contêineres baseados nessa imagem serão executados em clusters criados com o Windows Server 2016 Datacenter with Containers. No entanto, se você criar um cluster ou usar um cluster existente com base em uma versão diferente do Windows Server, deverá alterar a imagem do sistema operacional na qual o contêiner se baseia. Abra o dockerfile no projeto FabrikamFiber.Web , comente qualquer instrução existente FROM com base em uma versão anterior do Windows Server e adicione uma FROM instrução com base na marca da versão desejada na página Windows Server Core DockerHub. Para obter informações adicionais sobre versões do Windows Server Core, cronogramas de suporte e controle de versão, consulte as informações da versão do Windows Server Core.

    e. No separador Avançado, liste a porta da aplicação a ser aberta no balanceador de carga quando o cluster for implementado. Esta é a porta que anotaste antes de começar a criar o cluster. Você também pode adicionar uma chave existente do Application Insights para ser usada para rotear arquivos de log do aplicativo.

    f. Quando terminar de modificar as configurações, selecione o botão Criar .

  5. A criação leva vários minutos para ser concluída; A janela Saída indicará quando o cluster está totalmente criado.

Instalar o certificado importado

Instale o certificado importado como parte da etapa de criação do cluster no local de armazenamento do Usuário Atual e forneça a senha da chave privada fornecida.

Você pode confirmar a instalação abrindo Gerenciar Certificados de Usuário no painel de controle e confirmando que o certificado está instalado em Certificados - Usuário Atual ->Pessoal ->Certificados. O certificado deve ser como [Nome do cluster]. [Localização do cluster].cloudapp.azure.com, por exemplo, fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Permitir que seu aplicativo em execução no Azure acesse o Banco de Dados SQL

Anteriormente, você criou uma regra de firewall SQL para dar acesso ao seu aplicativo em execução localmente. Em seguida, você precisa habilitar o aplicativo em execução no Azure para acessar o Banco de Dados SQL. Crie um ponto de extremidade de serviço de rede virtual para o cluster do Service Fabric e, em seguida, crie uma regra para permitir que esse ponto de extremidade acesse o Banco de Dados SQL. Certifique-se de especificar a variável de grupo de recursos de cluster que você anotou ao criar o cluster.

# Create a virtual network service endpoint
$clusterresourcegroup = "<cluster resource group>"
$resource = Get-AzResource -ResourceGroupName $clusterresourcegroup -ResourceType Microsoft.Network/virtualNetworks | Select-Object -first 1
$vnetName = $resource.Name

Write-Host 'Virtual network name: ' $vnetName

# Get the virtual network by name.
$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $clusterresourcegroup `
  -Name              $vnetName

Write-Host "Get the subnet in the virtual network:"

# Get the subnet, assume the first subnet contains the Service Fabric cluster.
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet | Select-Object -first 1

$subnetName = $subnet.Name
$subnetID = $subnet.Id
$addressPrefix = $subnet.AddressPrefix

Write-Host "Subnet name: " $subnetName " Address prefix: " $addressPrefix " ID: " $subnetID

# Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
$vnet = Set-AzVirtualNetworkSubnetConfig `
  -Name            $subnetName `
  -AddressPrefix   $addressPrefix `
  -VirtualNetwork  $vnet `
  -ServiceEndpoint Microsoft.Sql | Set-AzVirtualNetwork

$vnet.Subnets[0].ServiceEndpoints;  # Display the first endpoint.

# Add a SQL DB firewall rule for the virtual network service endpoint
$subnet = Get-AzVirtualNetworkSubnetConfig `
  -Name           $subnetName `
  -VirtualNetwork $vnet;

$VNetRuleName="ServiceFabricClusterVNetRule"
$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $dbresourcegroupname `
  -ServerName             $servername `
  -VirtualNetworkRuleName $VNetRuleName `
  -VirtualNetworkSubnetId $subnetID;

Implementar a aplicação no Azure

Agora que o aplicativo está pronto, você pode implantá-lo no cluster no Azure diretamente do Visual Studio. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto de aplicativo FabrikamFiber.CallCenterApplication e selecione Publicar. Em Ponto de Extremidade de Conexão, selecione o ponto de extremidade do cluster que você criou anteriormente. No Registro de Contêiner do Azure, selecione o registro de contêiner que você criou anteriormente. Clique em Publicar para implantar o aplicativo no cluster no Azure.

Publicar aplicação

Acompanhe o progresso da implantação na janela de saída. Quando o aplicativo for implantado, abra um navegador e digite o endereço do cluster e a porta do aplicativo. Por exemplo, http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.

Captura de tela da página inicial do aplicativo Fabrikam Fiber CallCenter em execução no azure.com. A página mostra um painel com uma lista de chamadas de suporte.

Se a página não carregar ou não solicitar o certificado, tente abrir o caminho do Explorer, por exemplo, https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer e selecione o certificado recém-instalado.

Configurar a integração e a implementação contínuas (CI/CD) num cluster do Service Fabric

Para saber como usar o Azure DevOps para configurar a implantação de aplicativos CI/CD em um cluster do Service Fabric, consulte Tutorial: Implantar um aplicativo com CI/CD em um cluster do Service Fabric. O processo descrito no tutorial é o mesmo para este projeto (FabrikamFiber), basta pular o download da amostra de votação e substituir FabrikamFiber como o nome do repositório em vez de votar.

Limpar recursos

Se tiver terminado, certifique-se de que remove todos os recursos que criou. A maneira mais simples é remover os grupos de recursos que contêm o cluster do Service Fabric, o Banco de Dados SQL do Azure e o Registro de Contêiner do Azure.

$dbresourcegroupname = "fabrikam-fiber-db-group"
$acrresourcegroupname = "fabrikam-acr-group"
$clusterresourcegroupname="fabrikamcallcentergroup"

# Remove the Azure SQL DB
Remove-AzResourceGroup -Name $dbresourcegroupname

# Remove the container registry
Remove-AzResourceGroup -Name $acrresourcegroupname

# Remove the Service Fabric cluster
Remove-AzResourceGroup -Name $clusterresourcegroupname

Próximos passos

Neste tutorial, você aprendeu como:

  • Contentorizar uma aplicação existente utilizando o Visual Studio
  • Criar um banco de dados no Banco de Dados SQL do Azure
  • Criar um registro de contêiner do Azure
  • Implantar um aplicativo do Service Fabric no Azure

Na próxima parte do tutorial, saiba como Implantar um aplicativo de contêiner com CI/CD em um cluster do Service Fabric.