Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Usar uma função do Lambda para prosseguir com uma nova execução no Step Functions

Modo de foco
Usar uma função do Lambda para prosseguir com uma nova execução no Step Functions - 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á.

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á.

dica

A abordagem a seguir usa uma função do Lambda para iniciar uma nova execução do fluxo de trabalho. Recomendamos usar o estado de tarefa do Step Functions para iniciar novas execuções do fluxo de trabalho. Veja como no seguinte tutorial: Prosseguir com fluxos de trabalho de longa duração usando a API do Step Functions (recomendado) .

Você pode criar uma máquina de estado que usa uma função do Lambda para iniciar uma nova execução antes que a execução atual termine. Com essa abordagem para prosseguir com o trabalho em andamento em uma nova execução, é possível dividir trabalhos maiores em fluxos de trabalho menores, ou executar um fluxo de trabalho indefinidamente.

Este tutorial se baseia no conceito de usar uma função do Lambda externa para modificar seu fluxo de trabalho, que foi demonstrado no tutorial Iterar um loop com uma função do Lambda no Step Functions. Você usa a mesma função do Lambda (Iterator) para iterar um loop por um número de vezes específico. Além disso, você cria outra função do Lambda para iniciar uma nova execução do seu fluxo de trabalho e para diminuir uma contagem cada vez que iniciar uma nova execução. Ao definir o número de execuções na entrada, essa máquina de estado encerra e reinicia uma execução um número de vezes específico.

A máquina de estado que você criará implementa os seguintes estados.

Estado Finalidade

ConfigureCount

Um estado Pass que configura os valores count, index e step que são usados pela função do Lambda do Iterator para percorrer iterações de trabalho.

Iterator

Um estado Task que faz referência à função do Lambda do Iterator.

IsCountReached

Um estado Choice que usa um valor booliano da função Iterator para decidir se a máquina de estado deve continuar o trabalho de exemplo, ou mover para o estado ShouldRestart.

ExampleWork

Um estado Pass que representa o estado Task que deve executar trabalhos em uma implementação real.

ShouldRestart

Um estado Choice que usa o valor executionCount para decidir se deve terminar uma execução e iniciar outra, ou simplesmente finaliza.

Restart

Um estado Task que usa uma função do Lambda para iniciar uma nova execução de sua máquina de estado. Como a função Iterator, essa função também diminui uma contagem. O estado Restart passa o valor diminuído da contagem para a entrada da nova execução.

Pré-requisitos

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

nota

Se tiver concluído o tutorial do Iterar um loop com uma função do Lambda no Step Functions, você poderá ignorar esta etapa e usar essa função do Lambda.

Esta seção e o tutorial do Iterar um loop com uma função do Lambda no Step Functions mostra como usar uma função do Lambda para rastrear uma contagem, por exemplo, o número de iterações de um loop em 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 booliano chamado continue. A função do Lambda definirá continue como true se index for menor que count.

Sua máquina de estado implementa um estado de Choice que executa certa lógica de aplicação se continue for true, ou move-se para ShouldRestart se continue for false.

