Invocar código legado

Você quer migrar seu aplicativo para o App Engine, mas há um problema: o código do servidor está vinculado a um sistema operacional específico e a portabilidade não é das mais simples. Talvez você esteja usando um objeto COM mais antigo escrito em C++ ou Visual Basic. Ou, ainda pior: seu código-fonte não existe mais e somente o binário executável permanece.

Neste tutorial, descrevemos um padrão de arquitetura para invocar código legado usando o App Engine, o Compute Engine e o Cloud Pub/Sub. Além disso, fornecemos um exemplo de implementação do padrão. Ainda que o exemplo de implementação se concentre no código específico do Windows, é possível reutilizar o padrão descrito aqui em qualquer código legado.

Objetivos

  • Saber mais sobre um padrão de arquitetura simples para invocar o código legado no Google Cloud Platform (GCP).
  • Fazer o download e implantar um exemplo do padrão de arquitetura.

Um padrão de arquitetura para invocar o código legado

O diagrama a seguir ilustra um padrão de arquitetura usado para invocar o código herdado do seu aplicativo do App Engine.

Padrão de arquitetura para invocar o código legado
Figura 1: padrão de arquitetura para invocar o código legado

Essa arquitetura funciona da seguinte forma:

  1. O cliente da Web envia uma solicitação ao aplicativo do App Engine, que grava a solicitação em um tópico do Cloud Pub/Sub.

  2. Um wrapper de código faz o pull da solicitação do tópico.

  3. O wrapper de código invoca o código legado.

  4. O código legado retorna o resultado ao wrapper. Em seguida, o wrapper retorna o resultado ao aplicativo do App Engine, que o retorna ao cliente da Web.

Exemplo de implementação do padrão

Há uma implementação do padrão anterior no GitHub. Esse aplicativo de exemplo toma uma string de caracteres como entrada, a processa usando os componentes descritos no padrão e retorna uma versão em letras maiúsculas. O código do aplicativo consiste em dois componentes principais:

  • O aplicativo do App Engine publica solicitações de entrada em um tópico do Cloud Pub/Sub.
  • O wrapper de código se inscreve no tópico do Cloud Pub/Sub e, quando recebe uma solicitação, a envia para algum código legado do Windows.

Nessa implementação, o wrapper é um serviço do Windows escrito em C#. Esse serviço de wrapper está configurado para ser executado quando a instância é iniciada e pode invocar qualquer script ou binário no C#. Tanto o serviço de wrapper quanto o binário invocado residem em uma instância do Compute Engine que executa o Windows Server 2012 R2.

A interface do usuário do aplicativo é semelhante a esta:

Interface do usuário do aplicativo Shout
Figura 2: interface do usuário do aplicativo Shout

Se você digitar a palavra "mars" e clicar em Enviar, o resultado será este:

Resultado do aplicativo Shout
Figura 3: resultado do aplicativo Shout

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud Platform:

  • Uma instância do Compute Engine com uma licença do Windows Server 2012
  • Serviços do Cloud Pub/Sub

Use a calculadora de preços para gerar uma estimativa de custo com base no uso do projeto. Novos usuários do GCP são qualificados para uma avaliação gratuita.

Pré-requisitos

Para este aplicativo de exemplo, partimos dos seguintes pressupostos:

Conseguir o código-fonte

Faça o download do código de exemplo aqui e descompacte-o. Se preferir, você poderá clonar o repositório do projeto do GitHub executando o seguinte comando:

C:\> git clone https://github.com/GoogleCloudPlatform/pubsub-shout-csharp.git

Instalar as dependências

No terminal de linha de comando, navegue até a pasta appengine-python-flask na cópia local do pubsub-shout-csharp e, em seguida, execute o seguinte:

C:\> pip install -r requirements.txt -t lib

Criar uma instância do Compute Engine

Crie a instância do Google Compute Engine em que o wrapper de código e o código legado serão executados:

  1. No Console do GCP, acesse a página Criar uma nova instância.

  2. Na seção Disco de inicialização, clique em Alterar.

  3. Na lista de imagens pré-configuradas, selecione Windows Server 2012 R2 Datacenter Edition e clique em Selecionar.

  4. Na seção Firewalls, permita o tráfego HTTP e HTTPS.

  5. Na seção Acesso ao projeto, permita o acesso total da API a todos os serviços do GCP no projeto.

  6. Clique em Gerenciamento, segurança, discos, rede, locatário único e na guia Rede para acessar as opções avançadas.

  7. Na seção Tags de rede, adicione a tag rdp-tag. Posteriormente no tutorial, você criará uma regra de firewall que permite o acesso RDP externo a todas as instâncias marcadas com esta tag.

  8. Para começar a criar sua nova instância, clique em Criar.

Depois de criar a instância, adicione um usuário padrão do Windows a ela:

  1. No Console do GCP, acesse a página Instâncias de VM.

  2. Clique no nome da instância recém-implantada.

  3. Na página da instância, clique no botão Definir senha do Windows.

  4. Para criar a conta de usuário na instância, na caixa de diálogo Definir nova senha do Windows, adicione seu nome de usuário e clique em Definir.

  5. Anote a senha fornecida e feche a caixa de diálogo.

