Implementación de tareas de AWS Lambda - AWS Flow Framework para Java

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.

Implementación de tareas de AWS Lambda

Acerca de AWS Lambda

AWS Lambda es un servicio de computación completamente administrado que ejecuta código como respuesta a eventos generados por código personalizado o procedentes de varios servicios de AWS, como Amazon S3, DynamoDB, Amazon Kinesis, Amazon SNS y Amazon Cognito. Para obtener más información acerca de Lambda, consulte la Guía para desarrolladores de AWS Lambda.

Amazon Simple Workflow Service proporciona una tarea de Lambda que permite ejecutar funciones de Lambda en lugar de actividades de Amazon SWF tradicionales, o a la vez que ellas.

importante

Se facturarán a su cuenta de AWS las ejecuciones (solicitudes) de Lambda que ejecute Amazon SWF en su nombre. Para obtener información detallada acerca de los precios de Lambda, consulte https://aws.amazon.com/lambda/pricing/.

Beneficios y limitaciones de la utilización de tareas de Lambda

Hay una serie de beneficios derivados de la utilización de tareas de Lambda en lugar de una actividad de Amazon SWF tradicional:

  • No hay necesidad de registrar ni crear versiones de tareas de Lambda a diferencia de los tipos de actividad de Amazon SWF.

  • Puede utilizar cualquier función de Lambda que ya haya definido en sus flujos de trabajo.

  • Amazon SWF llama directamente a las funciones de Lambda; no hay necesidad de implementar ningún proceso de trabajo para ejecutarlas, como ocurre con las actividades tradicionales.

  • Lambda proporciona métricas y registros para el seguimiento y el análisis de las ejecuciones de las funciones.

También hay una serie de limitaciones relativas a las tareas Lambda que debe tener presente:

  • Las tareas de Lambda solo se pueden ejecutar en las regiones de AWS que admitan Lambda. Para obtener más información sobre las regiones compatibles actualmente con Lambda, consulte Regiones y puntos de conexión de Lambda en la Referencia general de Amazon Web Services.

  • En estos momentos, las tareas de Lambda solo son compatibles con la API HTTP de SWF básica en el AWS Flow Framework para Java. Actualmente, las tareas de Lambda no son compatibles con el AWS Flow Framework para Ruby.

Uso de tareas Lambda en flujos de trabajo de AWS Flow Framework para Java

Para utilizar tareas de Lambda en los flujos de trabajo de AWS Flow Framework para Java, se deben cumplir tres requisitos:

  • Tener una función de Lambda que ejecutar. Puede utilizar cualquier función de Lambda que haya definido. Para obtener más información sobre cómo crear funciones de Lambda, consulte la Guía para desarrolladores de AWS Lambda.

  • Tener un rol de IAM que permita obtener acceso para ejecutar funciones de Lambda desde los flujos de trabajo de Amazon SWF.

  • Usar código para programar la tarea de Lambda desde el flujo de trabajo.

Configuración de un rol de IAM

Antes de poder invocar funciones de Lambda desde Amazon SWF, debe proporcionar un rol de IAM que permita tener acceso a Lambda desde Amazon SWF. Puede:

  • elegir un rol predefinido, AWSLambdaRole, con el fin de conceder permiso a los flujos de trabajo para invocar cualquier función de Lambda asociada a su cuenta.

  • definir su propia política y rol asociado con el fin de conceder permiso a los flujos de trabajo para invocar funciones de Lambda concretas, según sus nombres de recurso de Amazon (ARN).

Limitar permisos de un rol de IAM

Puede limitar los permisos de un rol de IAM que proporcione a Amazon SWF mediante las claves de contexto SourceArn y SourceAccount en su política de confianza para los recursos. Estas claves limitan el uso de una política de IAM para que solo se utilice en las ejecuciones de Amazon Simple Workflow Service que pertenezcan al ARN del dominio especificado. Si se utilizan ambas claves de contexto de condición global, tanto el valor aws:SourceAccount como la cuenta a la que se hace referencia en el valor aws:SourceArn deben utilizar el mismo ID de cuenta cuando se utilicen en la misma instrucción de política.

En el siguiente ejemplo de política de confianza, utilizamos la clave de contexto SourceArn para restringir que el rol de servicio de IAM se utilice únicamente en las ejecuciones de Amazon Simple Workflow Service que pertenezcan a someDomain en la cuenta 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:swf:*:123456789012:/domain/someDomain" } } } ] }

En el siguiente ejemplo de política de confianza, utilizamos la clave de contexto SourceAccount para restringir que el rol de servicio de IAM se utilice únicamente en las ejecuciones de Amazon Simple Workflow Service en la cuenta 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceAccount": "123456789012" } } } ] }

Proporcionar acceso a Amazon SWF para invocar cualquier rol de Lambda

Puede utilizar un rol predefinido, AWSLambdaRole, con el fin de proporcionar a los flujos de trabajo de Amazon SWF la capacidad de invocar cualquier función de Lambda asociada a su cuenta.

