think - O principal evento global de Cloud Híbrida e IA - 11/05 | Américas e 12/05 | APAC e EMEA Inscrição Gratuita

Laboratório rápido: Nenhuma infraestrutura, apenas código. Veja a simplicidade do serverless

A computação serverless refere-se a um modelo em que a existência de servidores é inteiramente abstraída. Embora os servidores existam, os desenvolvedores livram-se da necessidade de cuidar da operação deles. Não precisam mais se preocupar com detalhes operacionais e de infraestrutura de baixo nível, como escalabilidade, alta disponibilidade e segurança da infraestrutura, entre outros. A computação serverless consiste, essencialmente, em reduzir os esforços de manutenção para permitir que os desenvolvedores se concentrem rapidamente em desenvolver um código que agregue valor.

Ela simplifica o desenvolvimento de aplicativos nativos de nuvem, especialmente soluções orientadas a microsserviços que decompõem aplicativos complexos em módulos pequenos e independentes que possam ser trocados facilmente.

A computação serverless não se refere a uma tecnologia específica. Refere-se, em vez disso, aos conceitos subjacentes ao modelo descrito anteriormente. Recentemente surgiram algumas soluções promissoras, como o Apache OpenWhisk, que facilitam as abordagens de desenvolvimento usadas no modelo serverless.

O IBM Cloud Functions é uma plataforma de função como serviço (FaaS) na IBM Cloud, desenvolvida usando o projeto open-source Apache OpenWhisk, que permite executar código em resposta a um evento.

Ele oferece um modelo de implementação e operações serverless. Com um modelo de preço granular que funciona em qualquer escala, você recebe exatamente os recursos de que precisa (nem mais, nem menos) e paga pelo código que está realmente em execução. O modelo de programação flexível inclui suporte para linguagens como JavaScript, Swift, Python e Java, bem como suporte para executar lógica personalizada por meio de contêineres do Docker. Esse modelo de programação permite que pequenas equipes ágeis reutilizem aptidões existentes e desenvolvam de maneira adequada para o propósito. O IBM Cloud Functions também inclui ferramentas para encadear declarativamente os blocos de construção desenvolvidos. É possível encadear microsserviços para formar fluxos de trabalho por meio da composição. Ele é aberto e pode ser executado em qualquer lugar, evitando que você fique preso a um fornecedor.

Tempo estimado

A conclusão deste tutorial deverá levar cerca de 45 minutos.

Pré-requisitos

Para concluir este tutorial, você precisará de uma conta da IBM Cloud. Caso não tenha uma conta existente, visite a documentação de Como configurar sua conta da IBM Cloud para obter instruções detalhadas.

Etapas

Estas são as etapas necessárias para concluir o tutorial.

  1. Criar uma ação
  2. Invocar com parâmetros
  3. Criar um gatilho
  4. Criar uma ação da web

1. Criar uma ação

Existem duas opções principais para começar a usar o IBM Cloud Functions. Com ambas, você trabalha com entidades básicas, criando, atualizando e excluindo ações, gatilhos, regras e sequências.

