

# 関数に対する予約済み同時実行数の設定
<a name="configuration-concurrency"></a>

Lambda での[同時実行](lambda-concurrency.md)は、関数が現在処理している未完了のリクエストの数です。利用できる同時実行コントロールには、次の 2 種類があります。
+ 予約済同時実行数 — 関数に割り当てられた同時インスタンスの最大数と最小数を設定します。ある関数が予約済み同時実行を使用している場合、他の関数はその同時実行を使用できません。予約済み同時実行数は、最も重要な関数が受信リクエストを処理するのに十分な同時実行数を常に確保するのに役立ちます。さらに、予約済同時実行数は、データベース接続などのダウンストリームリソースが過負荷になるのを防ぐために同時実行を制限するために使用できます。予約済同時実行数は、下限と上限の両方の役割を果たします。これは指定されたキャパシティを関数専用に予約しつつ、それを超えるスケーリングを抑制します。。関数に対して予約される同時実行を設定する場合には追加料金がかかりません。
+ プロビジョニングされた同時実行 — これは、関数に割り当てる、事前に初期化された実行環境の数です。これらの実行環境は、受信した関数リクエストに即座に対応できます。プロビジョニングされた同時実行は、関数のコールドスタートレイテンシーを減らすのに役立ち、数十ミリ秒の応答時間で使用できるように設計されています。一般に、この機能のメリットを最も享受するのはインタラクティブワークロードです。ウェブアプリケーションやモバイルアプリケーションなど、これらはユーザーがリクエストを開始するアプリケーションであり、レイテンシーに最も敏感です。データ処理パイプラインなどの非同期ワークロードは、レイテンシーの影響を受けにくいことが多いため、通常はプロビジョニングされた同時実行数は必要ありません。プロビジョニングされた同時実行を設定すると、AWS アカウント に追加料金が請求されます。

このトピックでは、予約済み同時実行数を管理および設定する方法について説明します。これら 2 種類の同時実行制御の概念的な概要については、「[予約同時実行とプロビジョニング同時実行](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned)」を参照してください。プロビジョニングされた同時実行数の設定の詳細については、[関数に対するプロビジョニングされた同時実行数の設定](provisioned-concurrency.md) を参照してください。

**注記**  
Amazon MQ イベントソースマッピングにリンクされた Lambda 関数には、デフォルトの最大同時実行数があります。Apache ActiveMQ の場合、同時インスタンスの最大数は 5 です。RabbitMQ の場合、同時インスタンスの最大数は 1 です。関数に予約またはプロビジョニングされる同時実行数を設定しても、これらの制限は変わりません。Amazon MQ を使用する場合のデフォルトの最大同時実行数の増加をリクエストするには、サポート にお問い合わせください。

**Topics**
+ [予約済同時実行数の設定](#configuring-concurrency-reserved)
+ [関数に必要な予約済み同時実行数を正確に見積もる](#estimating-reserved-concurrency)

## 予約済同時実行数の設定
<a name="configuring-concurrency-reserved"></a>

Lambda コンソールまたは Lambda API を使用して、関数の予約済同時実行の設定を行うことができます。

**関数の同時実行数を予約するには (コンソール)**

1. Lambda コンソールの [[関数](https://console.aws.amazon.com/lambda/home#/functions)] ページを開きます。

1. 同時実行を予約する関数を選択します。

1. [**設定**]、[**同時実行**] の順にクリックします。

1. [**同時実行数**] で、[**編集**] をクリックします。

1. [**同時実行の予約**] をクリックします。関数用に予約する同時実行の量を入力します。

1. **[保存]** をクリックします。

**[予約されていないアカウントの同時実行]** の値から 100 を引いた値まで予約できます。残りの 100 単位の同時実行は、予約された同時実行を使用しない関数用です。例えば、アカウントの同時実行の上限が 1,000 の場合、1 つの関数で同時実行の 1,000 ユニットすべては予約できません。

![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/concurrency-reserve-over-limit.png)


関数の同時実行数を予約すると、他の関数で使用できる同時実行数のプールに影響を与えることがあります。たとえば、`function-a` の同時実行に 100 ユニットを予約した場合、`function-a` が予約された同時実行の 100 ユニットすべてを使用しなくても、アカウント内の他の関数は残りの 900 ユニットの同時実行を共有する必要があります。

意図的に関数をスロットリングするには、予約済同時実行数をゼロに設定します。これにより、制限を削除するまで、関数のイベント処理が停止します。

以下の API オペレーションを使用して、Lambda API で予約された同時実行を設定するには
+ [PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)
+ [GetFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConcurrency.html)
+ [DeleteFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionConcurrency.html)

例えば、AWS Command Line Interface (CLI) を使用して予約された同時実行を設定するには、`put-function-concurrency` コマンドを使用します。以下のコマンドでは、`my-function` という名前の関数に 100 の同時実行数を予約します。

```
aws lambda put-function-concurrency --function-name my-function \
    --reserved-concurrent-executions 100
```

次のような出力が表示されます。

```
{
    "ReservedConcurrentExecutions": 100
}
```

## 関数に必要な予約済み同時実行数を正確に見積もる
<a name="estimating-reserved-concurrency"></a>

関数が現在トラフィックを処理している場合は、[CloudWatch メトリクス](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)を使用して、その同時実行メトリクスを簡単に確認できます。特に、`ConcurrentExecutions` メトリクスはアカウント内の各関数の同時呼び出し数を表示します。

![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/concurrency-concurrent-executions-metrics.png)


グラフによると、この関数は通常、1 日平均 5～10 件、最大で 20 件の同時リクエストを処理します。アカウントに、他にも多くの関数があるとします。**この関数がアプリケーションにとって重要な関数で、リクエストを一切ドロップしたくない場合は**、予約された同時実行の設定として 20 以上の数を使用します。

または、以下の式を使用して[同時実行を計算できる](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#calculating-concurrency)ことを思い出してください。

```
Concurrency = (average requests per second) * (average request duration in seconds)
```

1 秒あたりの平均リクエスト数に平均リクエスト時間 (秒単位) を掛けると、予約する必要がある同時実行数の大まかな見積もりが得られます。1 秒あたりの平均リクエスト数は `Invocation` メトリクスを、平均リクエスト時間 (秒単位) は `Duration` メトリクスを使用して見積もることができます。詳細については、「[Lambda での CloudWatch メトリクスの使用](monitoring-metrics.md)」を参照してください。

アップストリームおよびダウンストリームでのスループットの制約について理解を深める必要があります。Lambda 関数は負荷に応じてシームレスにスケールしますが、アップストリームとダウンストリームの依存関係においてスループット能力は同じではない場合があります。関数のスケールの上限を制限する必要がある場合、関数で予約された同時実行数を設定します。