Criar pacote de uma aplicação

Este artigo descreve como empacotar uma aplicação do Service Fabric e prepará-la para implementação.

Esquema de pacote

O manifesto da aplicação, um ou mais manifestos de serviço e outros ficheiros de pacote necessários têm de ser organizados num esquema específico para implementação num cluster do Service Fabric. Os manifestos de exemplo neste artigo teriam de ser organizados na seguinte estrutura de diretório:

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 Nome de cada elemento correspondente. Por exemplo, se o manifesto de serviço contiver 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.

Utilizar SetupEntryPoint

Os cenários típicos para utilizar o SetupEntryPoint são quando tem de executar um executável antes do início do serviço ou tem de executar uma operação com privilégios elevados. Por exemplo:

  • Configurar e inicializar variáveis de ambiente de que o serviço é executável. Não se limita apenas a executáveis escritos através dos modelos de programação do Service Fabric. Por exemplo, npm.exe precisa de algumas variáveis de ambiente configuradas para implementar uma aplicação Node.js.
  • Configurar o controlo de acesso ao instalar certificados de segurança.

Para obter mais informações sobre como configurar o SetupEntryPoint, veja Configurar a política para um ponto de entrada de configuração de serviço

Configurar

Criar um pacote com o Visual Studio

Se utilizou o Visual Studio para criar a sua aplicação, pode utilizar o comando Pacote para criar automaticamente um pacote que corresponda ao esquema descrito acima.

Para criar um pacote, clique com o botão direito do rato no projeto da aplicação no Explorador de Soluções e selecione o comando Pacote:

Empacotar uma aplicação com o Visual Studio

Quando o empacotamento estiver concluído, pode encontrar a localização do pacote na janela Saída . O passo de empacotamento ocorre automaticamente quando implementa ou depura a sua aplicação no Visual Studio.

Criar um pacote por linha de comandos

Também é possível empacotar programaticamente a sua aplicação com msbuild.exe. No bastidor, o Visual Studio está a executá-lo para que a saída seja igual.

D:\Temp> msbuild HelloWorld.sfproj /t:Package

Testar o pacote

Pode verificar a estrutura do pacote localmente através do PowerShell com o comando Test-ServiceFabricApplicationPackage . Este comando verifica se existem problemas de análise de manifestos e verifica todas as referências. Este comando verifica apenas a correção estrutural dos diretórios e ficheiros no pacote. Não verifica nenhum dos conteúdos do código ou do pacote de dados para além de verificar se todos os ficheiros 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 ficheiro MySetup.bat referenciado no manifesto de serviço SetupEntryPoint está em falta no pacote de código. Após a adição do ficheiro em falta, a verificação da aplicação 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 a sua aplicação tiver parâmetros de aplicação definidos , pode passá-los em Test-ServiceFabricApplicationPackage para uma validação adequada.

Se souber o cluster onde a aplicação será implementada, recomenda-se que transmita o ImageStoreConnectionString parâmetro. Neste caso, o pacote também é validado em relação às versões anteriores da aplicação que já estão em execução no cluster. Por exemplo, a validação pode detetar se já foi implementado um pacote com a mesma versão, mas conteúdos diferentes.

Assim que a aplicação for empacotada corretamente e passar na validação, considere comprimir o pacote para operações de implementação mais rápidas.

Comprimir um pacote

Quando um pacote é grande ou tem muitos ficheiros, pode comprimi-lo para uma implementação mais rápida. A compressão reduz o número de ficheiros e o tamanho do pacote. Para um pacote de aplicação comprimido, carregar o pacote de aplicação pode demorar mais tempo em comparação com o carregamento do pacote não comprimido, especialmente se a compressão for feita como parte da cópia. Com a compressão, registar e anular o registo do tipo de aplicação é mais rápido.

O mecanismo de implementação é o mesmo para pacotes comprimidos e não comprimidos. Se o pacote estiver comprimido, este é armazenado como tal no arquivo de imagens do cluster e não é comprimido no nó antes de a aplicação ser executada. A compressão substitui o pacote do Service Fabric válido pela versão comprimida. A pasta tem de permitir permissões de escrita. A execução da compressão num pacote já comprimido não gera alterações.

Pode comprimir um pacote ao executar o comando Do PowerShell Copy-ServiceFabricApplicationPackage com o CompressPackage comutador. Pode descomprimir o pacote com o mesmo comando através UncompressPackage do comutador.

