Tutorial 3: Implemente uma condição if-else em seu fluxo de trabalho - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial 3: Implemente uma condição if-else em seu fluxo de trabalho

Você pode implementar condições if-else em seus fluxos de trabalho usando o estado Choice. Ele determina o caminho de execução do fluxo de trabalho com base no fato de uma condição especificada ser avaliada como verdadeira ou falsa.

Neste tutorial, você vai adicionará lógica condicional para determinar se o valor do crédito aplicado retornado pela função do Lambda RandomNumberforCredit usada no Tutorial 2 excede um limite específico. Se o valor exceder o limite, o aplicativo exigirá uma interação humana para aprovação. Caso contrário, o aplicativo é aprovado automaticamente e segue para a próxima etapa.

Você vai simular a etapa de interação humana pausando a execução do fluxo de trabalho até que um token de tarefa seja retornado. Para fazer isso, você passará um token de tarefa para a integração do SDK AWS que você vai usar neste tutorial, que é o Amazon Simple Notification Service. A execução do fluxo de trabalho será pausada até que ele receba o token da tarefa de volta com uma chamada de API SendTaskSuccess. Para mais informações sobre o uso de tokens da tarefa, consulte Aguardar um retorno de chamada com um token de tarefa.

Como você já definiu as etapas para aprovação humana e aprovação automática em seu protótipo de fluxo de trabalho, neste tutorial, primeiro você cria um tópico do Amazon SNS que recebe o token de retorno de chamada. Em seguida, você cria uma função do Lambda para implementar a funcionalidade de retorno de chamada. Por fim, você atualiza seu protótipo de fluxo de trabalho adicionando os detalhes destas integrações de Serviço da AWS.

Etapa 1: Criar um tópico do Amazon SNS que recebe o token de retorno de chamada

Para implementar a etapa de interação humana, você publicará em um tópico do Amazon Simple Notification Service e passará o token da tarefa de retorno de chamada para esse tópico. A tarefa de retorno de chamada pausará a execução do fluxo de trabalho até que o token da tarefa seja retornado com uma carga útil.

  1. Abra o console do Amazon SNS e crie um tipo de tópico Padrão. Para obter informações sobre a criação de um tópico, consulte Criar um tópico do Amazon SNS no Guia do desenvolvedor do Amazon Simple Notification Service.

  2. Especifique o nome do tópico como TaskTokenTopic.

  3. Copie o ARN do tópico e salve-o em um arquivo de texto. Você precisará do ARN do tópico ao especificar a integração do serviço para o estado Aguardar aprovação humana. Veja um exemplo de ARN do tópico a seguir:

    arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
  4. Crie uma assinatura baseada em e-mail para o tópico e confirme sua inscrição. Para obter informações sobre assinar um tópico, consulte Criar uma assinatura do tópico no Guia do desenvolvedor do Amazon Simple Notification Service.

Etapa 2: Criar uma função do Lambda para lidar com o retorno de chamada

Para lidar com a funcionalidade de retorno de chamada, você vai definir uma função do Lambda e adicionar o tópico do Amazon SNS criado na Etapa 1 como um gatilho para essa função. Quando você publica no tópico do Amazon SNS com um token de tarefa, a função do Lambda é invocada com a carga útil da mensagem publicada.

Etapa 2.1: Criar a função do Lambda para lidar com o retorno de chamada

Nessa função, você vai processar a solicitação de aprovação do limite de crédito e retornar o resultado da solicitação como bem-sucedido com a chamada de API SendTaskSuccess. Essa função do Lambda também vai retornar o token de tarefa que recebeu do tópico do Amazon SNS.

Para simplificar, a função do Lambda usada para a etapa de interação humana aprova automaticamente qualquer tarefa e retorna o token da tarefa com uma chamada de API SendTaskSuccess. Você pode nomear a função do Lambda como callback-human-approval.

  1. Em uma nova guia ou janela, abra o console do Lambda e crie uma função do Lambda do Node.js 16.x intitulada callback-human-approval. Para obter mais informações sobre como usar a função do Lambda usando o console, consulte Criar uma função do Lambda no console no Guia do desenvolvedor do AWS Lambda.

  2. Na página callback-human-approval, substitua o código na área Origem do código pelo código a seguir.

    // Sample Lambda function that will automatically approve any task whenever a message is published to an Amazon SNS topic by Step Functions. console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; exports.handler = async (event, context) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
  3. Mantenha essa janela aberta e execute as etapas na próxima seção para ações adicionais.

Etapa 2.2: Adicionar o tópico do Amazon SNS como um gatilho para a função do Lambda

Quando você adiciona o tópico do Amazon SNS criado na Etapa 1 deste tutorial como um gatilho para a função do Lambda que você criou na Etapa 2.1 deste tutorial, a função do Lambda é acionada sempre que você publica no tópico do Amazon SNS. Quando você publica no tópico do Amazon SNS com um token de tarefa, a função do Lambda é invocada com a carga útil da mensagem publicada. Para obter mais informações sobre a configuração de acionadores para funções do Lambda, consulte Como configurar gatilhos no Guia do desenvolvedor do AWS Lambda.

  1. Na seção Visão geral da função da função do Lambdacallback-human-approval, escolha Adicionar gatilho.

  2. Na lista suspensa de gatilhos, escolha um SNS como o gatilho.

  3. Para o tópico do SNS, comece digitando o nome do tópico do Amazon SNS que você criou na Etapa 1 deste tutorial e escolha-o na lista suspensa que aparece.

  4. Escolha Add (Adicionar).

  5. Mantenha essa janela aberta e execute as etapas na próxima seção para ações adicionais.

Etapa 2.3: Fornecer permissões necessárias para a função do Lambda: perfil do IAM

