Crear una máquina de estado de actividad con Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Crear una máquina de estado de actividad con Step Functions

Este tutorial le muestra cómo crear una máquina de estados basada en actividades utilizando Java y AWS Step Functions. Las actividades le permiten controlar el código de trabajo que se ejecuta en otro lugar desde su máquina de estados. Para obtener información general, consulte Más información sobre las actividades de Step Functions en Obtenga información sobre las máquinas de estado en Step Functions.

Necesitará lo siguiente para completar este tutorial:

  • El SDKpara Java. La actividad de ejemplo de este tutorial es una aplicación Java que utiliza AWS SDK for Java para comunicarse con AWS.

  • AWS credenciales en el entorno o en el estándar AWS archivo de configuración. Para obtener más información, consulte Configurar su AWS Credenciales en el AWS SDK for Java Guía para desarrolladores.

Paso 1: Crear una actividad

Tiene que conseguir que Step Functions reconozca la actividad cuyo proceso de trabajo (programa) desea crear. Step Functions responde con un nombre de recurso de Amazon (ARN) que establece la identidad de la actividad. Debe usar esta identidad para coordinar la información que se pasa entre la máquina de estado y el proceso de trabajo.

importante

Asegúrese de que la tarea de su actividad esté bajo la misma dirección AWS cuenta como tu máquina de estados.

  1. En la consola de Step Functions, en el panel de navegación de la izquierda, elija Actividades.

  2. Seleccione Crear actividad.

  3. Escriba un Nombre de la actividad, por ejemplo, get-greeting y, a continuación, elija Crear actividad.

  4. Cuando se cree la tarea de actividad, anote la mismaARN, como se muestra en el siguiente ejemplo.

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

Paso 2: Crear una máquina de estado

Cree una máquina de estado que determine cuándo se va a invocar la actividad y cuándo el proceso de trabajo debe realizar el trabajo principal, recopilar los resultados y devolverlos. Para crear la máquina de estado, utilice el Editor de código de Workflow Studio.

  1. En la consola de Step Functions, en el panel de navegación de la izquierda, elija Máquinas de estado.

  2. En la página Máquinas de estado, elija Crear máquina de estado.

  3. En el cuadro de diálogo Elegir una plantilla, seleccione En blanco.

  4. Elija Seleccionar para abrir Workflow StudioModo Diseño.

  5. Para este tutorial, escribirá la definición Amazon States Language (ASL) de su máquina de estados en el editor de código. Para ello, elija Código.

  6. Elimine el código reutilizable existente y pegue el siguiente código. Recuerde reemplazar el ejemplo ARN de este código por el ARN de la tarea de actividad que creó anteriormente en el 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 es una descripción de su máquina de estados mediante el comando Amazon States Language (ASL). Define un único estado Task llamado getGreeting. Para obtener más información, consulte Estructura de las máquinas de estado.

  7. En elVisualización de gráficos, asegúrese de que el gráfico de flujo de trabajo de la ASL definición que ha agregado tiene un aspecto similar al siguiente gráfico.

    Visualización gráfica de la máquina de estados con el estado de la RunActivity tarea.
  8. Especifique un nombre para la máquina de estado. Para ello, seleccione el icono de edición situado junto al nombre de la máquina de estados predeterminada de MyStateMachine. A continuación, en Configuración de máquina de estado, especifique un nombre en el cuadro Nombre de la máquina de estado.

    En este tutorial, ingrese el nombre ActivityStateMachine.

  9. (Opcional) En Configuración de máquina de estado, especifique otros ajustes del flujo de trabajo, como el tipo de máquina de estado y su función de ejecución.

    Para este tutorial, mantenga todas las selecciones predeterminadas en Configuración de máquina de estado.

    Si ya ha creado un IAM rol con los permisos correctos para su máquina estatal y desea usarlo, en Permisos, seleccione Elegir un rol existente y, a continuación, seleccione un rol de la lista. O selecciona Introducir un rol ARN y, a continuación, proporciona ARN uno para ese IAM rol.

  10. En el cuadro de diálogo Confirmar creación de rol, elija Confirmar para continuar.

    También puede seleccionar Ver configuración de rol para volver a Configuración de máquina de estado.

    nota

    Si eliminas el IAM rol que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Del mismo modo, si modificas el rol (por ejemplo, quitando Step Functions de los principios de la IAM política), Step Functions no podrá restaurar su configuración original más adelante.

