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 :

Empacotando um aplicativo com o Visual Studio

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.exeo . 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 codepacotes , confige 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, confige 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.