

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 AWS Lambda tareas
<a name="lambda-task"></a>

**Topics**
+ [Acerca de AWS Lambda](#about-aws-lambda)
+ [Beneficios y limitaciones de la utilización de tareas de Lambda](#benefits-limitations-lambda-tasks)
+ [Uso de tareas Lambda en sus flujos de trabajo AWS Flow Framework para Java](#using-lambda-tasks-in-java-flow-workflows)
+ [Ver la HelloLambda muestra](#see-lambda-sample)

## Acerca de AWS Lambda
<a name="about-aws-lambda"></a>

AWS Lambda es un servicio informático totalmente gestionado que ejecuta el código en respuesta a eventos generados por un código personalizado o desde varios AWS servicios, 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](https://docs.aws.amazon.com/lambda/latest/dg/).

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 cobrarán a su AWS cuenta las ejecuciones (solicitudes) de Lambda ejecutadas por Amazon SWF en su nombre. [Para obtener más información sobre los precios de Lambda, consulte https://aws.amazon.com/lambda/ pricing/.](https://aws.amazon.com/lambda/pricing/)

## Beneficios y limitaciones de la utilización de tareas de Lambda
<a name="benefits-limitations-lambda-tasks"></a>

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 AWS regiones que admiten Lambda. Para obtener más información sobre las regiones compatibles actualmente con Lambda, consulte [Regiones y puntos de conexión de Lambda](https://docs.aws.amazon.com/general/latest/gr/rande.html#lambda_region) en la *Referencia general de Amazon Web Services*.
+ Actualmente, las tareas Lambda solo se admiten en la API HTTP básica de SWF y en la AWS Flow Framework API para Java. Actualmente, no hay soporte para tareas Lambda en Ruby AWS Flow Framework .

## Uso de tareas Lambda en sus flujos de trabajo AWS Flow Framework para Java
<a name="using-lambda-tasks-in-java-flow-workflows"></a>

Existen tres requisitos para utilizar las tareas de Lambda en sus flujos de trabajo AWS Flow Framework para Java:
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/).
+ 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
<a name="set-up-lambda-role"></a>

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:
+ *elija un rol predefinido, Rol, AWSLambda para dar permiso a sus flujos de trabajo para invocar cualquier función de Lambda asociada a su cuenta.*
+ defina su propia política y el rol asociado para conceder a los flujos de trabajo permiso para invocar determinadas funciones de Lambda, especificadas por sus nombres ARNs de recursos de Amazon ().

#### Limitar permisos de un rol de IAM
<a name="limit-iam-role-permissions"></a>

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, la clave de `SourceArn` contexto restringe el uso de la función de servicio de IAM únicamente en las ejecuciones de Amazon Simple Workflow Service que pertenezcan a `someDomain` la cuenta,. `123456789012`


+ **Declaración 1**

  **Director**: `"Service": "swf.amazonaws.com"` 

  **Acción:** `sts:AssumeRole` 

```
"Condition": {
   "ArnLike": {
     "aws:SourceArn": "arn:aws:swf:*:123456789012:/domain/someDomain"
   }
}
```

En el siguiente ejemplo, la clave de `SourceAccount` contexto restringe el uso de la función de servicio de IAM únicamente en las ejecuciones de Amazon Simple Workflow Service en la cuenta,. `123456789012`

```
"Condition": {
   "StringLike": {
     "aws:SourceAccount": "123456789012"
   }
}
```

#### Proporcionar acceso a Amazon SWF para invocar cualquier rol de Lambda
<a name="providing-swf-access-invoke-any-lambda-role"></a>

Puede usar el rol predefinido, Role, para que sus flujos de trabajo de Amazon SWF puedan invocar cualquier *AWSLambdafunción* de Lambda asociada a su cuenta.

**Para usar AWSLambda Role para dar acceso a Amazon SWF a fin de invocar funciones de Lambda**

1. Abra la [consola de Amazon IAM](https://console.aws.amazon.com/iam/).

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

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

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

1. En la pantalla **Adjuntar política**, seleccione **AWSLambdaRol de la lista**.

1. 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
<a name="defining-iam-role-provide-access-invoke-specific-lambda-function"></a>

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](https://console.aws.amazon.com/iam/).

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

1. Elija **Copiar una política AWS gestionada** y seleccione **AWSLambdaRol** en la lista. Se generará una política para usted. Tiene la opción de editar su nombre y descripción según sus necesidades.

1. En el campo *Recurso* del **Documento de política**, añada el ARN de las funciones de Lambda. Por ejemplo:
   + **Recurso:** `arn:aws:lambda:us-east-1:111122223333: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](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html) en la *Uso de IAM*.

1. 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 crear un rol con la política de *AWSLambdarol*. 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](https://console.aws.amazon.com/iam/).

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

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

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

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

1. 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
<a name="schedule-lambda-tasks-for-execution"></a>

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**  
Este proceso se demuestra plenamente en el [HelloLambda ejemplo](#see-lambda-sample) de AWS SDK para Java.

**Cómo 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();
   ```

1. 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);
   ```

1. 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);
   ```

## Ver la HelloLambda muestra
<a name="see-lambda-sample"></a>

En el AWS SDK para Java, se incluye un ejemplo que proporciona una implementación de un flujo de trabajo que utiliza una tarea de Lambda. Para verlo y and/or ejecutarlo, [descarga la fuente](https://aws.amazon.com/code/3015904745387737).

En el archivo README que se incluye con los *HelloLambda*ejemplos de Java se incluye una descripción completa de cómo compilar y ejecutar el AWS Flow Framework ejemplo.