

# Lambda 지속성 함수 구성
<a name="durable-configuration"></a>

Lambda 함수에 대해 지속성 실행을 활성화하려면 함수를 실행할 수 있는 기간, 상태 데이터가 유지되는 기간 및 필요한 권한을 제어하는 특정 설정을 구성해야 합니다.

## 지속성 실행 활성화
<a name="durable-config-settings"></a>

Lambda 함수에 대해 지속성 실행을 활성화하려면 함수 구성에서 `DurableConfig`를 구성합니다. 이 설정은 실행 제한 시간, 상태 보존 및 버전 관리 동작을 제어합니다.

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

------

**구성 파라미터:**
+ `ExecutionTimeout` - 초 단위의 최대 실행 시간(최대 31,536,000(1년))
+ `RetentionPeriodInDays` - 실행 상태 및 내역을 유지하는 기간(1\$1365일)
+ `AllowInvokeLatest` - 지속성 실행을 위해 \$1LATEST 버전의 간접 호출을 허용하는지 여부

## 지속성 함수에 대한 IAM 권한
<a name="durable-iam-permissions"></a>

지속성 함수에는 표준 Lambda 실행 역할 이외의 추가 IAM 권한이 필요합니다. 함수의 실행 역할에는 상태 관리 및 지속성 실행 API에 대한 권한이 포함되어야 합니다.

**최소 필수 권한:**

```
{
  "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 실행 역할 예제:**

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

## 구성 모범 사례
<a name="durable-config-best-practices"></a>

프로덕션용으로 지속성 함수 구성 시 다음 모범 사례를 따릅니다.
+ **적절한 실행 제한 시간 설정** - 워크플로의 최대 예상 기간에 따라 `ExecutionTimeout`을 구성합니다. 제한 시간이 불필요하게 길면 비용 및 리소스 할당에 영향을 미치므로, 너무 길게 설정하지 마세요.
+ **보존과 스토리지 비용의 균형 유지** - 디버깅 및 감사 요구 사항에 따라 `RetentionPeriodInDays`를 설정합니다. 보존 기간이 길수록 스토리지 비용이 증가합니다.
+ **프로덕션 환경에서 버전 관리 사용** - 프로덕션 환경에서 `AllowInvokeLatest`를 `false`로 설정하고 지속성 실행에 특정 함수 버전 또는 별칭을 사용합니다.
+ **상태 크기 모니터링** - 상태 객체가 크면 스토리지 비용이 증가하고 성능에 영향을 미칠 수 있습니다. 상태 크기를 최소화하고 대용량 데이터에는 외부 스토리지를 사용하세요.
+ **적절한 로깅 구성** - 장기 실행 워크플로 문제를 해결하기 위해 세부 로깅을 활성화하되, 로그 볼륨과 비용에 유의합니다.

**프로덕션 구성 예제:**

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