Em seguida, crie uma regra de firewall para ativar o acesso RDP à instância:

  1. No Console do GCP, acesse a página Criar regra de firewall.

  2. Preencha o formulário da seguinte maneira:

    • Nome: rdp-rule
    • Intervalos de IPs de origem: 0.0.0.0/0
    • Portas e protocolos permitidos: tcp:3389
    • Tags de destino: rdp-tag
  3. Para criar a regra de firewall, clique em Criar.

Criar e implantar o wrapper do código

Para criar o serviço de wrapper de código:

  1. No Console do GCP, acesse a página Credenciais.

  2. Clique em Novas credenciais e selecione a Chave da conta de serviço.

  3. Na página Criar chave da conta de serviço, preencha o formulário da seguinte maneira:

    • Conta de serviço: nova conta de serviço
    • Nome: um nome de sua escolha
    • ID da conta de serviço: uma identificação de sua escolha
    • Tipo de chave: JSON
  4. Clique em Criar. Após alguns segundos, um arquivo de chave JSON é enviado para o computador local.

  5. Na máquina local, crie uma nova variável de ambiente chamada GOOGLE_APPLICATION_CREDENTIALS e configure-a como o caminho absoluto do arquivo de chave JSON.

  6. Acesse a pasta windows-csharp na cópia local do repositório pubsub-shout-csharp.

  7. Abra ShoutService.sln no Visual Studio 2012 ou posterior.

  8. Edite o ShoutLib/Constants.cs, defina a variável ProjectId para o código do projeto https://console.cloud.google.com/ e salve.

  9. No menu Compilar, clique em Compilar solução para criar o aplicativo.

Depois de criar o serviço de wrapper de código, copie-o para a instância do Compute Engine:

  1. Estabeleça uma conexão entre o computador remoto e a instância criada anteriormente no tutorial.

  2. Na máquina local, no Windows Explorer, acesse a pasta ShoutService\bin na pasta windows-csharp.

  3. Copie a pasta Release do Windows Explorer e cole-a na janela da conexão remota para copiar a pasta para a instância. A pasta Release contém o wrapper e o serviço Shout.

Em seguida, permita que o Gerenciador de Controle de Serviços do Windows inicie o serviço, interrompa-o e interaja com ele. Para isso, conceda permissões apropriadas ao SERVIÇO LOCAL, uma conta de usuário predefinida do Windows usada pelo Gerenciador de Controle de Serviços:

  1. No Windows Explorer, acesse a pasta Release.

  2. Clique com o botão direito na pasta para abrir o menu de contexto e, em seguida, clique em Propriedades.

  3. Na caixa de diálogo Propriedades de Versão, clique na guia Segurança.

  4. Clique em Editar.

  5. Na caixa de diálogo Permissões para Versão, clique em Adicionar.

  6. Na caixa de diálogo Selecionar Usuários ou Grupos, em Digite os nomes de objeto a serem selecionados, digite LOCAL SERVICE e clique em OK.

  7. Na caixa de diálogo Permissões para Versão, clique em LOCAL SERVICE.

  8. Em Permissões para LOCAL SERVICE, verifique se as seguintes permissões estão ativadas:

    • Ler e executar
    • Listar conteúdo da pasta
    • Leitura
  9. Clique em OK.

Por último, instale o serviço de wrapper de código:

  1. Na máquina remota, abra o terminal da linha de comando como Administrador e navegue até a pasta Release.

  2. Instale o serviço de wrapper de código:

    C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ShoutService.exe
    

Implantar o aplicativo do App Engine

Para implantar o aplicativo do App Engine:

  1. Na máquina local, no terminal da linha de comando, navegue até a pasta appengine-python-flask na cópia local do repositório pubsub-shout-csharp.

  2. Implante o aplicativo.

    C:\> appcfg.py -A <your_project_id> -V 1 --oauth2 update .
  3. Autentique o aplicativo, quando solicitado.

  4. Ativar Cloud Pub/Sub API.

    Ativar a API

  5. Para inicializar o aplicativo, acesse o seguinte URL no seu navegador da Web:

    https://<your_project_id>.appspot.com/init

    Quando você acessa esse URL, o aplicativo do App Engine cria um tópico do Cloud Pub/Sub e depois assina o serviço de wrapper de código ao tópico.

Parabéns! Agora seu aplicativo está ativo. Acesse <your_project_id>.appspot.com para vê-lo em funcionamento.

Limpeza

Depois de concluir o tutorial "Invocar código legado", será possível limpar os recursos criados no Google Cloud Platform para que eles não ocupem cotas e você não seja cobrado por eles no futuro. Veja como excluir e desativar esses recursos nas seções a seguir.

Excluir seu projeto do GCP

A maneira mais fácil de evitar cobranças é excluir o projeto criado para o tutorial.

Para excluir o projeto:

  1. No Console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

Excluir a instância do Compute Engine

Para excluir uma instância do Compute Engine:

  1. No Console do GCP, acesse a página "Instâncias de VM".

    Acessar a página "Instâncias de VMs"

  2. Clique na caixa de seleção ao lado da da instância que deseja excluir.
  3. Clique no botão Excluir na parte superior da página para excluir a instância.

Próximos passos

  • Teste outros recursos do Google Cloud Platform. Veja os tutoriais.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…