

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.

# AWS Lambda tareas en Amazon SWF
<a name="lambda-task"></a>

**Topics**
+ [Acerca AWS Lambda](#about-aws-lambda)
+ [Beneficios y limitaciones de la utilización de tareas de Lambda](#benefits-limitations-lambda-tasks)
+ [Uso de tareas de Lambda en los flujos de trabajo](#using-lambda-tasks-in-workflows)

## Acerca 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 de Lambda en los flujos de trabajo
<a name="using-lambda-tasks-in-workflows"></a>

Para utilizar tareas de Lambda en los flujos de trabajo de Amazon SWF, tendrá que:

1. Configurar roles de IAM para proporcionar a Amazon SWF permiso para invocar funciones de Lambda.

1. Asociar roles de IAM a los flujos de trabajo.

1. Llamar a la función de Lambda durante la ejecución de un 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 dar a sus flujos de trabajo de Amazon SWF la posibilidad de invocar cualquier *AWSLambdafunción* de Lambda asociada a su cuenta.

**Para usar AWSLambda Role para dar acceso a Amazon SWF a la hora 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.

### Asociar el rol de IAM al flujo de trabajo
<a name="attach-iam-role-to-workflow"></a>

Una vez que haya definido el rol de IAM, tendrá que asociarlo al flujo de trabajo que se utilizará para llamar a las funciones de Lambda cuyo acceso proporcionó a Amazon SWF.

Hay dos lugares donde puede asociar la función a su flujo de trabajo:
+ Durante el registro del tipo de flujo de trabajo. Esta función puede usarse entonces como la función Lambda predeterminada para todas las ejecuciones de ese tipo de flujo de trabajo.
+ Al iniciar una ejecución de flujo de trabajo. Esta función se usará solo durante la ejecución de este flujo de trabajo (y en toda la ejecución).

**A fin de proporcionar una función Lambda predeterminada para un tipo de flujo de trabajo**
+ Al llamar RegisterWorkflowType, establezca el defaultLambdaRole campo en el ARN del rol que definió.

**Para proporcionar una función Lambda que se va a usar durante una ejecución de flujo de trabajo**
+ Al llamar StartWorkflowExecution, establezca el campo LambdaRole en el ARN del rol que definió.

**nota**  
si la cuenta que llama RegisterWorkflowType o StartWorkflowExecution no tiene permiso para usar el rol en cuestión, la llamada fallará con un. OperationNotPermittedFault

### Llamar a la función de Lambda desde un flujo de trabajo de Amazon SWF
<a name="call-lambda-function-from-swf-workflow"></a>

Puede usar el tipo de ScheduleLambdaFunctionDecisionAttributes datos para identificar la función Lambda a la que se va a llamar durante la ejecución de un flujo de trabajo.

Durante una llamada a RespondDecisionTaskCompleted, proporcione una lista ScheduleLambdaFunctionDecisionAttributes de sus decisiones. Por ejemplo:

```
{
  "decisions": [{
    "ScheduleLambdaFunctionDecisionAttributes": {
      "id": "lambdaTaskId",
      "name": "myLambdaFunctionName",
      "input": "inputToLambdaFunction",
      "startToCloseTimeout": "30"
    },
  }],
}
```

Establezca los siguientes parámetros:
+ *id* con un identificador para la tarea de Lambda. Esta debe ser una cadena de 1 a 256 caracteres y no debe contener los caracteres: (dos puntos), / (barra inclinada), \$1 (barra vertical). Tampoco debe contener ningún carácter de control (\$1u0000 - \$1u001f y \$1u007f - \$1u009f) ni la cadena literal `arn`.
+ *name* con el nombre de la función de Lambda. El flujo de trabajo de Amazon SWF debe proporcionarse con un rol de IAM que le conceda acceso para llamar a la función de Lambda. El nombre proporcionado debe seguir las restricciones del FunctionName parámetro, como en la acción Lambda Invoke.
+ *input* con datos de entrada opcionales para la función. Si se establece, debe seguir las restricciones del ClientContext parámetro, como en la acción Lambda Invoke.
+ *startToCloseTiempo* de espera con un período máximo opcional, en segundos, que la función puede tardar en ejecutarse antes de que la tarea falle (con una excepción de tiempo de espera). El valor NONE se puede usar para especificar una duración ilimitada.

[Para obtener más información, consulte Implementación de tareas AWS Lambda](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/lambda-task.html) 