

# 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 ベースの耐久性の高い関数の場合、関数コードと依存関係を 1 つの .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 (バージョンまたはエイリアス) を使用して、耐久性のある関数を呼び出します。

**注記**  
**べき等呼び出し:** 失敗した呼び出しを再試行するときに、at-most-once の実行セマンティクスを保証する実行名を指定すると、実行が重複しないようにできます。詳細については、「[べき等性](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 ログで耐久性のある関数のログを確認します。

```
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)」を参照してください。