Como criar uma máquina de estado de Atividade usando o 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á.

Como criar uma máquina de estado de Atividade usando o Step Functions

Este tutorial mostra como criar uma máquina de estado baseada em atividade que usa Java e o AWS Step Functions. As atividades permitem que você controle o código de operador que é executado em outro lugar em sua máquina de estado. Para obter uma visão geral, consulte Saiba mais sobre atividades em Step Functions em Saiba mais sobre máquinas de estado em Step Functions.

Para concluir este tutorial, você precisará do seguinte:

  • O SDKpara Java. O exemplo de atividade neste tutorial é um aplicativo Java que usa o AWS SDK for Java para se comunicar com AWS.

  • AWS credenciais no ambiente ou no arquivo de AWS configuração padrão. Para obter mais informações, consulte Configurar suas AWS credenciais no Guia do AWS SDK for Java desenvolvedor.

Etapa 1: Criar uma atividade

Você deve informar o Step Functions sobre a atividade cujo operador (um programa) que você deseja criar. Step Functions responde com um Amazon Resource Name (ARN) que estabelece uma identidade para a atividade. Use essa identidade para coordenar as informações passadas entre sua máquina de estado e o operador.

Importante

Certifique-se de que sua tarefa de atividade esteja na mesma AWS conta da sua máquina de estado.

  1. No console do Step Functions, no painel de navegação à esquerda, escolha Atividades.

  2. Escolha Create activity (Criar atividade).

  3. Insira um Nome para a atividade, como get-greeting por exemplo, e escolha Criar atividade.

  4. Quando sua tarefa de atividade for criada, anote-aARN, conforme mostrado no exemplo a seguir.

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

Etapa 2: Criar uma máquina de estado

Crie uma máquina de estado que determine quando sua atividade é invocada e quando o operador deve executar seu trabalho principal, coletar os respectivos resultados e retorná-los. Para criar a máquina de estado, você vai usar o Editor de código do Workflow Studio.

  1. No console do Step Functions, no painel de navegação à esquerda, escolha Máquinas de estado.

  2. Na página Máquinas de estado, selecione Criar máquina de estado.

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

  4. Escolha Selecionar para abrir o Workflow Studio emModo de design.

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

  6. Remova o código clichê existente e cole o código a seguir. Lembre-se de substituir o exemplo ARN nesse código pelo ARN da tarefa de atividade que você criou anteriormente no Resource campo.

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    Esta é uma descrição da sua máquina de estado usando o Amazon States Language (ASL). Ela define um estado Task específico denominado getGreeting. Para obter mais informações, consulte Estrutura da máquina de estado.

  7. NoVisualização de grafos, verifique se o gráfico do fluxo de trabalho da ASL definição que você adicionou é semelhante ao gráfico a seguir.

    Visualização gráfica da máquina de estado com o estado da RunActivity tarefa.
  8. 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 ActivityStateMachine.

  9. (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 uma IAM função com as permissões corretas para sua máquina de estado e deseja usá-la, em Permissões, selecione Escolher uma função existente e selecione uma função na lista. Ou selecione Inserir uma função ARN e, em seguida, forneça uma ARN para essa IAM função.

  10. 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 a IAM função criada pelo Step Functions, o Step Functions não poderá recriá-la posteriormente. Da mesma forma, se você modificar a função (por exemplo, removendo Step Functions dos principais na IAM política), o Step Functions não poderá restaurar suas configurações originais posteriormente.

Etapa 3: Implementar um operador

Crie um operador. Um operador é um programa que é responsável por:

  • Polling Step Functions para atividades que usam a GetActivityTask API ação.

  • Executar o trabalho da atividade usando seu código (por exemplo, o método getGreeting() no código a seguir).

  • Retornando os resultados usando SendTaskHeartbeat API as ações SendTaskSuccessSendTaskFailure, e.

nota

Para um exemplo mais completo de um operador de atividade, consulte Exemplo: Activity Worker em Ruby. Esse exemplo fornece uma implementação baseada em melhores práticas, que você pode usar como referência para seu operador de atividade. O código implementa um padrão de produtor-consumidor com um número configurável de threads para agentes de sondagem e operadores de atividade.

Para implementar o operador

  1. Crie um arquivo chamado GreeterActivities.java.

  2. Adicione a ele o código a seguir.

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    nota

    Nesse exemplo, a classe EnvironmentVariableCredentialsProvider assume as variáveis de ambiente AWS_ACCESS_KEY_ID (ou AWS_ACCESS_KEY) e AWS_SECRET_KEY (ou AWS_SECRET_ACCESS_KEY). Para obter mais informações sobre como fornecer as credenciais necessárias para a fábrica, consulte AWSCredentialsProvider AWS SDK for JavaAPIReferência e configuração de AWS credenciais e região para desenvolvimento no Guia do AWS SDK for Java desenvolvedor.

    Por padrão, AWS SDK ele aguardará até 50 segundos para receber dados do servidor para qualquer operação. A operação GetActivityTask é uma operação de sondagem longa que aguardará até 60 segundos para a próxima tarefa disponível. Para evitar o recebimento de um SocketTimeoutException erro, SocketTimeout defina para 70 segundos.

  3. Na lista de parâmetros do GetActivityTaskRequest().withActivityArn() construtor, substitua o ACTIVITY_ARN valor pelo da tarefa ARN de atividade que você criou anteriormente.

Etapa 4: Executar a máquina de estado

Ao iniciar a execução da máquina de estado, o operador examina atividades no Step Functions, executa seu trabalho (usando a entrada que você fornece) e retorna os devidos resultados.

  1. Sobre o ActivityStateMachinepá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) 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

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

      { "who": "AWS Step Functions" }
    3. Selecione Iniciar execução.

    4. 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 Página de Detalhes da execução — Visão geral da interface.

Etapa 5: Executar e interromper o operador

Para que o operador examine atividades em sua máquina de estado, você precisa executá-lo.

  1. Na linha de comando, vá até o diretório em que você criou GreeterActivities.java.

  2. Para usar o AWS SDK, adicione o caminho completo dos third-party diretórios lib e às dependências do seu arquivo de compilação e ao seu Java. CLASSPATH Para obter mais informações, consulte Baixar e extrair o SDK no Guia do AWS SDK for Java desenvolvedor.

  3. Compile o arquivo.

    $ javac GreeterActivities.java
  4. Execute o arquivo.

    $ java GreeterActivities
  5. No console do Step Functions, vá até a página Detalhes da execução.

  6. Quando a execução for concluída, examine os resultados da execução.

  7. Interrompa o operador.