Partilhar via


Tutorial: Implementar uma aplicação .NET num contentor do Windows no Azure Service Fabric

Este tutorial explica como colocar uma aplicação ASP.NET existente num contentor e empacotá-la como uma aplicação do Service Fabric. Execute os contentores localmente no cluster de desenvolvimento do Service Fabric e, em seguida, implemente a aplicação no Azure. A aplicação mantém os dados na Base de Dados SQL do Azure.

Neste tutorial, irá aprender a:

  • Colocar uma aplicação existente num contentor com o Visual Studio
  • Criar um banco de dados no Banco de Dados SQL do Azure
  • Criar um registo de contentor do Azure
  • Implementar uma aplicação do Service Fabric no Azure

Nota

Recomendamos que utilize o módulo Azure Az do 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 posterior.
  5. Instale o Visual Studio e habilite o desenvolvimento do Azure e as cargas de trabalho de ASP.NET e desenvolvimento da Web.
  6. Instale o Azure PowerShell

Transferir e executar o Fabrikam Fiber CallCenter

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

  2. Certifique-se de que a aplicação Fabrikam Fiber CallCenter é compilada e executada 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 uma BD SQL do Azure

Quando executa a aplicação Fabrikam Fiber CallCenter em produção, os dados têm de ser mantidos numa base de dados. Não existe atualmente nenhuma forma de garantir que os dados fiquem num contentor, por isso não pode armazenar dados de produção no SQL Server num contentor.

Recomendamos a Base de Dados SQL do Azure. Para configurar e executar uma Base de Dados SQL Server gerida no Azure, execute o seguinte script. Modifique as variáveis do 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"

Gorjeta

Se estiver protegido por uma firewall de empresa, o endereço IP do seu computador de desenvolvimento não pode ser exposto à Internet. Para verificar que a base de dados tem o endereço IP correto para a regra de firewall, vá para o portal do Azure e encontre a sua base de dados na secção Bases de Dados SQL. Clique no respetivo nome e, em seguida, na secção Descrição geral, clique em "Definir firewall do servidor". O "endereço IP do cliente" é o endereço IP do seu computador de desenvolvimento. Certifique-se de que corresponde ao endereço IP na regra "AllowClient".

Atualizar a configuração da Web

Volte para o projeto FabrikamFiber.Web, atualize a cadeia de ligação no ficheiro web.config, para que encaminhe para o SQL Server no contentor. 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" />
  

Nota

Pode utilizar qualquer SQL Server que preferir para depuração local, desde que seja acessível a partir do seu anfitrião. No entanto, o localdb não suporta comunicação container -> host. Se pretender utilizar uma base de dados SQL diferente ao criar uma versão de compilação da aplicação Web, adicione outra cadeia de ligação ao seu ficheiro web.release.config.

Colocar a aplicação num contentor

  1. Clique com o botão direito do mouse no projeto >FabrikamFiber.Web Add>Container Orchestrator Support. Selecione Service Fabric como o orquestrador de contentores e clique em OK.

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

    É criado um novo projeto da aplicação Service Fabric FabrikamFiber.CallCenterApplication 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 definições para o novo serviço FabrikamFiber.Web.

    O contentor está agora pronto para ser criado e empacotado numa aplicação do Service Fabric. Assim que tiver a imagem de contentor incorporada no seu computador, pode enviá-la para qualquer registo de contentor e pedir a qualquer anfitrião para executar.

Executar a aplicação em contentor localmente

Prima F5 para executar e depurar a aplicação num contentor no cluster de desenvolvimento do Service Fabric local. Clique em Sim se for apresentada uma caixa de mensagem a pedir para conceder permissões de leitura e execução do grupo “ServiceFabricAllowedUsers” ao 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 registo de contentores

Agora que a aplicação é executada localmente, comece a preparar a implementação do Azure. As imagens de contentor têm de ser armazenadas num registo de contentor. Crie um registo de contentor do Azure com o script seguinte. O nome de registo do contentor é visível para as outras subscrições do Azure, pelo que tem de ser exclusivo. Antes de implementar a aplicação no Azure, coloque a imagem de contentor neste registo. Quando a aplicação é implementada no cluster no Azure, a imagem de contentor é retirada deste registo.

# 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

As aplicações do Service Fabric são executadas num cluster, um conjunto de máquinas virtuais ou físicas ligadas à rede. Antes de implantar o aplicativo no Azure, crie um cluster do Service Fabric no Azure.

