

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Mise en œuvre AWS Lambda des tâches
<a name="lambda-task"></a>

**Topics**
+ [À propos AWS Lambda](#about-aws-lambda)
+ [Avantages et limites de l'utilisation des tâches Lambda](#benefits-limitations-lambda-tasks)
+ [Utilisation de tâches Lambda dans vos flux de travail AWS Flow Framework pour Java](#using-lambda-tasks-in-java-flow-workflows)
+ [Voir l' HelloLambda échantillon](#see-lambda-sample)

## À propos AWS Lambda
<a name="about-aws-lambda"></a>

AWS Lambda est un service de calcul entièrement géré qui exécute votre code en réponse à des événements générés par du code personnalisé ou par divers AWS services tels qu'Amazon S3, DynamoDB, Amazon Kinesis, Amazon SNS et Amazon Cognito. Pour plus d'informations sur Lambda, consultez le [guide du développeur AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

Amazon Simple Workflow Service fournit une tâche Lambda qui vous permet d'exécuter des fonctions Lambda à la place ou en parallèle des activités Amazon SWF traditionnelles.

**Important**  
Votre AWS compte sera débité pour les exécutions Lambda (requêtes) exécutées par Amazon SWF en votre nom. [Pour plus de détails sur la tarification Lambda, consultez la section tarification/https://aws.amazon.com/lambda/.](https://aws.amazon.com/lambda/pricing/)

## Avantages et limites de l'utilisation des tâches Lambda
<a name="benefits-limitations-lambda-tasks"></a>

L'utilisation de tâches Lambda au lieu d'une activité Amazon SWF traditionnelle présente de nombreux avantages :
+ Les tâches Lambda n'ont pas besoin d'être enregistrées ou versionnées comme les types d'activité Amazon SWF.
+ Vous pouvez utiliser toutes les fonctions Lambda existantes que vous avez déjà définies dans vos flux de travail.
+ Les fonctions Lambda sont appelées directement par Amazon SWF ; il n'est pas nécessaire d'implémenter un programme de travail pour les exécuter, comme c'est le cas pour les activités traditionnelles.
+ Lambda vous fournit des métriques et des journaux pour suivre et analyser les exécutions de vos fonctions.

Vous devez également connaître les quelques limites qui s'appliquent aux tâches Lambda :
+ Les tâches Lambda ne peuvent être exécutées que dans AWS les régions qui prennent en charge Lambda. Consultez la section [Régions et points de terminaison Lambda](https://docs.aws.amazon.com/general/latest/gr/rande.html#lambda_region) dans le manuel *Amazon Web Services General Reference* pour en savoir plus sur les régions actuellement prises en charge pour Lambda.
+ Les tâches Lambda ne sont actuellement prises en charge que par l'API HTTP SWF de base et pour Java. AWS Flow Framework Les tâches Lambda ne sont actuellement pas prises en charge dans AWS Flow Framework for Ruby.

## Utilisation de tâches Lambda dans vos flux de travail AWS Flow Framework pour Java
<a name="using-lambda-tasks-in-java-flow-workflows"></a>

Trois conditions sont requises pour utiliser les tâches Lambda dans vos flux de travail AWS Flow Framework pour Java :
+ Une fonction Lambda à exécuter. Vous pouvez utiliser n'importe quelle fonction Lambda que vous avez définie. Pour plus d'informations sur la création de fonctions Lambda, consultez le manuel du [AWS Lambda développeur](https://docs.aws.amazon.com/lambda/latest/dg/).
+ Rôle IAM qui permet d'exécuter des fonctions Lambda à partir de vos flux de travail Amazon SWF.
+ Code permettant de planifier la tâche Lambda depuis votre flux de travail.

### Configuration d'un rôle IAM
<a name="set-up-lambda-role"></a>

Avant de pouvoir invoquer des fonctions Lambda depuis Amazon SWF, vous devez fournir un rôle IAM qui permet d'accéder à Lambda depuis Amazon SWF. Vous avez le choix entre les options suivantes :
+ *choisissez un rôle prédéfini, Role, AWSLambda pour autoriser vos flux de travail à invoquer n'importe quelle fonction Lambda associée à votre compte.*
+ définissez votre propre politique et le rôle associé pour autoriser les flux de travail à invoquer des fonctions Lambda spécifiques, spécifiées par leur Amazon Resource Names ()ARNs.

#### Limiter les autorisations sur un rôle IAM
<a name="limit-iam-role-permissions"></a>

Vous pouvez limiter les autorisations sur un rôle IAM que vous fournissez à Amazon SWF en utilisant les clés de contexte `SourceAccount` et `SourceArn` de votre politique de confiance en matière de ressources. Ces clés limitent l'utilisation d'une politique IAM afin qu'elle ne soit utilisée qu'à partir des exécutions d'Amazon Simple Workflow Service appartenant à l'ARN du domaine spécifié. Si vous utilisez les deux clés contextuelles de condition globale, la `aws:SourceAccount` valeur et le compte référencés dans la `aws:SourceArn` valeur doivent utiliser le même identifiant de compte lorsqu'ils sont utilisés dans la même déclaration de politique.

Dans l'exemple suivant, la clé de `SourceArn` contexte restreint l'utilisation du rôle de service IAM uniquement dans les exécutions d'Amazon Simple Workflow Service appartenant `someDomain` au compte,. `123456789012`


+ **Déclaration 1**

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

  **Action :** `sts:AssumeRole` 

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

Dans l'exemple suivant, la clé de `SourceAccount` contexte restreint l'utilisation du rôle de service IAM uniquement dans le cadre des exécutions d'Amazon Simple Workflow Service dans le compte. `123456789012`

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

#### Fournir à Amazon SWF l'accès lui permettant d'invoquer n'importe quel rôle Lambda
<a name="providing-swf-access-invoke-any-lambda-role"></a>

*Vous pouvez utiliser le rôle prédéfini, Role, AWSLambda pour permettre à vos flux de travail Amazon SWF d'invoquer n'importe quelle fonction Lambda associée à votre compte.*

**Pour utiliser AWSLambda Role pour autoriser Amazon SWF à invoquer des fonctions Lambda**

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

1. Choisissez **Rôles**, puis **Créer un rôle**.

1. Attribuez un nom à votre rôle, tel que `swf-lambda`, puis choisissez **Étape suivante**.

1. Sous **Rôles de AWS service**, sélectionnez **Amazon SWF, puis** **Next** Step.

1. Sur l'écran **Attach Policy**, choisissez Role **AWSLambdadans** la liste.

1. Choisissez **Étape suivante**, puis **Créer un rôle** une fois que vous avez vérifié le rôle.

#### Définition d'un rôle IAM pour fournir un accès permettant d'invoquer une fonction Lambda spécifique
<a name="defining-iam-role-provide-access-invoke-specific-lambda-function"></a>

Si vous souhaitez fournir un accès pour invoquer une fonction Lambda spécifique depuis votre flux de travail, vous devez définir votre propre politique IAM.

**Pour créer une politique IAM afin de fournir l'accès à une fonction Lambda particulière**

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

1. Choisissez **Stratégies**, puis **Créer une stratégie**.

1. Choisissez **Copier une politique AWS gérée** et sélectionnez **AWSLambdaRôle dans** la liste. Une stratégie sera générée pour vous. Au besoin, modifiez son nom et sa description.

1. Dans le champ *Ressource* du **document de politique**, ajoutez l'ARN de vos fonctions Lambda. Par exemple :
   + **Ressource** : `arn:aws:lambda:us-east-1:111122223333:function:hello_lambda_function` 
**Note**  
Pour une description complète de la manière de spécifier les ressources dans un rôle IAM, voir [Présentation des politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html) dans *Using* IAM.

1. Choisissez **Créer une stratégie** afin de finaliser la création de la stratégie.

Vous pouvez ensuite sélectionner cette politique lors de la création d'un nouveau rôle IAM et utiliser ce rôle pour donner un accès d'appel à vos flux de travail Amazon SWF. Cette procédure est très similaire à la création d'un rôle avec la politique des *AWSLambdarôles*. Choisissez plutôt votre propre politique lors de la création du rôle.

**Pour créer un rôle Amazon SWF à l'aide de votre politique Lambda**

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

1. Choisissez **Rôles**, puis **Créer un rôle**.

1. Attribuez un nom à votre rôle, tel que `swf-lambda-function`, puis choisissez **Étape suivante**.

1. Sous **Rôles de AWS service**, sélectionnez **Amazon SWF, puis** **Next** Step.

1. Sur l'écran **Attach Policy**, choisissez votre politique spécifique à la fonction Lambda dans la liste.

1. Choisissez **Étape suivante**, puis **Créer un rôle** une fois que vous avez vérifié le rôle.

### Planifier l'exécution d'une tâche Lambda
<a name="schedule-lambda-tasks-for-execution"></a>

Une fois que vous avez défini un rôle IAM qui vous permet d'invoquer des fonctions Lambda, vous pouvez planifier leur exécution dans le cadre de votre flux de travail.

**Note**  
Ce processus est pleinement démontré par l'[HelloLambda échantillon](#see-lambda-sample) du AWS SDK pour Java.

**Pour planifier l'exécution d'une tâche Lambda**

1. Dans l'implémentation de votre flux de travail, obtenez une instance de `LambdaFunctionClient` en appelant `getLambdaFunctionClient()` sur une instance `DecisionContext`.

   ```
   // Get a LambdaFunctionClient instance
   DecisionContextProvider decisionProvider = new DecisionContextProviderImpl();
   DecisionContext decisionContext = decisionProvider.getDecisionContext();
   LambdaFunctionClient lambdaClient = decisionContext.getLambdaFunctionClient();
   ```

1. Planifiez la tâche à l'aide de la `scheduleLambdaFunction()` méthode indiquée sur le`LambdaFunctionClient`, en lui transmettant le nom de la fonction Lambda que vous avez créée et toutes les données d'entrée pour la tâche 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. Dans votre outil de démarrage d'exécution de flux de travail, ajoutez le rôle IAM lambda à vos options de flux de travail par défaut en utilisant`StartWorkflowOptions.withLambdaRole()`, puis transmettez les options lors du démarrage du flux de travail.

   ```
   // 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);
   ```

## Voir l' HelloLambda échantillon
<a name="see-lambda-sample"></a>

Un exemple d'implémentation d'un flux de travail utilisant une tâche Lambda est fourni dans le. AWS SDK pour Java Pour voir and/or Run it, [téléchargez le code source](https://aws.amazon.com/code/3015904745387737).

Une description complète de la façon de créer et d'exécuter l'*HelloLambda*exemple est fournie dans le fichier README fourni avec les exemples AWS Flow Framework pour Java.