Paso 3: Implementar un proceso de trabajo

Cree un proceso de trabajo. Un proceso de trabajo es un programa que se encarga de:

  • Funciones Polling Step Functions para actividades que utilizan la GetActivityTask API acción.

  • Realizar el trabajo de la actividad a través del código especificado (por ejemplo, el método getGreeting() del código siguiente).

  • Devolver los resultados mediante las SendTaskHeartbeat API acciones SendTaskSuccessSendTaskFailure, y.

nota

Para ver un ejemplo de un proceso de trabajo de actividad más completo, consulte Ejemplo: Activity Worker en Ruby. Este ejemplo proporciona una implementación basada en prácticas recomendadas que puede utilizar como referencia para crear un proceso de trabajo de actividad. El código implementa un patrón consumidor-productor con un número configurable de subprocesos para sondeadores y procesos de trabajo de actividad.

Para implementar el proceso de trabajo

  1. Cree un archivo denominado GreeterActivities.java.

  2. Agréguele el código siguiente.

    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

    La clase EnvironmentVariableCredentialsProvider de este ejemplo presupone que se han establecido las variables de entorno AWS_ACCESS_KEY_ID (o AWS_ACCESS_KEY) y AWS_SECRET_KEY (o AWS_SECRET_ACCESS_KEY). Para obtener más información sobre cómo proporcionar las credenciales necesarias a la fábrica, consulte AWSCredentialsProvideren la AWS SDK for Java APIReferencia y configuración AWS Credenciales y región para el desarrollo en el AWS SDK for Java Guía para desarrolladores.

    De forma predeterminada, el AWS SDKesperará hasta 50 segundos para recibir los datos del servidor para cualquier operación. La operación GetActivityTask es una operación de sondeo largo que esperará hasta 60 segundos a la siguiente tarea disponible. Para evitar recibir un SocketTimeoutException error, SocketTimeout establézcalo en 70 segundos.

  3. En la lista de parámetros del GetActivityTaskRequest().withActivityArn() constructor, sustituya el ACTIVITY_ARN valor por el ARN de la tarea de actividad que creó anteriormente.

Paso 4: Ejecutar la máquina de estado

Cuando se inicia la ejecución de la máquina de estado, el proceso de trabajo sondea Step Functions en busca de actividades, realiza su trabajo (utilizando los datos de entrada proporcionados) y devuelve los resultados.

  1. En la página ActivityStateMachineEn esta página, elija Iniciar la ejecución.

    Aparece el cuadro de diálogo Iniciar ejecución.

  2. En el cuadro de diálogo Iniciar ejecución, haga lo siguiente:

    1. (Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.

      ASCIINombres no identificables y registro

      Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como estos personajes no funcionan con Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder hacer un seguimiento de las métricas CloudWatch.

    2. En el cuadro de entrada, introduce la siguiente JSON entrada para ejecutar tu flujo de trabajo.

      { "who": "AWS Step Functions" }
    3. Seleccione Iniciar ejecución.

    4. La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como Detalles de la ejecución. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.

      Para revisar los resultados de la ejecución, elija los estados individuales en la Vista de gráfico y, a continuación, elija las pestañas individuales del panel Detalles del paso para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página Detalles de la ejecución, consulte Descripción general de los detalles de ejecución.

Paso 5: Ejecutar y detener el proceso de trabajo

Para que el proceso de trabajo pueda sondear la máquina de estado en busca de actividades, es necesario ejecutarlo.

  1. En la línea de comandos, vaya al directorio en el que creó GreeterActivities.java.

  2. Para utilizar el AWS SDK, añada la ruta completa de los third-party directorios lib y a las dependencias de su archivo de compilación y a su JavaCLASSPATH. Para obtener más información, consulta Descargar y extraer el contenido en el SDK AWS SDK for Java Guía para desarrolladores.

  3. Compile el archivo.

    $ javac GreeterActivities.java
  4. Ejecute el archivo .

    $ java GreeterActivities
  5. En la consola de Step Functions, vaya a la página Detalles de ejecución.

  6. Cuando se complete la ejecución, examine los resultados.

  7. Detenga el proceso de trabajo.