Pode:

  • Criar um cluster de teste a partir do Visual Studio. Esta opção permite-lhe criar um cluster seguro diretamente a partir do Visual Studio com as suas configurações preferidas.
  • Criar um cluster seguro a partir de um modelo

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

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

Ao criar o cluster:

  1. Clique com o botão direito do rato no projeto de aplicação FabrikamFiber.CallCenterApplication no Explorador de Soluções e escolha Publicar.

  2. Inicie sessão com a sua conta do Azure para poder aceder às suas subscrições.

  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 definições:

    a. Especifique o nome do cluster no campo Nome do Cluster, bem como a subscrição e a localização que pretende utilizar. Anote o nome do seu grupo de recursos de cluster.

    b. Opcional: pode modificar o número de nós. Por predefinição, tem três nós, o mínimo exigido 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 seu cluster seguro. Também pode modificar o caminho para o local onde pretende guardar o certificado. O Visual Studio também pode importar o certificado por si, uma vez que este é um passo obrigatório para publicar a aplicação no cluster.

    Nota

    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 utilizador e a palavra-passe podem ser utilizados para ligar remotamente às VMs. Também tem de selecionar um tamanho de VM e pode alterar a imagem da VM, se necessário.

    Importante

    Escolha uma SKU que suporte a execução de contêineres. O SO do Windows Server nos nós do cluster tem de ser compatível com o SO do Windows Server do seu contentor. Para obter mais informações, veja Compatibilidade do sistema operativo do contentor do Windows Server e do sistema operativo do sistema anfitrião . Por predefinição, este tutorial cria uma imagem do Docker com base no Windows Server 2016 LTSC. Os contentores com base nesta imagem serão executados nos clusters criados com o Windows Server 2016 Datacenter com Contentores. 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çadas, indique a porta de aplicação a abrir no balanceador de carga quando o cluster é implementado. Esta é a porta que você anotou antes de começar a criar o cluster. Também pode adicionar uma chave do Application Insights existente para ser utilizada no encaminhamento dos ficheiros de registo da aplicação.

    f. Quando terminar a modificação das definições, selecione o botão Criar.

  5. A criação demora vários minutos a ser concluída; a janela de saída indicará quando o cluster estiver 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, criou uma regra de firewall de SQL para dar acesso à sua aplicação em execução localmente. Em seguida, precisa de ativar a aplicação em execução no Azure para aceder à BD SQL. Crie um ponto final de serviço de rede virtual para o cluster do Service Fabric e, em seguida, crie uma regra para permitir que esse ponto final aceda à BD 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 a aplicação está pronta, pode implementá-la no cluster diretamente no Azure a partir do Visual Studio. No Explorador de Soluções, clique com o botão direito do rato no projeto de aplicação FabrikamFiber.CallCenterApplication e selecione Publicar. Em Ponto Final de Ligação, selecione o ponto final do cluster que criou anteriormente. Em Azure Container Registry, selecione o registo de contentor que criou anteriormente. Clique em Publicar para implementar a aplicação no cluster no Azure.

Publicar a aplicação

Siga o progresso da implementação na janela de saída. Quando a aplicação for implementada, abra um browser e escreva o endereço do cluster e a porta da aplicação. 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ínua (CI/CD) com um cluster do Service Fabric

Para saber como utilizar o Azure DevOps para configurar a implementação de aplicação de CI/CD num cluster do Service Fabric, veja o Tutorial: Implementar uma aplicação com a CI/CD num cluster do Service Fabric. O processo descrito no tutorial é o mesmo para este projeto (FabrikamFiber), basta ignorar a transferência do exemplo de Voto e substituir o FabrikamFiber pelo nome do repositório, em vez de Voto.

Clean up resources (Limpar recursos)

Quando terminar, lembre-se de remover todos os recursos que criou. A forma mais simples de fazê-lo consiste em remover os grupos de recursos que contêm o cluster do Service Fabric, a BD SQL do Azure e o Azure Container Registry.

$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, ficou a saber como:

  • Colocar uma aplicação existente num contentor com o Visual Studio
  • Criar um banco de dados no Banco de Dados SQL do Azure
  • Criar um registo de contentor do Azure
  • Implementar uma aplicação do Service Fabric no Azure

Na parte seguinte do tutorial, saiba como Implementar uma aplicação de contentor com CI/CD num cluster do Service Fabric.