Com a interface de linha de comando, essas operações básicas são realizadas no shell. Com a interface do usuário do IBM Cloud Functions, as mesmas operações são realizadas no seu navegador. Este tutorial usa a interface do usuário no navegador.

  1. Entre na sua conta da IBM Cloud.

  2. Clique no ícone Navigation Menu.

    Captura de tela do painel da IBM Cloud com o ícone Navigation Menu em destaque

  3. Clique em Functions no menu para acessar o IBM Cloud Functions, a experiência de desenvolvimento nativa de nuvem na IBM Cloud.

    Captura de tela de Navigation Menu com a opção Functions em destaque

  4. Agora, você deve estar no console da web do IBM Cloud Functions. A página deve ter um menu de navegação que forneça links para todos os recursos de nível superior. Neste tutorial, você explorará as áreas de recursos a seguir mostradas no menu:

    • Actions, recurso usado para criar, editar e gerenciar ações usando qualquer linguagem de codificação funcional com suporte.

    • Triggers, recurso usado para criar, editar e gerenciar gatilhos que automatizam a execução ou o acionamento das suas ações usando eventos.

    • Monitor, recurso usado para exibir informações sobre suas invocações de ações e gatilhos (como execuções) na sua conta, incluindo resumo e linha do tempo das atividades.

  5. Crie sua primeira ação clicando no botão Start Creating, na página inicial do Functions.

    Captura de tela da página inicial do IBM Cloud Functions

    Depois, clique na seção Action da página.

    Captura de tela da página Create

  6. Insira um nome de ação, como hello, e verifique se a lista suspensa de tempo de execução mostra a versão de tempo de execução do Node.js padrão mais recente (por exemplo, Node.js 10). Agora, clique no botão Create.

    Captura de tela da página Create Action

  7. No editor de código baseado em nuvem que é aberto, é possível criar e modificar a função da sua ação. O editor deve ser preenchido automaticamente com uma função Hello World escrita em Node.js:

     function main(params) {
            return { message: "Hello World" };
        }
    

    Observação: Caso não veja um fragmento de código igual ao apresentado nesta etapa, é possível copiá-lo e colá-lo no editor de código, substituindo qualquer código existente, e clicar em Save. Em seguida, o botão Invoke aparecerá para ser usado na próxima etapa.

  8. Clique em Invoke para testar a ação diretamente no navegador.

    Captura de tela da tela do editor de código, com o botão Invoke em destaque

    Um painel Activations deve aparecer com um registro de ativação causado pela sua invocação, que inclui um ID de ativação, os resultados da invocação e todas as entradas de log escritas pela função (para este tutorial, nenhuma entrada de log deve aparecer).

    Captura de tela dos resultados do teste de ação que aparecem no painel Activations

    Agora, você deverá ver que o resultado da invocação é um objeto JSON com a seguinte mensagem Hello World:

     {
       "message": "Hello World"
     }
    

    Um registro de ativação exclusivo é feito para cada invocação que contém informações detalhadas de configuração e métrica não mostradas nesta página. Ainda neste tutorial, você explorará o painel Monitor, em que é possível visualizar todas as ativações da conta ao longo do tempo e acessar os detalhes delas.

    Observação: Se você sair dessa janela e retornar, as ativações mostradas aqui serão redefinidas.

2. Invocar com parâmetros

A interface do usuário permite que parâmetros nomeados sejam declarados e passados a funções no formato do objeto JSON.

  1. Confira se sua janela de código está no modo de edição. Atualize a função de ação hello com o código abaixo e clique em Save:

     function main(params) {
        return { message: "Hello, " + params.name + " from " + params.place };
     }
    
  2. Agora, essa ação exige os parâmetros de entrada name e place. Para adicionar parâmetros, clique em Invoke with parameters.

    Captura de tela da tela do editor de código, com o botão Invoke with parameters em destaque

    Isso fará aparecer a caixa de diálogo Change Action Input.

  3. Adicione os dados JSON a seguir à área de entrada Change Action Input dentro da caixa de diálogo e clique em Apply:

     {
       "name": "Elrond",
       "place": "Rivendell"
     }
    

    Captura de tela da caixa de diálogo Change Action Input

  4. Clique em Invoke para executar a ação novamente usando os novos dados de entrada. Você deverá receber o resultado a seguir no painel Activations:

     {
       "message": "Hello, Elrond from Rivendell"
     }
    

3. Criar um gatilho

Como uma plataforma FaaS, o IBM Cloud Functions executa código em resposta a eventos. Os eventos podem ser gerados por:

  • Chamadas de API acionadas por aplicativos móveis ou da web padrão, os quais podem ser configurados para acionar ações. Foi isso que você fez até o momento na interface do usuário; o botão Invoke acionou uma chamada direta para sua ação.

  • Serviços que fazem parte da plataforma IBM Cloud ou de provedores de serviços externos que usam gatilhos.