Cómo utilizar AWSLambdaRole para dar acceso a Amazon SWF para invocar funciones de Lambda
  1. Abra la consola de Amazon IAM.

  2. Elija Roles, y a continuación Create New Role.

  3. Dé un nombre al rol, como swf-lambda y elija Next Step.

  4. En Roles de servicio de AWS, seleccione Amazon SWF, y, a continuación, seleccione Paso siguiente.

  5. En la pantalla Attach Policy, elija AWSLambdaRole de la lista.

  6. Elija Next Step y a continuación Create Role una vez que haya revisado el rol.

Definición de un rol de IAM para proporcionar acceso para invocar una función de Lambda concreta

Si desea proporcionar acceso para invocar una función de Lambda concreta desde un flujo de trabajo, tendrá que definir su propia política de IAM.

Cómo crear una política de IAM para dar acceso a una función de Lambda concreta
  1. Abra la consola de Amazon IAM.

  2. Elija Políticas, y a continuación Crear política.

  3. Elija Copiar una política administrada por AWS y seleccione AWSLambdaRole de la lista. Se generará una política para usted. Tiene la opción de editar su nombre y descripción según sus necesidades.

  4. En el campo Recurso del Documento de política, añada el ARN de las funciones de Lambda. Por ejemplo:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:111111000000:function:hello_lambda_function" ] } ] }
    nota

    Para obtener una descripción completa de los procedimientos que se deben seguir para especificar recursos en un rol de IAM, consulte la información general sobre las políticas de IAM en la Uso de IAM.

  5. Elija Create Policy para finalizar la creación de su política.

A continuación, puede seleccionar esta política al crear un nuevo rol de IAM, y utilizar ese rol para dar acceso para invocar los flujos de trabajo de Amazon SWF. Este procedimiento es muy similar a la creación de un rol con la política AWSLambdaRole. En su lugar, elija su propia política al crear el rol.

Cómo crear un rol de Amazon SWF mediante su política de Lambda
  1. Abra la consola de Amazon IAM.

  2. Elija Roles, y a continuación Create New Role.

  3. Dé un nombre al rol, como swf-lambda-function y elija Next Step.

  4. En Roles de servicio de AWS, seleccione Amazon SWF, y, a continuación, seleccione Paso siguiente.

  5. En la pantalla Asociar política, seleccione de la lista la política específica de la función de Lambda.

  6. Elija Next Step y a continuación Create Role una vez que haya revisado el rol.

Programación de una tarea de Lambda para su ejecución

Una vez que haya definido un rol de IAM que le permita invocar funciones de Lambda, podrá programarlas para su ejecución como parte del flujo de trabajo.

nota

El ejemplo de HelloLambda demuestra este proceso en su totalidad en el AWS SDK for Java.

Para programar una tarea de Lambda para su ejecución
  1. En la implementación de su flujo de trabajo, obtenga una instancia de LambdaFunctionClient llamando a getLambdaFunctionClient() en una instancia de DecisionContext.

    // Get a LambdaFunctionClient instance DecisionContextProvider decisionProvider = new DecisionContextProviderImpl(); DecisionContext decisionContext = decisionProvider.getDecisionContext(); LambdaFunctionClient lambdaClient = decisionContext.getLambdaFunctionClient();
  2. Programe la tarea mediante el método scheduleLambdaFunction() en el LambdaFunctionClient; para ello, pásele el nombre de la función de Lambda que haya creado y cualquier dato de entrada para la tarea de Lambda.

    // Schedule the Lambda function for execution, using your IAM role for access. String lambda_function_name = "The name of your Lambda function."; String lambda_function_input = "Input data for your Lambda task."; lambdaClient.scheduleLambdaFunction(lambda_function_name, lambda_function_input);
  3. En el iniciador de ejecución del flujo de trabajo, añada el rol de IAM de Lambda a las opciones de flujo de trabajo predeterminadas mediante StartWorkflowOptions.withLambdaRole() y, a continuación, pase las opciones al comenzar el flujo de trabajo.

    // Workflow client classes are generated for you when you use the @Workflow // annotation on your workflow interface declaration. MyWorkflowClientExternalFactory clientFactory = new MyWorkflowClientExternalFactoryImpl(sdk_swf_client, swf_domain); MyWorkflowClientExternal workflow_client = clientFactory.getClient(); // Give the ARN of an IAM role that allows SWF to invoke Lambda functions on // your behalf. String lambda_iam_role = "arn:aws:iam::111111000000:role/swf_lambda_role"; StartWorkflowOptions workflow_options = new StartWorkflowOptions().withLambdaRole(lambda_iam_role); // Start the workflow execution workflow_client.helloWorld("User", workflow_options);

Vea la muestra de HelloLambda

En el AWS SDK for Java, se incluye un ejemplo que proporciona una implementación de un flujo de trabajo que utiliza una tarea de Lambda. Para verla o ejecutarla, descargue la fuente.

Se incluye una descripción completa sobre cómo crear y ejecutar el ejemplo de HelloLambda en el archivo README que se proporciona con los ejemplos de AWS Flow Framework para Java.