

# AWS CLI를 사용하여 Lambda 지속성 함수 배포 및 간접 호출
<a name="durable-getting-started-cli"></a>

AWS CLI를 사용하여 필수 명령으로 Lambda 지속성 함수를 생성 및 배포합니다. 이 접근 방식을 사용하면 배포 프로세스의 각 단계를 직접 제어할 수 있습니다.

## 사전 조건
<a name="durable-cli-prerequisites"></a>
+ AWS CLI를 설치하고 구성합니다. 지침은 [AWS CLI 설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.
+ 함수 코드와 지속성 실행 SDK를 사용하여 배포 패키지를 생성합니다.
+ 체크포인트 권한을 가진 IAM 실행 역할을 생성합니다.

## 실행 역할 생성
<a name="durable-cli-create-role"></a>

기본 Lambda 실행 및 체크포인트 작업에 대한 권한이 있는 IAM 역할을 생성합니다.

**실행 역할을 만들려면**

1. Lambda의 역할 수임을 허용하는 신뢰 정책 문서를 생성합니다. `trust-policy.json`으로 저장합니다.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 역할을 생성합니다.

   ```
   aws iam create-role \
     --role-name {{durable-function-role}} \
     --assume-role-policy-document file://trust-policy.json
   ```

1. 체크포인트 작업 및 기본 실행을 위한 지속성 실행 정책을 연결합니다.

   ```
   aws iam attach-role-policy \
     --role-name {{durable-function-role}} \
     --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy
   ```

`AWSLambdaBasicDurableExecutionRolePolicy` 관리형 정책에는 체크포인트 작업(`lambda:CheckpointDurableExecution` 및 `lambda:GetDurableExecutionState`)과 기본 Lambda 실행에 필요한 권한이 포함됩니다.

## 지속성 함수 생성
<a name="durable-cli-create-function"></a>

`--durable-config` 파라미터를 사용하여 지속성 함수를 생성합니다.

**지속성 함수 생성**

1. 종속성이 포함된 함수 코드를 .zip 파일로 패키징합니다.

   ```
   zip -r function.zip index.mjs node_modules/
   ```
**참고**  
Java 기반 지속성 함수의 경우 함수 코드와 종속성을 단일 .zip 파일 또는 Java Archive(JAR) 파일로 컴파일해야 합니다. 자세한 내용은 [.zip 또는 JAR 파일 아카이브를 사용하여 Java Lambda 함수 배포](java-package.md)를 참조하세요.

1. 지속성 실행이 활성화된 함수를 생성합니다.

   ```
   aws lambda create-function \
     --function-name {{myDurableFunction}} \
     --runtime nodejs22.x \
     --role {{arn:aws:iam::123456789012:role/durable-function-role}} \
     --handler index.handler \
     --zip-file fileb://function.zip \
     --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'
   ```

**참고**  
함수를 생성할 때만 지속성 실행을 활성화할 수 있습니다. 기존 함수에서는 활성화할 수 없습니다.

## 버전 게시
<a name="durable-cli-publish-version"></a>

지속성 함수는 `$LATEST` 버전 한정자를 사용하여 간접적으로 호출할 수 있지만, 코드를 결정론적으로 실행하려면 항상 안정적인 버전을 가리키는 정규화된 ARN을 사용해야 합니다.

```
aws lambda publish-version \
  --function-name {{myDurableFunction}} \
  --description "Initial version"
```

명령은 버전 ARN을 반환합니다. ARN 끝에 있는 버전 번호(예: `:1`)를 기록해 둡니다.

버전을 가리키는 별칭을 생성합니다(선택 사항).

```
aws lambda create-alias \
  --function-name {{myDurableFunction}} \
  --name prod \
  --function-version 1
```

## 지속성 함수 간접 호출
<a name="durable-cli-invoke"></a>

정규화된 ARN(버전 또는 별칭)을 사용하여 지속성 함수를 간접 호출합니다.

**참고**  
**멱등적 간접 호출:** 실패한 간접 호출을 재시도할 때 중복 실행을 방지하려면 최대 1회 실행 의미 체계를 보장하는 실행 이름을 제공할 수 있습니다. 자세한 내용은 [멱등성](durable-execution-idempotency.md)을 참조하세요.

**동기식 간접 호출**  
15분 이내에 완료되는 실행의 경우 동기식 간접 호출을 사용합니다.

```
aws lambda invoke \
  --function-name {{myDurableFunction:1}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

또는 별칭을 사용합니다.

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

**비동기식 간접 호출**  
장기 실행의 경우 비동기식 간접 호출을 사용합니다.

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --invocation-type Event \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

비동기식 간접 호출을 사용하면 Lambda는 즉시 반환합니다. 함수는 백그라운드에서 계속 실행됩니다.

**참고**  
콘솔에서 프로토타입 생성 및 테스트를 위해 `$LATEST`를 사용할 수 있습니다. 프로덕션 워크로드의 경우 게시된 버전 또는 별칭을 사용합니다.

## 지속성 실행 관리
<a name="durable-cli-manage-executions"></a>

다음 명령을 사용하여 지속성 함수 실행을 관리하고 모니터링합니다.

**실행 나열**  
지속성 함수에 대한 모든 실행을 나열합니다.

```
aws lambda list-durable-executions-by-function \
  --function-name {{myDurableFunction}}
```

**실행 세부 정보 가져오기**  
특정 실행에 대한 세부 정보를 가져옵니다.

```
aws lambda get-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**실행 내역 가져오기**  
실행에 대한 체크포인트 내역을 확인합니다.

```
aws lambda get-durable-execution-history \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**실행 중지**  
지속성 실행을 중지합니다.

```
aws lambda stop-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

## 함수 코드 업데이트
<a name="durable-cli-update-function"></a>

지속성 함수 코드를 업데이트하고 새 버전을 게시합니다.

**새 버전 업데이트 및 게시**

1. 함수 코드를 업데이트합니다.

   ```
   aws lambda update-function-code \
     --function-name {{myDurableFunction}} \
     --zip-file fileb://function.zip
   ```

1. 업데이트가 완료될 때까지 대기합니다.

   ```
   aws lambda wait function-updated \
     --function-name {{myDurableFunction}}
   ```

1. 새 버전을 게시합니다.

   ```
   aws lambda publish-version \
     --function-name {{myDurableFunction}} \
     --description "Updated order processing logic"
   ```

1. 새 버전을 가리키도록 별칭을 업데이트합니다.

   ```
   aws lambda update-alias \
     --function-name {{myDurableFunction}} \
     --name prod \
     --function-version 2
   ```

**중요**  
진행 중인 실행에서 시작된 버전을 계속 사용합니다. 새 간접 호출은 업데이트된 별칭 버전을 사용합니다.

## 함수 로그 보기
<a name="durable-cli-view-logs"></a>

CloudWatch Logs에서 지속성 함수의 로그를 봅니다.

```
aws logs tail /aws/lambda/myDurableFunction --follow
```

특정 실행에 대해 로그를 필터링합니다.

```
aws logs filter-log-events \
  --log-group-name /aws/lambda/myDurableFunction \
  --filter-pattern "exec-abc123"
```

## 리소스 정리
<a name="durable-cli-cleanup"></a>

지속성 함수 및 관련 리소스를 삭제합니다.

```
# Delete the function
aws lambda delete-function --function-name {{myDurableFunction}}

# Delete the IAM role policies
aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy

# Delete the role
aws iam delete-role --role-name {{durable-function-role}}
```

## 다음 단계
<a name="durable-cli-next-steps"></a>

AWS CLI를 사용하여 지속성 함수를 배포하면 다음 작업을 할 수 있습니다.
+ `list-durable-executions-by-function` 및 `get-durable-execution` 명령을 사용하여 실행 모니터링
+ AWS CloudTrail 데이터 이벤트에서 체크포인트 작업 보기
+ 실행 실패 또는 장기 실행에 대한 CloudWatch 경보 설정
+ 쉘 스크립트 또는 CI/CD 파이프라인을 사용하여 배포 자동화

Lambda에 대해 사용 가능한 AWS CLI 명령에 대한 자세한 내용은 [AWS CLI 명령 레퍼런스](https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html)를 참조하세요.