Nas próximas etapas, você criará um gatilho para executar periodicamente uma função usando o serviço de alarme integrado do IBM Cloud Functions.

  1. Atualize a ação hello existente com o código de amostra a seguir e clique em Save:

     var counter = 0; // global variable
     function main(msg) {
         var date = new Date();
         var time = date.getHours() + ":" + date.getMinutes() + ":" +
         date.getSeconds();
         counter++;
         return { message: "It is " + time + ". This action has been called " + counter + " time(s)." };
     }
    

    Essa ação retorna o horário e a frequência dos horários invocados. Um contador é usado como variável global para manter a contagem. Por se tratar de uma variável global, persiste em diferentes invocações da mesma ação.

  2. Clique em Connected Triggers no menu de navegação e, depois, em Add Trigger.

    Captura de tela da página Connected Triggers com Add Trigger em destaque

    Agora, selecione um Periodic como tipo de gatilho.

    Captura de tela da página Connect Trigger com a opção Periodic em destaque

  3. No campo Trigger Name, digite minute alarm. Em seguida, na seção Timer Settings e no padrão UTC Minutes, selecione Every Minute na lista Select a pattern. Clique no botão Create & Connect para criar o gatilho e conectá-lo à ação hello.

    Captura de tela da página New Trigger Configuration

  4. Use a trilha de migalhas na página para navegar até a página Actions. Selecione Monitor no menu para ver as atividades recentes das suas ações e gatilhos.

    Captura de tela da página Connected Triggers com o gatilho minute alarm listado e Actions em destaque na trilha de migalhas

    O painel Activity Log deve mostrar que o feed de alarme periódico realmente acionou o gatilho minute alarm a cada minuto, o que, por sua vez, acionou a ação hello conectada.

    Captura de tela da página Monitor com o painel Activity Log em destaque

  5. Retorne à página Triggers e exclua o gatilho ou ele continuará sendo disparado a cada minuto, o que será contado no uso de computação da camada da conta!

    Clique no ícone Delete trigger ao lado de minute alarm para excluí-lo.

    Captura de tela da página Triggers com o ícone Delete trigger em destaque ao lado do gatilho minute alarm

    Selecione Delete na caixa de diálogo de confirmação.

    Observação: Como alternativa, é possível desativar o gatilho clicando no nome dele e desmarcando a configuração Enabled sob a coluna Connection. Em seguida, você usaria a trilha de migalhas para navegar de volta à página Triggers.

4. Criar uma ação da web

Agora, você tornará a ação hello acessível para a web e fará o IBM Cloud Functions criar automaticamente um terminal HTTP para ele.

  1. Selecione Actions no menu. Em seguida, selecione a ação hello.

    Captura de tela da página Actions com a ação hello em destaque

  2. Atualize a ação hello existente com o código a seguir:

    function main(params) {
        let html = '<html style="color:red"><body><p>' +
        'Hello, ' + params.name + ` from ` + params.place +
        '</p></body></html>'
        return { headers: { "Content-Type": "text/html" },
                 body: html };
    }
    

    Clique em Save.

    Captura de tela da tela do editor de código, com o botão Save em destaque

    Quando você clicar em Invoke, a função retornará a mensagem Hello formatada em HTML dentro do body da resposta HTTP. Você também definiu Content-Type como text/html no cabeçalho da resposta HTTP.

  3. Para transformar sua ação em uma ação da web, selecione Endpoints no menu. Depois, marque a caixa Enable as Web Action e clique em Save.

    Captura de tela da página Endpoints com uma marca de verificação na caixa Enable as Web Action e o botão Save em destaque

  4. Depois de salvar, é possível abrir a URL gerada no seu navegador da web clicando nela.

    Captura de tela da parte Web Action da página Endpoints, com a URL gerada em destaque

    Agora, sua saudação deve aparecer na página do navegador da web.

    Captura de tela da saudação, Hello, undefined from undefined, na caixa vermelha na página do navegador da web

    No entanto, a saudação mostra undefined para os valores de name e place. Vamos corrigir isso.

  5. Anexe os parâmetros de consulta a seguir à sequência da URL no seu navegador da web e reenvie a solicitação clicando em Enter no seu teclado.

     ?name=Frodo&place=Shire
    

    Os parâmetros de consulta para name e place são passados como parâmetros de entrada para a ação. Agora, a mensagem “Hello, Frodo from Shire” deve aparecer na página do seu navegador da web.

    Captura de tela da saudação, Hello, Frodo from Shire, em texto vermelho na página do navegador da web

Resumo

Parabéns! Você conseguiu desenvolver e implementar várias funções serverless, incluindo ações da web que podem ser chamadas no navegador ou em microsserviços, tudo dentro de um navegador.

Agora, é possível experimentar essas etapas com seu próprio código. Experimente um pouco mais com aplicativos serverless nativo de nuvem em execução, escrito em Node.js.