O seguinte comando comprime o pacote sem o copiar para o arquivo de imagens. Pode copiar um pacote comprimido para um ou mais clusters do Service Fabric, conforme necessário, utilizando Copy-ServiceFabricApplicationPackage sem o SkipCopy sinalizador. O pacote inclui agora ficheiros zipados para os codepacotes , confige data . O manifesto da aplicação e os manifestos de serviço não são zipados porque são necessários para muitas operações internas. Por exemplo, a partilha de pacotes, o nome do tipo de aplicação e a extração de versões para determinadas validações têm de aceder aos manifestos. Fechar os manifestos tornaria estas 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

Em alternativa, pode comprimir e copiar o pacote com Copy-ServiceFabricApplicationPackage num único passo. Se o pacote for grande, forneça um tempo limite suficientemente elevado para dar tempo à compressão do pacote e ao carregamento 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 aplicações para validação. Ao utilizar a compressão, as somas de verificação são calculadas nas versões zipadas de cada pacote. Gerar um novo zip a partir do mesmo pacote de aplicações cria somas de verificação diferentes. Para evitar erros de validação, utilize o aprovisionamento difuso. Com esta opção, não inclua os pacotes inalterados na nova versão. Em vez disso, consulte-os diretamente a partir do novo manifesto de serviço.

Se o aprovisionamento difuso não for uma opção e tiver de incluir os pacotes, gere novas versões para o code, confige data os pacotes para evitar o erro de correspondência da soma de verificação. A geração de novas versões para pacotes inalterados é necessária quando é utilizado um pacote comprimido, independentemente de a versão anterior utilizar compressão ou não.

O pacote está agora empacotado corretamente, validado e comprimido (se necessário), pelo que está pronto para implementação num ou mais clusters do Service Fabric.

Comprimir pacotes ao implementar com o Visual Studio

Pode instruir o Visual Studio a comprimir pacotes na implementação, ao adicionar o CopyPackageParameters elemento ao seu perfil de publicação e definir 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 aprovisionamento a partir de um arquivo externo. Com esta opção, o pacote de aplicação não tem de ser copiado para o arquivo de imagens. Em vez disso, pode criar um sfpkg ficheiro e carregá-lo para um arquivo externo e, em seguida, fornecer o URI de transferência para o Service Fabric ao aprovisionar. O mesmo pacote pode ser aprovisionado em vários clusters. O aprovisionamento a partir do arquivo externo poupa o tempo necessário para copiar o pacote para cada cluster.

O sfpkg ficheiro é um zip que contém o pacote de aplicação inicial e tem a extensão .sfpkg. Dentro do zip, o pacote de aplicação pode ser comprimido ou descomprimido. A compressão do pacote de aplicação no zip é efetuada ao nível do código, configuração e pacote de dados, conforme mencionado anteriormente.

Para criar um sfpkg ficheiro, comece com uma pasta que contenha o pacote de aplicação original, comprimido ou não. Em seguida, utilize qualquer utilitário para zipar a pasta com a extensão ".sfpkg". Por exemplo, utilize ZipFile.CreateFromDirectory.

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

O sfpkg tem de ser carregado para o arquivo externo fora de banda, fora do Service Fabric. O arquivo externo pode ser qualquer arquivo que exponha um ponto final REST http ou https. Durante o aprovisionamento, o Service Fabric executa uma operação GET para transferir o pacote de aplicação sfpkg , pelo que o arquivo tem de permitir o acesso DE LEITURA ao pacote.

Para aprovisionar o pacote, utilize aprovisionamento externo, que requer o URI de transferência e as informações do tipo de aplicação.

Nota

Atualmente, o aprovisionamento com base no caminho relativo do arquivo de imagens não suporta sfpkg ficheiros. Por conseguinte, não sfpkg deve ser copiado para o arquivo de imagens.

Passos seguintes

Implementar e remover aplicações descreve como utilizar o PowerShell para gerir instâncias de aplicações

A gestão de parâmetros de aplicações para vários ambientes descreve como configurar parâmetros e variáveis de ambiente para diferentes instâncias de aplicações.

Configurar políticas de segurança para a sua aplicação descreve como executar serviços em políticas de segurança para restringir o acesso.