

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.

# Configurer les fonctions durables de Lambda
<a name="durable-configuration"></a>

Pour permettre une exécution durable de votre fonction Lambda, vous devez configurer des paramètres spécifiques qui contrôlent la durée d'exécution de votre fonction, la durée de conservation des données d'état et les autorisations requises.

## Permettre une exécution durable
<a name="durable-config-settings"></a>

Pour permettre une exécution durable de votre fonction Lambda, configurez-la `DurableConfig` dans la configuration de votre fonction. Ce paramètre contrôle le délai d'exécution, la conservation des états et le comportement de gestion des versions.

------
#### [ AWS CLI ]

```
aws lambda update-function-configuration \
  --function-name my-durable-function \
  --durable-config '{
    "ExecutionTimeout": 3600,
    "RetentionPeriodInDays": 30,
    "AllowInvokeLatest": true
  }'
```

------
#### [ CloudFormation ]

```
Resources:
  MyDurableFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-durable-function
      Runtime: nodejs18.x
      Handler: index.handler
      Code:
        ZipFile: |
          // Your durable function code
      DurableConfig:
        ExecutionTimeout: 3600
        RetentionPeriodInDays: 30
        AllowInvokeLatest: true
```

------

**Paramètres de configuration :**
+ `ExecutionTimeout`- Temps d'exécution maximal en secondes (jusqu'à 31 536 000 pour un an)
+ `RetentionPeriodInDays`- Combien de temps faut-il conserver l'état et l'historique d'exécution (1 à 365 jours)
+ `AllowInvokeLatest`- Autoriser ou non l'invocation de la version \$1LATEST pour une exécution durable

## Autorisations IAM pour des fonctions durables
<a name="durable-iam-permissions"></a>

Les fonctions durables nécessitent des autorisations IAM supplémentaires au-delà des rôles d'exécution Lambda standard. Le rôle d'exécution de votre fonction doit inclure des autorisations pour la gestion des états et l'exécution durable APIs.

**Autorisations minimales requises :**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction",
        "lambda:GetFunction",
        "lambda:ManageDurableState",
        "lambda:GetDurableExecution",
        "lambda:ListDurableExecutions"
      ],
      "Resource": "arn:aws:lambda:*:*:function:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

**CloudFormation exemple de rôle d'exécution :**

```
DurableFunctionRole:
  Type: AWS::IAM::Role
  Properties:
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
          Action: sts:AssumeRole
    ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    Policies:
      - PolicyName: DurableFunctionPolicy
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - lambda:ManageDurableState
                - lambda:GetDurableExecution
                - lambda:ListDurableExecutions
              Resource: '*'
```

## Bonnes pratiques en matière de configuration
<a name="durable-config-best-practices"></a>

Suivez les meilleures pratiques suivantes lors de la configuration de fonctions durables pour une utilisation en production :
+ **Définissez des délais d'exécution appropriés - Configurez** `ExecutionTimeout` en fonction de la durée maximale prévue de votre flux de travail. Ne fixez pas de délais d'attente inutilement longs, car ils affectent les coûts et l'allocation des ressources.
+ **Équilibrez la rétention avec les coûts de stockage** : définissez les `RetentionPeriodInDays` paramètres en fonction de vos exigences en matière de débogage et d'audit. Des périodes de conservation plus longues augmentent les coûts de stockage.
+ **Utiliser le versionnement en production** : configurez-le sur `false` dans `AllowInvokeLatest` les environnements de production et utilisez des versions de fonctions ou des alias spécifiques pour des exécutions durables.
+ **Taille de l'état du moniteur** : les objets à état volumineux augmentent les coûts de stockage et peuvent avoir un impact sur les performances. Maintenez l'état minimal et utilisez un stockage externe pour les données volumineuses.
+ **Configurer une journalisation appropriée** - Activez la journalisation détaillée pour résoudre les problèmes liés aux flux de travail de longue durée, tout en tenant compte du volume des journaux et des coûts.

**Exemple de configuration de production :**

```
{
  "ExecutionTimeout": 86400,
  "RetentionPeriodInDays": 7,
  "AllowInvokeLatest": false
}
```