Criar pacote de uma aplicação
Este artigo descreve como empacotar um aplicativo do Service Fabric e prepará-lo para implantação.
Layout do pacote
O manifesto do aplicativo, um ou mais manifestos de serviço e outros arquivos de pacote necessários devem ser organizados em um layout específico para implantação em um cluster do Service Fabric. Os manifestos de exemplo neste artigo precisariam ser organizados na seguinte estrutura de diretórios:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
As pastas são nomeadas para corresponder aos atributos Name de cada elemento correspondente. Por exemplo, se o manifesto de serviço contivesse dois pacotes de código com os nomes MyCodeA e MyCodeB, duas pastas com os mesmos nomes conteriam os binários necessários para cada pacote de código.
Usar SetupEntryPoint
Cenários típicos para usar SetupEntryPoint são quando você precisa executar um executável antes do serviço iniciar ou você precisa executar uma operação com privilégios elevados. Por exemplo:
- Configuração e inicialização de variáveis de ambiente de que o executável do serviço precisa. Não se limita apenas a executáveis escritos por meio dos modelos de programação do Service Fabric. Por exemplo, npm.exe precisa de algumas variáveis de ambiente configuradas para implantar um aplicativo Node.js.
- Configurar o controlo de acesso através da instalação de certificados de segurança.
Para obter mais informações sobre como configurar o SetupEntryPoint, consulte Configurar a política para um ponto de entrada de configuração de serviço
Configurar
Criar um pacote usando o Visual Studio
Se você usou o Visual Studio para criar seu aplicativo, você pode usar o comando Pacote para criar automaticamente um pacote que corresponde ao layout descrito acima.
Para criar um pacote, clique com o botão direito do mouse no projeto de aplicativo no Gerenciador de Soluções e escolha o comando Pacote :
Quando o empacotamento estiver completo, você poderá encontrar o local do pacote na janela Saída . A etapa de empacotamento ocorre automaticamente quando você implanta ou depura seu aplicativo no Visual Studio.
Criar um pacote por linha de comando
Também é possível empacotar programaticamente seu aplicativo usando msbuild.exe
o . Sob o capô, o Visual Studio está executando-o para que a saída seja a mesma.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Testar o pacote
Você pode verificar a estrutura do pacote localmente por meio do PowerShell usando o comando Test-ServiceFabricApplicationPackage . Este comando verifica se há problemas de análise de manifesto e verifica todas as referências. Este comando apenas verifica a correção estrutural dos diretórios e arquivos no pacote. Ele não verifica nenhum código ou conteúdo do pacote de dados além de verificar se todos os arquivos necessários estão presentes.
Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml
Este erro mostra que o arquivo de MySetup.bat referenciado no manifesto de serviço SetupEntryPoint está faltando no pacote de código. Depois que o arquivo ausente é adicionado, a verificação do aplicativo passa:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True
Se seu aplicativo tiver parâmetros de aplicativo definidos, você poderá passá-los em Test-ServiceFabricApplicationPackage para validação adequada.
Se você souber o cluster onde o aplicativo será implantado, é recomendável passar o ImageStoreConnectionString
parâmetro. Nesse caso, o pacote também é validado em relação a versões anteriores do aplicativo que já estão em execução no cluster. Por exemplo, a validação pode detetar se um pacote com a mesma versão, mas conteúdo diferente, já foi implantado.
Depois que o aplicativo for empacotado corretamente e passar na validação, considere compactar o pacote para operações de implantação mais rápidas.
Comprimir uma embalagem
Quando um pacote é grande ou tem muitos arquivos, você pode compactá-lo para uma implantação mais rápida. A compactação reduz o número de arquivos e o tamanho do pacote. Para um pacote de aplicativo compactado, o upload do pacote de aplicativo pode levar mais tempo em comparação com o upload do pacote não compactado, especialmente se a compactação for feita como parte da cópia. Com a compactação, registrar e cancelar o registro do tipo de aplicativo é mais rápido.
O mecanismo de implantação é o mesmo para pacotes compactados e não compactados. Se o pacote for compactado, ele será armazenado como tal no armazenamento de imagens do cluster e será descompactado no nó antes que o aplicativo seja executado. A compactação substitui o pacote válido do Service Fabric pela versão compactada. A pasta deve permitir permissões de gravação. A execução da compactação em um pacote já compactado não produz alterações.
Você pode compactar um pacote executando o comando do PowerShell Copy-ServiceFabricApplicationPackage com CompressPackage
switch. Você pode descompactar o pacote com o mesmo comando, usando UncompressPackage
switch.
O comando a seguir compacta o pacote sem copiá-lo para o armazenamento de imagens. Você pode copiar um pacote compactado para um ou mais clusters do Service Fabric, conforme necessário, usando Copy-ServiceFabricApplicationPackage sem o SkipCopy
sinalizador.
O pacote agora inclui arquivos compactados para os code
pacotes , config
e data
. O manifesto do aplicativo e os manifestos de serviço não são compactados, porque são necessários para muitas operações internas. Por exemplo, o compartilhamento de pacotes, o nome do tipo de aplicativo e a extração de versão para determinadas validações precisam acessar os manifestos. Compactar os manifestos tornaria essas operações ineficientes.
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
ServiceManifest.xml
MyCode.zip
MyConfig.zip
MyData.zip
Como alternativa, você pode compactar e copiar o pacote com Copy-ServiceFabricApplicationPackage em uma etapa. Se o pacote for grande, forneça um tempo limite alto o suficiente para permitir tempo para a compactação do pacote e o upload para o cluster.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
Internamente, o Service Fabric calcula somas de verificação para os pacotes de aplicativos para validação. Ao usar a compactação, as somas de verificação são calculadas nas versões compactadas de cada pacote. Gerar um novo zip a partir do mesmo pacote de aplicativo cria somas de verificação diferentes. Para evitar erros de validação, use o provisionamento de comparação. Com esta opção, não inclua os pacotes inalterados na nova versão. Em vez disso, consulte-os diretamente do novo manifesto de serviço.
Se o provisionamento de comparação não for uma opção e você precisar incluir os pacotes, gere novas versões para o code
, config
e pacotes data
para evitar incompatibilidade de soma de verificação. A geração de novas versões para pacotes inalterados é necessária quando um pacote compactado é usado, independentemente de a versão anterior usar compactação ou não.
O pacote agora está empacotado corretamente, validado e compactado (se necessário), portanto, está pronto para implantação em um ou mais clusters do Service Fabric.
Compactar pacotes ao implantar usando o Visual Studio
Você pode instruir o Visual Studio a compactar pacotes na implantação, adicionando o CopyPackageParameters
elemento ao seu perfil de publicação e definindo o CompressPackage
atributo como true
.
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
<ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
<ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
<CopyPackageParameters CompressPackage="true"/>
</PublishProfile>
Criar um sfpkg
A partir da versão 6.1, o Service Fabric permite o provisionamento a partir de um repositório externo.
Com essa opção, o pacote do aplicativo não precisa ser copiado para o armazenamento de imagens. Em vez disso, você pode criar um sfpkg
arquivo e carregá-lo em um armazenamento externo e, em seguida, fornecer o URI de download para o Service Fabric durante o provisionamento. O mesmo pacote pode ser provisionado para vários clusters. O provisionamento do repositório externo economiza o tempo necessário para copiar o pacote para cada cluster.
O sfpkg
arquivo é um zip que contém o pacote de aplicativo inicial e tem a extensão .sfpkg
. Dentro do zip, o pacote do aplicativo pode ser compactado ou descompactado. A compactação do pacote de aplicativos dentro do zip é feita nos níveis de código, configuração e pacote de dados, como mencionado anteriormente.
Para criar um sfpkg
arquivo, comece com uma pasta que contenha o pacote do aplicativo original, compactado ou não. Em seguida, use qualquer utilitário para compactar a pasta com a extensão ".sfpkg". Por exemplo, use ZipFile.CreateFromDirectory.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
O sfpkg
deve ser carregado para a loja externa fora da banda, fora do Service Fabric. O armazenamento externo pode ser qualquer armazenamento que exponha um ponto de extremidade REST http ou https. Durante o provisionamento, o Service Fabric executa uma operação GET para baixar o pacote do sfpkg
aplicativo, portanto, o repositório deve permitir o acesso READ para o pacote.
Para provisionar o pacote, use o provisionamento externo, que requer o URI de download e as informações de tipo de aplicativo.
Nota
Atualmente, o provisionamento com base no caminho relativo do armazenamento de imagens não oferece suporte a sfpkg
arquivos. Portanto, o sfpkg
não deve ser copiado para o armazenamento de imagens.
Próximos passos
Implantar e remover aplicativos descreve como usar o PowerShell para gerenciar instâncias de aplicativos
Gerenciando parâmetros de aplicativo para vários ambientes descreve como configurar parâmetros e variáveis de ambiente para diferentes instâncias de aplicativo.
Configurar políticas de segurança para seu aplicativo descreve como executar serviços em políticas de segurança para restringir o acesso.