Repita um loop com o Lambda - 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á.

Repita um loop com o Lambda

Neste tutorial, você irá implementar um padrão de design que usa uma máquina de estado e uma função de AWS Lambda para iterar um loop um número específico de vezes.

Use esse padrão de design sempre que precisar para controlar o número de loops em uma máquina de estado. Essa implementação pode ajudar você a dividir grandes tarefas ou execuções de longa execução em partes menores. Ela também será útil no encerramento de uma execução após um número específico de eventos. Você pode usar uma implementação semelhante para encerrar e reiniciar periodicamente uma execução de longa duração para evitar exceder as cotas de serviço para AWS Step Functions AWS Lambda, ou outros serviços. AWS

Antes de começar, leia o tutorial do Como criar uma máquina de estado Step Functions que usa Lambda para garantir que você esteja familiarizado com o uso do Lambda e do Step Functions juntos.

Etapa 1: Criar uma função do Lambda para iterar uma contagem

Ao usar uma função do Lambda, você pode controlar o número de iterações de um loop na sua máquina de estado. A função do Lambda a seguir recebe os valores de entrada para count, index e step. Ela retorna esses valores com um index atualizado e um valor booliano chamado continue. A função do Lambda definirá continue como true se index for menor que count.

A seguir, a máquina de estado implementa um estado de Choice que executa certa lógica de aplicação se continue for true, ou é encerrada se for false.

Para criar a função do Lambda

  1. Faça login no console do Lambda e escolha Criar função.

  2. Na página Create function, selecione Author from scratch.

  3. Na seção Informações básicas, configure a função do Lambda da seguinte maneira:

    1. Em Function name (Nome da função), insira Iterator.

    2. Em Runtime (Tempo de execução), selecione Node.js.

    3. Em Alterar a função de execução padrão, escolha Create a new role with basic Lambda permissions (Criar uma função com permissões básicas do Lambda).

    4. Escolha a opção Criar função.

  4. Copie o código a seguir para a função Lambda na fonte do código.

    export const handler = function (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index = index + step callback(null, { index, step, count, continue: index < count }) }

    Esse código aceita os valores de entrada count, index e step. Ele incrementa o index pelo valor da step e retorna esses valores e o booliano continue. O valor de continue é true se index for inferior a count.

  5. Escolha Implantar.

Etapa 2: Testar a função do Lambda

Execute a sua função do Lambda com valores numéricos para vê-la em operação. Você pode fornecer valores de entrada para sua função Lambda que imitam uma iteração.

Para testar a função do Lambda

  1. Escolha Testar.

  2. Na caixa de diálogo Configurar evento de teste, insira TestIterator na caixa Nome do evento.

  3. Substitua os dados de exemplo pelo seguinte:

    { "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }

    Esses valores imitam o que pode ser proveniente de sua máquina de estado durante uma iteração. A função Lambda incrementará o índice e retornará true continue quando o índice for menor que. count Para este teste, o índice já foi incrementado para 5. O teste será index incrementado 6 e definido comocontinue. true

  4. Escolha Criar.

  5. Escolha Testar para testar sua função Lambda.

    Os resultados do teste são exibidos na guia Resultados da execução.

  6. Escolha a guia Resultados da execução para ver a saída.

    { "index": 6, "step": 1, "count": 10, "continue": true }
    nota

    Se você configurar 9 e index testar novamente, os index incrementos para10, e continue serãofalse.

Etapa 3: Criar uma máquina de estado

Antes de sair do console Lambda...

Copie o ARN da função Lambda. Cole-o em uma nota. Você precisará dele na próxima etapa.

Em seguida, você criará uma máquina de estados com os seguintes estados:

  • ConfigureCount— Define valores padrão para countindex, step e.

  • Iterator— Refere-se à função Lambda que você criou anteriormente, passando os valores configurados em. ConfigureCount

  • IsCountReached— Um estado de escolha que continua o loop ou continua até o Done estado, com base no valor retornado de sua Iterator função.

  • ExampleWork— Um esboço para o trabalho que precisa ser feito. Neste exemplo, o fluxo de trabalho tem um Pass estado, mas em uma solução real, você provavelmente usaria umTask.

  • Done— Estado final do seu fluxo de trabalho.

Para criar a máquina de estado no console:

  1. Abra o console do Step Functions e escolha Create a state machine (Criar uma máquina de estado).

    Importante

    Sua máquina de estado deve estar na mesma AWS conta e região da sua função Lambda.

  2. Selecione o modelo em branco.

  3. No painel Código, cole o seguinte JSON que define a máquina de estado.

    Para obter mais informações sobre a Amazon States Language, consulte Estrutura da máquina de estado.

    { "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
  4. Substitua o Iterator Resource campo pelo ARN da função Iterator Lambda que você criou anteriormente.

  5. Selecione Config e insira um nome para sua máquina de estado, como. IterateCount

    nota

    Os nomes das máquinas de estado, execuções e tarefas de atividade não devem exceder oitenta caracteres. Esses nomes devem ser exclusivos para sua conta e AWS região e não devem conter nenhum dos seguintes itens:

    • Espaço em branco

    • Caracteres curinga (? *)

    • Caracteres de colchete (< > { } [ ])

    • Caracteres especiais (" # % \ ^ | ~ ` $ & , ; : /)

    • caracteres de controle (\\u0000 - \\u001f ou \\u007f - \\u009f).

    Se sua máquina de estado for do tipo Express, você poderá fornecer o mesmo nome para várias execuções da máquina de estado. O Step Functions gera um ARN de execução exclusivo para cada execução de máquina de estado Express, mesmo que várias execuções tenham o mesmo nome.

    Step Functions permite criar nomes para máquinas de estado, execuções e atividades, além de rótulos que contenham caracteres não ASCII. Esses nomes não ASCII não funcionam com a Amazon. CloudWatch Para garantir que você possa acompanhar CloudWatch as métricas, escolha um nome que use somente caracteres ASCII.

  6. Para Tipo, aceite o valor padrão de Padrão. Em Permissões, escolha Criar nova função.

  7. Escolha Criar e, em seguida, Confirme as criações da função.

Etapa 4: Iniciar uma nova execução

Assim que criar sua máquina de estado, poderá iniciar uma execução.

  1. Na IterateCountpágina, escolha Iniciar execução.

  2. (Opcional) Para identificar a execução, insira um nome para ela no campo Nome. Por padrão, o Step Functions cria automaticamente um nome de execução exclusivo.

    nota

    Step Functions permite criar nomes para máquinas de estado, execuções e atividades, além de rótulos que contenham caracteres não ASCII. Esses nomes não ASCII não funcionam com a Amazon. CloudWatch Para garantir que você possa acompanhar CloudWatch as métricas, escolha um nome que use somente caracteres ASCII.

  3. Escolha Start Execution.

    Uma nova execução de sua máquina de estado inicia-se mostrando sua execução em andamento.

    Visualização do gráfico da máquina de estado, mostrando o estado do Iterador em azul para indicar o status em andamento.

    A execução é incrementada em etapas, fazendo o acompanhamento da contagem com a função do Lambda. Em cada iteração, ela executa o exemplo mencionado no estado ExampleWork em sua máquina de estado.

    Quando a contagem atingir o número especificado no estado ConfigureCount em sua máquina de estado, a execução fechará a iteração e será encerrada.

    Visualização do gráfico da máquina de estado, mostrando o estado do Iterador e o estado Concluído em verde para indicar que ambos foram bem-sucedidos.