Implémentation des tâches AWS Lambda - AWS Flow Framework pour Java

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.

Implémentation des tâches AWS Lambda

A propos d'AWS Lambda

AWS Lambdaest un service de calcul entièrement géré qui exécute votre code en réponse à des événements générés par le code personnalisé ou depuis divers événementsAWStels 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.

Amazon Simple Workflow Service fournit une tâche Lambda pour vous permettre d'exécuter des fonctions Lambda au lieu des activités habituelles ou en parallèle à celles-ci.

Important

Vos recettesAWSsera facturé pour les exécutions (demandes) Lambda exécutées par Amazon SWF en votre nom. Pour plus d'informations sur la tarification Lambda, consultezhttps://aws.amazon.com/lambda/pricing/.

Avantages et limites inhérents à l'utilisation des tâches Lambda

L'utilisation de tâches Lambda présente plusieurs avantages par rapport à une activité Amazon SWF traditionnelle :

  • Il n'est pas nécessaire d'enregistrer ou de versionner les tâches Lambda comme les types d'activités Amazon SWF.

  • Vous pouvez utiliser 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. Vous n'avez donc pas besoin de mettre en œuvre un programme de travail pour les exécuter, comme c'est le cas avec les activités habituelles.

  • Lambda fournit des métriques et des fichiers journaux pour le suivi et l'analyse des exécutions de fonctions.

Vous devez également connaître les quelques limites qui s'appliquent aux tâches Lambda :

  • Les tâches Lambda peuvent uniquement être exécutées dansAWSqui prennent en charge Lambda. VoirRégions et points de terminaison Lambdadans leRéférence générale Amazon Web Servicespour plus d'informations sur les régions compatibles avec Lambda.

  • Actuellement, les tâches Lambda sont uniquement prises en charge par l'API HTTP SWF de base et dans AWS Flow Framework pour Java. AWS Flow Framework pour Ruby ne prend pas actuellement en charge les tâches Lambda.

Utilisation de tâches Lambda dans vos recettesAWS Flow Frameworkpour flux de travail Java

Il existe trois conditions requises pour utiliser les tâches Lambda dans vos recettesAWS Flow Frameworkpour les flux de travail Java :

  • Une fonction Lambda à exécuter. Vous pouvez utiliser n'importe quelle fonction Lambda que vous définissez. Pour de plus amples informations sur la création de fonctions Lambda, consultez leAWS LambdaManuel du développeur.

  • Un rôle IAM qui fournit l'accès requis pour exécuter des fonctions Lambda à partir de vos flux de travail Amazon SWF.

  • Du code pour planifier la tâche Lambda depuis votre flux de travail.

Configuration d'un rôle IAM

Avant de pouvoir appeler des fonctions Lambda depuis Amazon SWF, vous devez fournir un rôle IAM qui fournit l'accès à Lambda depuis Amazon SWF. Vous avez le choix entre les options suivantes :

  • choisir un rôle prédéfini,AWSLambdaRole, afin d'autoriser les flux de travail à appeler les fonctions Lambda associées à votre compte.

  • définissez votre propre stratégie et le rôle associé pour autoriser les flux de travail à appeler des fonctions Lambda particulières, en fonction de leur Amazon Resource Name (ARN).

Limiter les autorisations sur un rôle IAM

Vous pouvez limiter les autorisations sur un rôle IAM que vous fournissez à Amazon SWF à l'aide duSourceArnetSourceAccountclés contextuelles dans votre stratégie de confiance des ressources. Ces clés limitent l'utilisation d'une stratégie IAM de sorte qu'elle n'est utilisée que depuis les exécutions Amazon Simple Workflow Service appartenant à l'ARN du domaine spécifié. Si vous utilisez les deux clés de contexte de condition globale, le kitaws:SourceAccountet le compte référencé dans leaws:SourceArndoit utiliser le même ID de compte lorsqu'il est utilisé dans la même instruction de stratégie.

