Invoquer une AWS Lambda fonction avec Step Functions - AWS Step Functions

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.

Invoquer une AWS Lambda fonction avec Step Functions

Découvrez comment utiliser Step Functions pour appeler des fonctions Lambda de manière synchrone ou asynchrone dans le cadre d'une application sans serveur pilotée par des événements.

Pour en savoir plus sur l'intégration aux AWS services dans Step Functions, consultez Intégration des services etTransmission de paramètres à une API de service dans Step Functions.

Principales fonctionnalités de l'intégration Lambda optimisée
  • Le Payload champ de la réponse est analysé de Json échappé à Json.

  • Si la réponse contient le champ FunctionError ou si une exception est déclenchée dans la fonction Lambda, la tâche échoue.

Pour de plus amples informations sur la gestion des états d'entrée, des états de sortie et des résultats, veuillez consulter Traitement des entrées et des sorties dans Step Functions.

Lambda optimisé APIs

Exemples de flux de travail

Ce qui suit inclut un Task état qui invoque une fonction Lambda.

{ "StartAt":"CallLambda", "States":{ "CallLambda":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:MyFunction" }, "End":true } } }

L'exemple suivant inclut un état Task qui implémente le modèle d'intégration de service de rappel.

{ "StartAt":"GetManualReview", "States":{ "GetManualReview":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:get-model-review-decision", "Payload":{ "model.$":"$.new_model", "token.$":"$$.Task.Token" }, "Qualifier":"prod-v1" }, "End":true } } }

Lorsque vous appelez une fonction Lambda, l'exécution attend que la fonction soit terminée. Si vous appelez la fonction Lambda avec une tâche de rappel, le délai d'expiration du rythme cardiaque ne commence à être compté qu'une fois que la fonction Lambda a terminé son exécution et renvoyé un résultat. Tant que la fonction Lambda est exécutée, le délai d'expiration du rythme cardiaque n'est pas appliqué.

Il est également possible d'appeler Lambda de manière asynchrone à l'aide du InvocationType paramètre, comme le montre l'exemple suivant :

Note

Pour les appels asynchrones de fonctions Lambda, le délai d'expiration du rythme cardiaque commence immédiatement.

{ "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Hello", "States": { "Hello": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:echo", "InvocationType": "Event" }, "End": true } } }

Lorsque le Task résultat est renvoyé, la sortie de la fonction est imbriquée dans un dictionnaire de métadonnées. Par exemple :

{ "ExecutedVersion":"$LATEST", "Payload":"FUNCTION OUTPUT", "SdkHttpMetadata":{ "HttpHeaders":{ "Connection":"keep-alive", "Content-Length":"4", "Content-Type":"application/json", "Date":"Fri, 26 Mar 2021 07:42:02 GMT", "X-Amz-Executed-Version":"$LATEST", "x-amzn-Remapped-Content-Length":"0", "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010", "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0" }, "HttpStatusCode":200 }, "SdkResponseMetadata":{ "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3" }, "StatusCode":200 }

Vous pouvez également invoquer une fonction Lambda en spécifiant un ARN de fonction directement dans le champ « Ressource ». Lorsque vous appelez une fonction Lambda de cette manière, vous ne pouvez pas la spécifier .waitForTaskToken et le résultat de la tâche contient uniquement le résultat de la fonction.

{ "StartAt":"CallFunction", "States":{ "CallFunction": { "Type":"Task", "Resource":"arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }

Vous pouvez appeler une version ou un alias de fonction Lambda spécifique en spécifiant ces options dans l'ARN du Resource champ. Consultez les informations suivantes dans la documentation Lambda :

Politiques IAM pour les appels AWS Lambda

Les exemples de modèles suivants montrent comment AWS Step Functions générer des politiques IAM basées sur les ressources de votre définition de machine à états. Pour plus d’informations, consultez Comment Step Functions génère des politiques IAM pour les services intégrés et Découvrez les modèles d'intégration des services dans Step Functions.

AWS Step Functions génère une politique IAM basée sur la définition de votre machine à états. Pour une machine à états avec deux états de AWS Lambda tâche qui appellent function1 etfunction2, une politique avec lambda:Invoke des autorisations pour les deux fonctions doit être utilisée.

Voici un exemple :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function1]]", "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function2]]" ] } ] }