Criar a função do Lambda Iterar

  1. Abra o console do Lambda e escolha Create function (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, selecione Node.js 16.x.

    3. Mantenha todas as seleções padrão na página e escolha Criar função.

      Quando a função do Lambda for criada, anote o respectivo Nome do recurso da Amazon (ARN) que aparece no canto superior direito da página, por exemplo:

      arn:aws:lambda:us-east-1:123456789012:function:Iterator
  4. Copie o código a seguir para a função Lambda na seção Fonte de código da Iteratorpágina no console Lambda.

    exports.handler = function iterator (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 de step e retorna esses valores e o booliano de continue. O valor de continue é true se index for inferior a count.

  5. Escolha Implantar para implantar o código.

Testar a função do Lambda Iterar

Para visualizar a função Iterate funcionando, execute-a com valores numéricos. Você pode fornecer valores de entrada para a função do Lambda que imitam uma iteração para verificar o resultado obtido com valores de entrada específicos.

Para testar a função do Lambda

  1. Na caixa de diálogo Configure test event, escolha Create new test event e digite TestIterator para Event name.

  2. 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 do Lambda incrementa o índice e retorna continue como true. Quando o índice não é menor que count, ele retorna continue como false. Para este teste, o índice já foi incrementado para 5. Os resultados devem incrementar o index para 6 e definir continue como true.

  3. Escolha Criar.

  4. Na Iterator página do console Lambda, verifique se TestIteratorestá listado e escolha Testar.

    Os resultados do teste são exibidos na parte superior da página. Escolha Details e verifique o resultado.

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

    Se você definir index como 9 para este teste, o index será incrementado para 10 e continue será false.

Etapa 2: Criar uma função do Lambda Reiniciar para iniciar uma nova execução do Step Functions

  1. Abra o console do Lambda e escolha Create function (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 Restart.

    2. Em Runtime, selecione Node.js 16.x.

  4. Mantenha todas as seleções padrão na página e escolha Criar função.

    Quando a função do Lambda for criada, anote o respectivo Nome do recurso da Amazon (ARN) que aparece no canto superior direito da página, por exemplo:

    arn:aws:lambda:us-east-1:123456789012:function:Iterator
  5. Copie o código a seguir para a função Lambda na seção Fonte de código da Restartpágina no console Lambda.

    O código a seguir diminui uma contagem do número de execuções e inicia uma nova execução de sua máquina de estado, incluindo o valor diminuído.

    var aws = require('aws-sdk'); var sfn = new aws.StepFunctions(); exports.restart = function(event, context, callback) { let StateMachineArn = event.restart.StateMachineArn; event.restart.executionCount -= 1; event = JSON.stringify(event); let params = { input: event, stateMachineArn: StateMachineArn }; sfn.startExecution(params, function(err, data) { if (err) callback(err); else callback(null,event); }); }
  6. Escolha Implantar para implantar o código.

Etapa 3: Criar uma máquina de estado

Agora que você criou suas duas funções do Lambda, crie uma máquina de estado. Nesta máquina de estado, os estados ShouldRestart e Restart são como você divide seu trabalho em várias execuções.

exemplo ShouldRestart Estado de escolha

O trecho a seguir mostra o estado ShouldRestartChoice. Esse estado determina se você deve ou não reiniciar a execução.

"ShouldRestart": { "Type": "Choice", "Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 1, "Next": "Restart" } ],

O valor $.restart.executionCount é incluído na entrada da execução inicial. Ele é reduzido cada vez que a função Restart é chamada e colocado na entrada para cada execução subsequente.

exemplo Estado Task de Restart

O trecho a seguir mostra o estado RestartTask. Esse estado usa a função do Lambda que você criou anteriormente para reiniciar a execução e para diminuir a contagem para rastrear o número de execuções restantes para iniciar.

"Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done" },
Para criar a máquina de estado
  1. Abra o console do Step Functions e clique em Criar máquina de estado.

  2. Na caixa de diálogo Escolher um modelo, selecione Em branco.

  3. Escolha Selecionar para abrir o Workflow Studio em Modo de design.

  4. Neste tutorial, você escreverá a definição da Amazon States Language (ASL) da máquina de estado no Editor de código. Para isso, clique em Código.

  5. Remova o código clichê existente e cole o código a seguir. Lembre-se de substituir a ARNs neste código pela ARNs das funções Lambda que você criou.

    { "Comment": "Continue-as-new State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 100, "index": -1, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterator", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "ShouldRestart" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "ShouldRestart": { "Type": "Choice", "Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 0, "Next": "Restart" } ], "Default": "Done" }, "Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done" }, "Done": { "Type": "Pass", "End": true } } }
  6. Especifique um nome para a máquina de estado. Para fazer isso, escolha o ícone de edição ao lado do nome padrão da máquina de estado de MyStateMachine. Em seguida, em Configuração da máquina de estado, insira um nome na caixa Nome da máquina de estado.

    Para este tutorial, insira o nome ContinueAsNew.

  7. (Opcional) Em Configuração da máquina de estado, especifique outras configurações do fluxo de trabalho, como o tipo de máquina de estado e a função de execução.

    Para este tutorial, mantenha todas as seleções padrão nas Configurações da máquina de estado.

    Se você já criou um perfil do IAM com as permissões corretas para a máquina de estado e deseja usá-lo, em Permissões, clique em Escolher um perfil existente e selecione uma função na lista. Ou selecione Inserir um ARN de função e forneça o ARN para esse perfil do IAM.

  8. Na caixa de diálogo Confirmar criação do perfil, selecione Confirmar para continuar.

    Você também pode escolher Exibir configurações do perfil para voltar às Configurações da máquina de estado.

    nota

    Se você excluir o perfil do IAM criado pelo Step Functions, não será possível recriá-lo posteriormente. Da mesma forma, se você modificar a função (por exemplo, removendo o Step Functions das entidades principais na política do IAM), o Step Functions não poderá restaurar as configurações originais dela posteriormente.

  9. Salve o Nome do recurso da Amazon (ARN) dessa máquina de estado em um arquivo de texto. Você precisará fornecer o ARN e, ao mesmo tempo, permissão à função do Lambda para iniciar uma nova execução do Step Functions.

Etapa 4: Atualizar a política do IAM

Para garantir que a função do Lambda tenha permissões para iniciar uma nova execução do Step Functions, anexe uma política em linha para o perfil do IAM que você usa para sua função do Lambda Restart. Para mais informações, consulte Incorporar políticas em linha no Guia do usuário do IAM.

nota

Você pode atualizar a linha Resource no exemplo anterior para referenciar o ARN de sua máquina de estado ContinueAsNew. Isso restringe a política para que ela só possa iniciar uma execução dessa máquina de estado específico.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": "arn:aws:states:us-east-2:123456789012stateMachine:ContinueAsNew" } ] }

Etapa 5: Executar a máquina de estado

Para iniciar uma execução, forneça a mesma entrada que inclui o ARN da máquina de estado e um executionCount para quantas vezes ela deve iniciar uma nova execução.

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

    A caixa de diálogo Iniciar execução é exibida.

  2. Na caixa de diálogo Iniciar execução, faça o seguinte:

    1. (Opcional) Insira um nome de execução personalizado para substituir o padrão gerado.

      Nomes e registro em log não ASCII

      O Step Functions aceita nomes de máquina de estado, execuções, atividades e rótulos que contenham caracteres não ASCII. Como esses caracteres não funcionarão com a Amazon CloudWatch, recomendamos usar somente caracteres ASCII para que você possa acompanhar as métricas. CloudWatch

    2. Na caixa Entrada, insira a seguinte entrada JSON para executar seu fluxo de trabalho.

      { "restart": { "StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:ContinueAsNew", "executionCount": 4 } }
    3. Atualize o campo StateMachineArn com o ARN para sua máquina de estado ContinueAsNew.

    4. Selecione Iniciar execução.

    5. O console do Step Functions direciona você para uma página em que o título é o ID da execução. Essa página é conhecida como página de Detalhes da execução. Nesta página, você pode revisar os resultados da execução à medida que a execução avança ou após a conclusão.

      Para revisar os resultados da execução, escolha estados individuais na Exibição em gráfico e, em seguida, escolha as guias individuais no painel Detalhes da etapa para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página Detalhes da execução, consulte Visão geral dos detalhes da execução.

      A Exibição em gráfico exibe a primeira das quatro execuções. Antes de concluir, ele passará pelo estado Restart e iniciará uma nova execução.

      Diagrama de execução mostrando a primeira execução de quatro.

      Conforme essa execução é concluída, você poderá ver a próxima execução que estiver em andamento. Selecione o ContinueAsNewlink na parte superior para ver a lista de execuções. Você deve ver a execução recém-fechada e uma execução contínua que a função do Lambda Restart iniciou.

      Quando todas as execuções forem concluídas, você verá quatro execuções bem-sucedidas na lista. A primeira execução iniciada exibe o nome que você escolheu, e as execuções subsequentes têm um nome gerado.

      Captura de tela ilustrativa mostrando que todas as execuções foram concluídas.
PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.