

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Konfigurasikan fungsi Lambda yang tahan lama
<a name="durable-configuration"></a>

Untuk mengaktifkan eksekusi tahan lama untuk fungsi Lambda Anda, Anda perlu mengonfigurasi pengaturan spesifik yang mengontrol berapa lama fungsi Anda dapat berjalan, berapa lama data status dipertahankan, dan izin apa yang diperlukan.

## Aktifkan eksekusi yang tahan lama
<a name="durable-config-settings"></a>

Untuk mengaktifkan eksekusi tahan lama untuk fungsi Lambda Anda, konfigurasikan `DurableConfig` konfigurasi fungsi Anda. Setelan ini mengontrol batas waktu eksekusi, retensi status, dan perilaku pembuatan versi.

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

------

**Parameter konfigurasi:**
+ `ExecutionTimeout`- Waktu eksekusi maksimum dalam hitungan detik (hingga 31.536.000 untuk satu tahun)
+ `RetentionPeriodInDays`- Berapa lama untuk mempertahankan status eksekusi dan riwayat (1-365 hari)
+ `AllowInvokeLatest`- Apakah akan mengizinkan pemanggilan versi \$1LATEST untuk eksekusi yang tahan lama

## Izin IAM untuk fungsi tahan lama
<a name="durable-iam-permissions"></a>

Fungsi tahan lama memerlukan izin IAM tambahan di luar peran eksekusi Lambda standar. Peran eksekusi fungsi Anda harus menyertakan izin untuk manajemen status dan eksekusi APIs tahan lama.

**Izin minimum yang diperlukan:**

```
{
  "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 contoh peran eksekusi:**

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

## Praktik terbaik konfigurasi
<a name="durable-config-best-practices"></a>

Ikuti praktik terbaik ini saat mengonfigurasi fungsi tahan lama untuk penggunaan produksi:
+ **Tetapkan batas waktu eksekusi yang sesuai** - Konfigurasikan `ExecutionTimeout` berdasarkan durasi maksimum yang diharapkan alur kerja Anda. Jangan menetapkan batas waktu lama yang tidak perlu karena memengaruhi alokasi biaya dan sumber daya.
+ **Retensi saldo dengan biaya penyimpanan** - Tetapkan `RetentionPeriodInDays` berdasarkan persyaratan debugging dan audit Anda. Periode retensi yang lebih lama meningkatkan biaya penyimpanan.
+ **Gunakan pembuatan versi dalam produksi** - Setel `AllowInvokeLatest` ke `false` lingkungan produksi dan gunakan versi fungsi atau alias tertentu untuk eksekusi yang tahan lama.
+ **Ukuran status monitor** - Objek status besar meningkatkan biaya penyimpanan dan dapat memengaruhi kinerja. Jaga status minimal dan gunakan penyimpanan eksternal untuk data besar.
+ **Konfigurasikan logging yang sesuai** - Aktifkan pencatatan terperinci untuk memecahkan masalah alur kerja yang berjalan lama, tetapi perhatikan volume dan biaya log.

**Contoh konfigurasi produksi:**

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