

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configura le funzioni durevoli Lambda
<a name="durable-configuration"></a>

Per consentire l'esecuzione duratura della funzione Lambda, è necessario configurare impostazioni specifiche che controllino per quanto tempo può essere eseguita la funzione, per quanto tempo vengono conservati i dati sullo stato e quali autorizzazioni sono richieste.

## Abilita un'esecuzione duratura
<a name="durable-config-settings"></a>

Per abilitare l'esecuzione durevole della tua funzione Lambda, configurala `DurableConfig` nella configurazione della tua funzione. Questa impostazione controlla il timeout di esecuzione, il mantenimento dello stato e il comportamento di controllo delle versioni.

------
#### [ 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
```

------

**Parametri di configurazione:**
+ `ExecutionTimeout`- Tempo massimo di esecuzione in secondi (fino a 31.536.000 per un anno)
+ `RetentionPeriodInDays`- Per quanto tempo conservare lo stato e la cronologia di esecuzione (1-365 giorni)
+ `AllowInvokeLatest`- Se consentire l'invocazione della versione \$1LATEST per un'esecuzione duratura

## Autorizzazioni IAM per funzioni durevoli
<a name="durable-iam-permissions"></a>

Le funzioni durevoli richiedono autorizzazioni IAM aggiuntive oltre ai ruoli di esecuzione Lambda standard. Il ruolo di esecuzione della funzione deve includere le autorizzazioni per la gestione dello stato e l'esecuzione duratura. APIs

**Autorizzazioni minime richieste:**

```
{
  "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 esempio di ruolo di esecuzione:**

```
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: '*'
```

## Best practice per la configurazione
<a name="durable-config-best-practices"></a>

Segui queste best practice per configurare funzioni durevoli per l'uso in produzione:
+ **Imposta i timeout di esecuzione appropriati**: configura `ExecutionTimeout` in base alla durata massima prevista del flusso di lavoro. Non impostate timeout inutilmente lunghi poiché influiscono sull'allocazione dei costi e delle risorse.
+ **Bilancia la conservazione con i costi di archiviazione**: imposta in `RetentionPeriodInDays` base ai requisiti di debug e audit. Periodi di conservazione più lunghi aumentano i costi di storage.
+ **Usa il controllo delle versioni in produzione**: imposta l'`AllowInvokeLatest`opzione `false` negli ambienti di produzione e utilizza versioni di funzioni o alias specifici per esecuzioni durature.
+ **Monitora le dimensioni dello stato**: gli oggetti a stato di grandi dimensioni aumentano i costi di storage e possono influire sulle prestazioni. Riduci al minimo lo stato e utilizza lo storage esterno per dati di grandi dimensioni.
+ **Configura la registrazione appropriata**: abilita la registrazione dettagliata per la risoluzione dei problemi dei flussi di lavoro a lunga durata, ma fai attenzione al volume e ai costi dei log.

**Esempio di configurazione di produzione:**

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