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á.
Itere um loop com uma função Lambda em Step Functions
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
-
Faça login no console do Lambda
e escolha Criar função. -
Na página Create function, selecione Author from scratch.
-
Na seção Informações básicas, configure a função do Lambda da seguinte maneira:
-
Em Function name (Nome da função), insira
Iterator
. -
Em Runtime (Tempo de execução), selecione Node.js.
-
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).
-
Escolha a opção Criar função.
-
-
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
estep
. Ele incrementa oindex
pelo valor dastep
e retorna esses valores e o boolianocontinue
. O valor decontinue
étrue
seindex
for inferior acount
. -
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
-
Escolha Testar.
-
Na caixa de diálogo Configurar evento de teste, insira
TestIterator
na caixa Nome do evento. -
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 para5
. O teste seráindex
incrementado6
e definido comocontinue
.true
-
Escolha Criar.
-
Escolha Testar para testar sua função Lambda.
Os resultados do teste são exibidos na guia Resultados da execução.
-
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
eindex
testar novamente, osindex
incrementos para10
, econtinue
serãofalse
.
Etapa 3: Criar uma máquina de estado
Antes de sair do console Lambda...
Copie a função Lambda. ARN 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 paracount
index
,step
e. -
Iterator
— Refere-se à função Lambda que você criou anteriormente, transmitindo os valores configurados em.ConfigureCount
-
IsCountReached
— Um estado de escolha que continua o loop ou continua até oDone
estado, com base no valor retornado de suaIterator
função. -
ExampleWork
— Um esboço para o trabalho que precisa ser feito. Neste exemplo, o fluxo de trabalho tem umPass
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:
-
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.
-
Selecione o modelo em branco.
-
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 } } } -
Substitua o
Iterator Resource
campo ARN pelo da sua funçãoIterator
Lambda que você criou anteriormente. -
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
).
Step Functions aceita nomes para máquinas de estado, execuções, atividades e rótulos que não contenham ASCII caracteres. Como nomes sem ASCII caracteres não funcionarão com a Amazon CloudWatch, recomendamos usar somente ASCII caracteres para que você possa acompanhar as métricas. CloudWatch
-
-
Para Tipo, aceite o valor padrão de Padrão. Em Permissões, escolha Criar nova função.
-
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.
-
Na IterateCountpágina, escolha Iniciar execução.
-
(Opcional) Para identificar sua execução, você pode especificar um nome ou usar o nome de execução padrão gerado.
nota
Step Functions aceita nomes para máquinas de estado, execuções, atividades e rótulos que não contenham ASCII caracteres. Como nomes sem ASCII caracteres não funcionarão com a Amazon CloudWatch, recomendamos usar somente ASCII caracteres para que você possa acompanhar as métricas. CloudWatch
-
Escolha Start Execution.
Uma nova execução de sua máquina de estado inicia-se mostrando sua execução 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.