

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
<a name="connect-lambda"></a>

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, reportez-vous [Intégration des services ](integrate-services.md) aux sections et[Transmission de paramètres à une API de service dans Step Functions](connect-parameters.md).

**Principales fonctionnalités de l'intégration Lambda optimisée**  
Le `Payload` champ de la réponse est analysé de Json échappé à Json.
Si une exception est déclenchée dans la fonction Lambda, la tâche échouera. Pour un exemple pratique, voir[Gestion des conditions d'erreur dans une machine à états Step Functions](tutorial-handling-error-conditions.md). 

## Lambda optimisé APIs
<a name="connect-lambda-api"></a>
+ [https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)

## Exemples de flux de travail
<a name="connect-lambda-api-examples"></a>

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

```
{  
   "StartAt":"CallLambda",
   "States":{  
      "CallLambda":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:MyFunction"
         },
         "End":true
      }
   }
}
```

L'exemple suivant inclut un état `Task` qui implémente le modèle d'intégration de service de [rappel](connect-to-resource.md#connect-wait-token).

```
{  
   "StartAt":"GetManualReview",
   "States":{  
      "GetManualReview":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:get-model-review-decision",
            "Payload":{  
               "model":"{% $states.input.my-model %}",
               "TaskToken": "{% $states.context.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 :

```
{

  "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",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:echo",
        "InvocationType": "Event"
      },
      "End": true
    }
  }
}
```

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

 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
}
```

## Ressource fonctionnelle directement spécifiée
<a name="w2aac33c40c13"></a>

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:region:account-id:function:HelloFunction",
         "End": true
      }
   }
}
```

Avec cette forme d'intégration, la fonction peut réussir tout en envoyant une réponse contenant un `FunctionError` champ. Dans ce scénario, la tâche du flux de travail échouera.

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 :
+ [Gestion des versions de fonction AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/versioning-intro.html)
+ [AWS Lambdaalias](https://docs.aws.amazon.com/lambda/latest/dg/aliases-intro.html)

## Politiques IAM pour les appels AWS Lambda
<a name="lambda-iam"></a>

Les exemples de modèles suivants montrent comment AWS Step Functions générer des politiques IAM en fonction des ressources contenues dans la définition de votre machine d'état. Pour plus d’informations, consultez [Comment Step Functions génère des politiques IAM pour les services intégrés](service-integration-iam-templates.md) et [Découvrez les modèles d'intégration des services dans Step Functions](connect-to-resource.md).

Dans l'exemple suivant, une machine à états avec deux états de AWS Lambda tâche qui appellent `function1` et`function2`, la politique générée automatiquement inclut l'`lambda:Invoke`autorisation pour les deux fonctions.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:myFn1",
                "arn:aws:lambda:us-east-1:123456789012:function:myFn2"
            ]
        }
    ]
}
```