Dans l'exemple de stratégie de confiance suivant, nous utilisons le kitSourceArnclé contextuelle pour limiter l'utilisation du rôle de service IAM uniquement dans les exécutions Amazon Simple Workflow Service appartenant àsomeDomaindans le compte,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" } } } ] }

Dans l'exemple de stratégie de confiance suivant, nous utilisons le kitSourceAccountclé contextuelle pour limiter l'utilisation du rôle de service IAM uniquement dans les exécutions Amazon Simple Workflow Service dans le compte,123456789012.

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

Donner à Amazon SWF les autorisations d'accès requises pour appeler un rôle Lambda

Vous pouvez utiliser le rôle prédéfini,AWSLambdaRole, afin de donner à vos flux de travail Amazon SWF la possibilité d'appeler les fonctions Lambda associées à votre compte.

Pour utiliserAWSLambdaRolepour autoriser Amazon SWF à appeler des fonctions Lambda
  1. Ouvrez la console Amazon IAM.

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

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

  4. UNDERAWSRôles de service, choisissezAmazon SWF, et choisissezÉtape suivante.

  5. Dans la pageAttacher une stratégie, choisissezAWSLambdaRoledans la liste.

  6. 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 afin de fournir les autorisations d'accès requises pour appeler une fonction Lambda spécifique

Si vous voulez fournir l'accès requis pour appeler une fonction Lambda spécifique à partir de votre flux de travail, vous devez définir votre propre stratégie IAM.

Pour créer une stratégie IAM afin de fournir l'accès à une fonction Lambda spécifique
  1. Ouvrez la console Amazon IAM.

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

  3. ChoisissezCopier uneAWSStratégie géréeet sélectionnezAWSLambdaRoledans la liste. Une stratégie sera générée pour vous. Au besoin, modifiez son nom et sa description.

  4. DansRessourcefield of theDocument de stratégie, ajoutez l'ARN de vos fonctions Lambda. Par exemple :

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

    Pour une description complète de la procédure à suivre pour spécifier les ressources dans un rôle IAM, consultezPrésentation des stratégies IAMdansUtilisation d'IAM.

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

Vous pourrez ensuite sélectionner cette stratégie lors de la création d'un rôle IAM et utiliser ce dernier pour donner les autorisations d'accès requises afin d'appeler vos flux de travail Amazon SWF. Cette procédure est très similaire à la création d'un rôle avec le kitAWSLambdaRoleAu lieu de cela, choisissez votre propre stratégie lors de la création du rôle.

Pour créer un rôle Amazon SWF à l'aide de votre stratégie Lambda
  1. Ouvrez la console Amazon IAM.

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

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

  4. UNDERAWSRôles de service, choisissezAmazon SWF, et choisissezÉtape suivante.

  5. Dans la pageAttacher une stratégie, choisissez votre stratégie spécifique à une fonction Lambda dans la liste.

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

Planification d'une tâche Lambda pour exécution

Une fois que vous avez défini un rôle IAM qui vous autorise à appeler des fonctions Lambda, vous pouvez planifier celles-ci pour une exécution dans le cadre de votre flux de travail.

Note

Ce processus est pleinement démontré par leHelloLambdaéchantillondans leAWS SDK for Java.

Pour planifier une tâche Lambda pour exécution
  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();
  2. Planifiez la tâche à l'aide duscheduleLambdaFunction()sur le kitLambdaFunctionClient, lui transmettant le nom de la fonction Lambda que vous avez créée et les données d'entrée de 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);
  3. Dans le démarreur d'exécution de flux de travail, ajoutez le rôle Lambda à vos options de flux de travail par défaut à l'aide d'StartWorkflowOptions.withLambdaRole(), puis transmettez les options au 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);

Affichage duHelloLambdaéchantillon

Un exemple qui fournit une implémentation d'un flux de travail utilisant une tâche Lambda est fourni dans le kitAWS SDK for Java. Pour l'afficher et/ou l'exécuter, téléchargez la source.

Une description complète de la façon de générer et d'exécuter le kitHelloLambdaest fourni dans le fichier README fourni avec le kitAWS Flow Frameworkpour des exemples Java.