Você deve fornecer à função do Lambda callback-human-approval as permissões para acessar Step Functions para retornar o token da tarefa junto com a chamada de API SendTaskSucess.

  1. Na página callback-human-approval, escolha a guia Configuração e escolha Permissões.

  2. Em Função de execução, escolha o Nome da função para navegar até a página Funções do console do AWS Identity and Access Management.

  3. Para adicionar a permissão necessária, escolha Adicionar permissão e Anexar políticas.

  4. Na caixa Pesquisar, digite AWSStepFunctions e pressione Enter.

  5. Escolha AWSStepFunctionsFullAccess e role para baixo para escolher Anexar políticas. Isso adiciona a política que contém a permissão necessária para a função do Lambda callback-human-approval.

Etapa 3: Atualizar o fluxo de trabalho, adicionar a lógica de condição if-else no estado Escolha

No console do Step Functions, defina a lógica condicional para seu fluxo de trabalho usando o estado Choice. Se a saída retornada pela função do Lambda RandomNumberforCredit for menor que 5.000, o crédito solicitado será aprovado automaticamente. Se a saída retornada for maior ou igual a 5.000, a execução do fluxo de trabalho prosseguirá para a etapa de interação humana para aprovação do limite de crédito.

No estado Choice, você usa um operador de comparação para comparar uma variável de entrada com um valor específico. Você pode especificar a variável de entrada como entrada de execução ao iniciar a execução de uma máquina de estado ou usar a saída de uma etapa anterior como entrada para a etapa atual. Por padrão, a saída de uma etapa é armazenada em uma variável chamada Payload. Para usar o valor da variável Payload para comparação no estado Choice, use a sintaxe $ conforme mostrado no procedimento a seguir.

Para obter informações sobre como as informações fluem de um estado para outro e especificar entradas e saídas em seus fluxos de trabalho, consulte Tutorial 7: Configurar entrada e saída e Processamento de entrada e saída no Step Functions.

nota

Se o estado Choice usar uma variável de entrada especificada na entrada de execução da máquina de estado para comparação, use a sintaxe $.variable_name para realizar a comparação. Por exemplo, para comparar uma variável, como myAge, use a sintaxe $.myAge.

Como nessa etapa, o estado Choice receberá informações do estado Get credit limit (Obter limite de crédito), você usará a sintaxe $ para a configuração do estado Choice. Para explorar como o resultado da execução da máquina de estado difere quando você usa a sintaxe $.variable_name na configuração de estado Choice para se referir à saída de uma etapa anterior, consulte a seção Como depurar o caminho inválido Erro de estado de escolha no Tutorial 8.

Para adicionar a lógica de condição if-else usando o estado Choice
  1. Abra a janela do console do Step Functions contendo o protótipo do fluxo de trabalho que você criou no Tutorial 1: Criar o protótipo para sua máquina de estado.

  2. Escolha o estado Credit applied >= 5000? (Crédito aplicado >= 5000) e, na guia Configuração, especifique a lógica condicional da seguinte forma:

    1. Em Regras de escolha, escolha o ícone Editar no quadro Regra 1 para definir a regra de primeira escolha.

    2. Clique em Adicionar condições.

    3. Na caixa de diálogo Condições da regra 1, para Variável, insira $.

    4. Para Operador, escolha é menor que.

    5. Em Valor, escolha Número constante e insira 5000 no campo ao lado da lista suspensa Valor.

    6. Clique em Salvar condições.

    7. Para a lista suspensa Then next state is: (Então o próximo estado é:), escolha Auto-approve limit (Limite de aprovação automática).

    8. Escolha Adicionar nova regra de escolha e defina a regra de segunda opção quando o valor do crédito for maior ou igual a 5.000, repetindo as subetapas 2.b a 2.f. Em Operador, escolha é maior ou igual a.

    9. Para a lista suspensa Então o próximo estado é:, escolha Aguardar aprovação humana.

    10. No campo Regra padrão, clique no ícone de Editar para definir a regra de escolha padrão e selecione Aguardar aprovação humana na lista suspensa Estado padrão. Você define a regra padrão para especificar o próximo estado para o qual fazer a transição se nenhuma das condições do estado de Escolha for avaliada como verdadeira ou falsa.

  3. Configure o estado Aguardar aprovação humana da seguinte forma:

    1. Na guia Configuração, em Tópico, comece digitando o nome do tópico do Amazon SNS, TaskTokenTopic, e escolha o nome conforme ele aparece na lista suspensa.

    2. Em Mensagem, escolha Inserir mensagem na lista suspensa. No campo Mensagem, você especifica a mensagem que deseja publicar no tópico do Amazon SNS. Neste tutorial, você publica um token de tarefa como a mensagem.

      Um token de tarefa permite pausar um fluxo de trabalho do Step Functions do tipo padrão até que um processo externo seja concluído e o token de tarefa seja retornado. Quando você especifica um estado de Tarefa como uma tarefa de retorno de chamada especificando o padrão de integração do serviço .waitForTaskToken, um token de tarefa é gerado e colocado no objeto de contexto quando a tarefa é iniciada. O objeto de contexto é uma estrutura JSON interna que está disponível durante uma execução e contém informações sobre sua máquina de estado e execução. Para obter mais informações sobre objetos de contexto, consulte Objeto de contexto.

    3. Na caixa que aparece, insira o seguinte como mensagem:

      { "TaskToken.$": "$$.Task.Token" }
    4. Escolha a caixa de seleção Aguardar retorno de chamada.

    5. Escolha Concluído na caixa de diálogo que aparece.

  4. Mantenha essa janela aberta e prossiga para o próximo tutorial para realizar outras ações.

Próximas etapas

No próximo tutorial, você aprenderá a realizar várias tarefas em paralelo.