Empacotar e implantar um executável existente no Service Fabric
Ao empacotar um executável existente como um executável convidado, você pode optar por usar um modelo de projeto do Visual Studio ou criar o pacote de aplicativo manualmente. Usando o Visual Studio, a estrutura do pacote de aplicativo e os arquivos de manifesto são criados pelo novo modelo de projeto para você.
Gorjeta
A maneira mais fácil de empacotar um executável existente do Windows em um serviço é usar o Visual Studio e no Linux para usar o Yeoman
Usar o Visual Studio para empacotar e implantar um executável existente
O Visual Studio fornece um modelo de serviço do Service Fabric para ajudá-lo a implantar um executável convidado em um cluster do Service Fabric.
- Escolha Arquivo>Novo Projeto e crie um aplicativo do Service Fabric.
- Escolha Guest Executable como o modelo de serviço.
- Clique em Procurar para selecionar a pasta com seu executável e preencher o restante dos parâmetros para criar o serviço.
- Comportamento do pacote de código. Pode ser configurado para copiar todo o conteúdo da sua pasta para o projeto do Visual Studio, o que é útil se o executável não for alterado. Se você espera que o executável mude e deseja a capacidade de pegar novas compilações dinamicamente, você pode optar por vincular à pasta. Você pode usar pastas vinculadas ao criar o projeto de aplicativo no Visual Studio. Isso se vincula ao local de origem de dentro do projeto, tornando possível atualizar o executável convidado em seu destino de origem. Essas atualizações tornam-se parte do pacote de aplicativos na compilação.
- Programa especifica o executável que deve ser executado para iniciar o serviço.
- Arguments especifica os argumentos que devem ser passados para o executável. Pode ser uma lista de parâmetros com argumentos.
- WorkingFolder especifica o diretório de trabalho para o processo que será iniciado. Você pode especificar três valores:
CodeBase
Especifica que o diretório de trabalho será definido como o diretório de código no pacote do aplicativo (Code
diretório mostrado na estrutura de arquivo anterior).CodePackage
Especifica que o diretório de trabalho será definido como a raiz do pacote do aplicativo (GuestService1Pkg
mostrado na estrutura de arquivo anterior).Work
Especifica que os arquivos são colocados em um subdiretório chamado Work.
- Dê um nome ao serviço e clique em OK.
- Se o seu serviço precisar de um ponto de extremidade para comunicação, agora você pode adicionar o protocolo, a porta e o tipo ao arquivo ServiceManifest.xml. Por exemplo:
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
. - Agora você pode usar o pacote e publicar ações em seu cluster local depurando a solução no Visual Studio. Quando estiver pronto, você poderá publicar o aplicativo em um cluster remoto ou fazer check-in da solução para controle do código-fonte.
- Leia verificar seu aplicativo em execução para ver como exibir seu serviço executável convidado em execução no Service Fabric Explorer.
Para obter um exemplo passo a passo, consulte Criar seu primeiro aplicativo executável convidado usando o Visual Studio.
Empacotando vários executáveis com o Visual Studio
Você pode usar o Visual Studio para produzir um pacote de aplicativo que contém vários executáveis convidados. Depois de adicionar o primeiro executável convidado, clique com o botão direito do mouse no projeto de aplicativo e selecione o serviço Add-New> Service Fabric para adicionar o segundo projeto executável convidado à solução.
Nota
Se você optar por vincular a fonte no projeto do Visual Studio, a criação da solução do Visual Studio garantirá que seu pacote de aplicativo esteja atualizado com as alterações na fonte.
Use Yeoman para empacotar e implantar um executável existente no Linux
O procedimento para criar e implantar um executável convidado no Linux é o mesmo que implantar um aplicativo C# ou Java.
- Num terminal, escreva
yo azuresfguest
. - Dê um nome à aplicação.
- Nomeie seu serviço e forneça os detalhes, incluindo o caminho do executável e os parâmetros com os quais ele deve ser invocado.
Yeoman cria um pacote de aplicativo com o aplicativo apropriado e arquivos de manifesto, juntamente com scripts de instalação e desinstalação.
Empacotando vários executáveis usando Yeoman no Linux
Para adicionar outro serviço a uma aplicação já criada com o yo
, execute os seguintes passos:
- Altere o diretório para a raiz da aplicação existente. Por exemplo,
cd ~/YeomanSamples/MyApplication
, seMyApplication
é a aplicação criada por Yeoman. - Execute
yo azuresfguest:AddService
e forneça os detalhes necessários.
Empacotar e implantar manualmente um executável existente
O processo de empacotamento manual de um executável convidado baseia-se nas seguintes etapas gerais:
- Crie a estrutura de diretórios do pacote.
- Adicione o código e os arquivos de configuração do aplicativo.
- Edite o arquivo de manifesto do serviço.
- Edite o arquivo de manifesto do aplicativo.
Criar a estrutura de diretórios do pacote
Você pode começar criando a estrutura de diretórios, conforme descrito em Empacotar um aplicativo do Azure Service Fabric.
Adicione o código e os arquivos de configuração do aplicativo
Depois de criar a estrutura de diretórios, você pode adicionar o código do aplicativo e os arquivos de configuração nos diretórios de código e configuração. Você também pode criar diretórios ou subdiretórios adicionais sob os diretórios de código ou configuração.
O Service Fabric faz um xcopy
do conteúdo do diretório raiz do aplicativo, portanto, não há nenhuma estrutura predefinida para usar além da criação de dois diretórios principais, código e configurações. (Você pode escolher nomes diferentes, se quiser. Mais detalhes estão na próxima seção.)
Nota
Certifique-se de incluir todos os arquivos e dependências que o aplicativo precisa. O Service Fabric copia o conteúdo do pacote de aplicativos em todos os nós do cluster onde os serviços do aplicativo serão implantados. O pacote deve conter todo o código que o aplicativo precisa para ser executado. Não assuma que as dependências já estão instaladas.
Editar o arquivo de manifesto do serviço
A próxima etapa é editar o arquivo de manifesto de serviço para incluir as seguintes informações:
- O nome do tipo de serviço. Esta é uma ID que o Service Fabric usa para identificar um serviço.
- O comando a ser usado para iniciar o aplicativo (ExeHost).
- Qualquer script que precise ser executado para configurar o aplicativo (SetupEntrypoint).
Segue-se um exemplo de um ServiceManifest.xml
ficheiro:
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<ServiceTypes>
<StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
</ServiceTypes>
<CodePackage Name="code" Version="1.0.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>scripts\launchConfig.cmd</Program>
</ExeHost>
</SetupEntryPoint>
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
</CodePackage>
<Resources>
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>
</Resources>
</ServiceManifest>
As seções a seguir abordam as diferentes partes do arquivo que você precisa atualizar.
Atualizar ServiceTypes
<ServiceTypes>
<StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
- Você pode escolher qualquer nome que desejar para
ServiceTypeName
. O valor é usado noApplicationManifest.xml
arquivo para identificar o serviço. - Especifique
UseImplicitHost="true"
. Esse atributo informa ao Service Fabric que o serviço é baseado em um aplicativo independente, portanto, tudo o que o Service Fabric precisa fazer é iniciá-lo como um processo e monitorar sua integridade.
Atualizar CodePackage
O elemento CodePackage especifica o local (e a versão) do código do serviço.
<CodePackage Name="Code" Version="1.0.0.0">
O Name
elemento é usado para especificar o nome do diretório no pacote do aplicativo que contém o código do serviço. CodePackage
também tem o version
atributo. Isso pode ser usado para especificar a versão do código e também pode ser usado para atualizar o código do serviço usando a infraestrutura de gerenciamento do ciclo de vida do aplicativo no Service Fabric.
Opcional: Atualizar SetupEntrypoint
<SetupEntryPoint>
<ExeHost>
<Program>scripts\launchConfig.cmd</Program>
</ExeHost>
</SetupEntryPoint>
O elemento SetupEntryPoint é usado para especificar qualquer arquivo executável ou em lotes que deve ser executado antes que o código do serviço seja iniciado. É uma etapa opcional, portanto, não precisa ser incluída se não houver inicialização necessária. O SetupEntryPoint é executado sempre que o serviço é reiniciado.
Há apenas um SetupEntryPoint, portanto, os scripts de instalação precisam ser agrupados em um único arquivo em lote se a instalação do aplicativo exigir vários scripts. O SetupEntryPoint pode executar qualquer tipo de arquivo: arquivos executáveis, arquivos em lote e cmdlets do PowerShell. Para obter mais detalhes, consulte Configurar SetupEntryPoint.
No exemplo anterior, o SetupEntryPoint executa um arquivo em lotes chamado LaunchConfig.cmd
que está localizado no scripts
subdiretório do diretório de código (supondo que o elemento WorkingFolder esteja definido como CodeBase).
Atualizar EntryPoint
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
</ExeHost>
</EntryPoint>
O EntryPoint
elemento no arquivo de manifesto de serviço é usado para especificar como iniciar o serviço.
O ExeHost
elemento especifica o executável (e argumentos) que deve ser usado para iniciar o serviço. Opcionalmente, você pode adicionar o IsExternalExecutable="true"
atributo para ExeHost
indicar que o programa é um executável externo fora do pacote de código. Por exemplo, <ExeHost IsExternalExecutable="true">
.
Program
Especifica o nome do executável que deve iniciar o serviço.Arguments
Especifica os argumentos que devem ser passados para o executável. Pode ser uma lista de parâmetros com argumentos.WorkingFolder
Especifica o diretório de trabalho para o processo que será iniciado. Você pode especificar três valores:CodeBase
Especifica que o diretório de trabalho será definido como o diretório de código no pacote do aplicativo (Code
diretório na estrutura de arquivos anterior).CodePackage
Especifica que o diretório de trabalho será definido como a raiz do pacote do aplicativo (GuestService1Pkg
na estrutura de arquivo anterior).Work
Especifica que os arquivos são colocados em um subdiretório chamado Work.
O WorkingFolder é útil para definir o diretório de trabalho correto para que os caminhos relativos possam ser usados pelo aplicativo ou scripts de inicialização.
Atualizar pontos de extremidade e registrar-se no Naming Service para comunicação
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>
No exemplo anterior, o Endpoint
elemento especifica os pontos de extremidade nos quais o aplicativo pode escutar. Neste exemplo, o aplicativo Node.js escuta em http na porta 3000.
Além disso, você pode solicitar ao Service Fabric que publique esse ponto de extremidade no Serviço de Nomenclatura para que outros serviços possam descobrir o endereço do ponto de extremidade para esse serviço. Isso permite que você seja capaz de se comunicar entre serviços que são executáveis convidados.
O endereço do ponto final publicado é do formato UriScheme://IPAddressOrFQDN:Port/PathSuffix
. UriScheme
e PathSuffix
são atributos opcionais. IPAddressOrFQDN
é o endereço IP ou nome de domínio totalmente qualificado do nó em que este executável é colocado e é calculado para si.
No exemplo a seguir, depois que o serviço é implantado, no Service Fabric Explorer você vê um ponto de extremidade semelhante ao http://10.1.4.92:3000/myapp/
publicado para a instância de serviço. Ou se esta é uma máquina local, você vê http://localhost:3000/myapp/
.
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>
Você pode usar esses endereços com proxy reverso para se comunicar entre serviços.
Editar o arquivo de manifesto do aplicativo
Depois de configurar o Servicemanifest.xml
arquivo, você precisa fazer algumas alterações no ApplicationManifest.xml
arquivo para garantir que o tipo de serviço e o nome corretos sejam usados.
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>
</ApplicationManifest>
ServiceManifestImport
ServiceManifestImport
No elemento , você pode especificar um ou mais serviços que deseja incluir no aplicativo. Os serviços são referenciados com ServiceManifestName
, que especifica o nome do diretório onde o ServiceManifest.xml
arquivo está localizado.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>
Configurar o registo
Para executáveis convidados, é útil poder ver os logs do console para descobrir se os scripts de aplicativo e configuração mostram erros.
O redirecionamento do console pode ser configurado no arquivo usando o ServiceManifest.xml
ConsoleRedirection
elemento .
Aviso
Nunca use a política de redirecionamento de console em um aplicativo implantado em produção, pois isso pode afetar o failover do aplicativo. Use isso apenas para fins de desenvolvimento local e depuração.
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
<ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
</ExeHost>
</EntryPoint>
ConsoleRedirection
pode ser usado para redirecionar a saída do console (stdout e stderr) para um diretório de trabalho. Isso fornece a capacidade de verificar se não há erros durante a instalação ou execução do aplicativo no cluster do Service Fabric.
FileRetentionCount
Determina quantos arquivos são salvos no diretório de trabalho. Um valor de 5, por exemplo, significa que os arquivos de log das cinco execuções anteriores são armazenados no diretório de trabalho.
FileMaxSizeInKb
Especifica o tamanho máximo dos arquivos de log.
Os arquivos de log são salvos em um dos diretórios de trabalho do serviço. Para determinar onde os arquivos estão localizados, use o Service Fabric Explorer para determinar em qual nó o serviço está sendo executado e qual diretório de trabalho está sendo usado. Este processo é abordado mais adiante neste artigo.
Implementação
A última etapa é implantar seu aplicativo. O script PowerShell a seguir mostra como implantar seu aplicativo no cluster de desenvolvimento local e iniciar um novo serviço do Service Fabric.
Connect-ServiceFabricCluster localhost:19000
Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'
Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'nodeapp'
New-ServiceFabricApplication -ApplicationName 'fabric:/nodeapp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0
New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1
Gorjeta
Comprima o pacote antes de copiar para o armazenamento de imagens se o pacote for grande ou tiver muitos arquivos. Leia mais aqui.
Um serviço do Service Fabric pode ser implantado em várias "configurações". Por exemplo, ele pode ser implantado como instância única ou múltipla, ou pode ser implantado de tal forma que haja uma instância do serviço em cada nó do cluster do Service Fabric.
O InstanceCount
parâmetro do New-ServiceFabricService
cmdlet é usado para especificar quantas instâncias do serviço devem ser executadas no cluster do Service Fabric. Você pode definir o InstanceCount
valor, dependendo do tipo de aplicativo que está implantando. Os dois cenários mais comuns são:
InstanceCount = "1"
. Nesse caso, apenas uma instância do serviço é implantada no cluster. O agendador do Service Fabric determina em qual nó o serviço será implantado.InstanceCount ="-1"
. Nesse caso, uma instância do serviço é implantada em cada nó do cluster do Service Fabric. O resultado é ter uma (e apenas uma) instância do serviço para cada nó no cluster.
Essa é uma configuração útil para aplicativos front-end (por exemplo, um ponto de extremidade REST), porque os aplicativos cliente precisam "se conectar" a qualquer um dos nós no cluster para usar o ponto de extremidade. Essa configuração também pode ser usada quando, por exemplo, todos os nós do cluster do Service Fabric estão conectados a um balanceador de carga. O tráfego do cliente pode ser distribuído pelo serviço que está sendo executado em todos os nós do cluster.
Verifique o seu aplicativo em execução
No Service Fabric Explorer, identifique o nó onde o serviço está sendo executado. Neste exemplo, ele é executado em Node1:
Se você navegar até o nó e navegar até o aplicativo, verá as informações essenciais do nó, incluindo sua localização no disco.
Se você navegar para o diretório usando o Gerenciador de Servidores, poderá encontrar o diretório de trabalho e a pasta de log do serviço, conforme mostrado na captura de tela a seguir:
Próximos passos
Neste artigo, você aprendeu como empacotar um executável convidado e implantá-lo no Service Fabric. Consulte os seguintes artigos para obter informações e tarefas relacionadas.
- Exemplo para empacotamento e implantação de um executável convidado, incluindo um link para o pré-lançamento da ferramenta de empacotamento
- Exemplo de dois executáveis convidados (C# e nodejs) se comunicando por meio do serviço de nomenclatura usando REST
- Crie seu primeiro aplicativo do Service Fabric usando o Visual Studio