

# キャパシティープロバイダー
<a name="lambda-managed-instances-capacity-providers"></a>

キャパシティープロバイダーは、Lambda マネージドインスタンスを実行するための基盤です。これは関数のセキュリティ境界として機能し、Lambda がユーザーに代わってプロビジョニングおよび管理するコンピューティングリソースを定義します。

キャパシティープロバイダーを作成するときは、以下を指定します。
+ **VPC 設定** – インスタンスが実行されるサブネットとセキュリティグループ
+ **アクセス許可** – Lambda が EC2 リソースを管理するための IAM ロール
+ **インスタンス要件** (オプション) – アーキテクチャと[インスタンスタイプ](https://aws.amazon.com/lambda/pricing/#:~:text=EPU%20pricing%20applies.-,Management%20Fees,-Pricing%20Example%3A%20High)の設定
+ **スケーリング設定** (オプション) – Lambda がインスタンスをスケーリングする方法

## セキュリティ境界としてのキャパシティープロバイダーについて理解する
<a name="lambda-managed-instances-capacity-provider-security-boundary"></a>

キャパシティープロバイダーは、VPC 内の Lambda 関数のセキュリティ境界として機能し、Firecracker ベースの分離を置き換えます。関数はインスタンス内のコンテナで実行されますが、Firecracker microVM とは異なり、コンテナは関数間の強力なセキュリティ分離を提供しません。

**主要なセキュリティの概念**
+ **キャパシティープロバイダー:** Lambda 関数の信頼レベルを定義するセキュリティ境界
+ **コンテナの分離:** コンテナはセキュリティプロバイダーではありません。信頼できないワークロード間のセキュリティ対策としてコンテナに依存してはいけない
+ **信頼の分離**: 異なるキャパシティープロバイダーを使用して、相互に信頼されていないワークロードを分離する

## キャパシティープロバイダーの作成
<a name="lambda-managed-instances-creating-capacity-provider"></a>

キャパシティープロバイダーは、AWS CLI、AWS マネジメントコンソール、または AWS SDK を使用して作成できます。

**AWS CLI を使用する:**

```
aws lambda create-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --vpc-config SubnetIds=subnet-12345,subnet-67890,subnet-11111,SecurityGroupIds=sg-12345 \
  --permissions-config CapacityProviderOperatorRoleArn=arn:aws:iam::123456789012:role/MyOperatorRole \
  --instance-requirements Architectures=x86_64 \
  --capacity-provider-scaling-config ScalingMode=Auto
```

### 必須パラメータ
<a name="lambda-managed-instances-capacity-provider-required-params"></a>

**CapacityProviderName**
+ キャパシティープロバイダーの一意の名前
+ AWS アカウント内で一意にしなければならない

**VpcConfig**
+ **SubnetIds** (必須): サブネットは最低 1 つ、最大 16 個。耐障害性を高めるため、複数のアベイラビリティーゾーンにまたがるサブネットを使用する
+ **SecurityGroupIds** (オプション): インスタンスのセキュリティグループ。指定しない場合、デフォルトは VPC デフォルトセキュリティグループになる

**PermissionsConfig**
+ **CapacityProviderOperatorRoleArn** (必須): Lambda がキャパシティプロバイダーの EC2 リソースを管理できるようにする IAM ロール

### 任意指定のパラメータ
<a name="lambda-managed-instances-capacity-provider-optional-params"></a>

**InstanceRequirements**

キャパシティープロバイダーのアーキテクチャと[インスタンスタイプ](https://aws.amazon.com/lambda/pricing/#:~:text=EPU%20pricing%20applies.-,Management%20Fees,-Pricing%20Example%3A%20High)を指定します。
+ **アーキテクチャ**: `x86_64` または `arm64` を選択します。デフォルトは `x86_64` です。
+ **AllowedInstanceTypes**: 許可されたインスタンスタイプを指定します。例:`m5.8xlarge`
+ **ExcludedInstanceTypes**: ワイルドカードを使用して除外されたインスタンスタイプを指定します。AllowedInstanceTypes または ExcludedInstanceTypes のいずれかのみを指定できます

デフォルトでは、Lambda はワークロードに最適なインスタンスタイプを選択します。利用可能なインスタンスタイプの数を制限すると可用性が低下する可能性があるため、Lambda マネージドインスタンスが選択したインスタンスタイプを使用することをお勧めします。

**CapacityProviderScalingConfig**

Lambda がインスタンスをスケールする方法を設定します。
+ **ScalingMode**: 自動スケーリングの場合は `Auto` に設定し、手動制御の場合は `Manual` に設定します。デフォルトは `Auto` です。
+ **MaxVCpuCount**: キャパシティープロバイダーの vCPU の最大数。デフォルトは 400 です。
+ **ScalingPolicies**: CPU とメモリ使用率のターゲット追跡スケーリングポリシーを定義する

**KmsKeyArn**

EBS 暗号化の AWS KMS キーを指定します。指定しない場合は、デフォルトで AWS マネージドキーになります。

**タグ**

タグを追加して、キャパシティープロバイダーを整理および管理します。

## キャパシティープロバイダーの管理
<a name="lambda-managed-instances-managing-capacity-providers"></a>

### キャパシティープロバイダーを更新する
<a name="lambda-managed-instances-updating-capacity-provider"></a>

`UpdateCapacityProvider` API を使用して、キャパシティープロバイダーの特定のプロパティを更新できます。

```
aws lambda update-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --capacity-provider-scaling-config ScalingMode=Auto
```

### キャパシティープロバイダーを削除する
<a name="lambda-managed-instances-deleting-capacity-provider"></a>

`DeleteCapacityProvider` API を使用して不要になったキャパシティープロバイダーを削除できます。

```
aws lambda delete-capacity-provider \
  --capacity-provider-name my-capacity-provider
```

**注:** 関数バージョンが紐付いているキャパシティープロバイダーは削除できません。

### キャパシティープロバイダーの詳細の確認
<a name="lambda-managed-instances-viewing-capacity-provider"></a>

`GetCapacityProvider` API を使用してキャパシティープロバイダーに関する情報を取得します。

```
aws lambda get-capacity-provider \
  --capacity-provider-name my-capacity-provider
```

## キャパシティープロバイダーの状態
<a name="lambda-managed-instances-capacity-provider-states"></a>

キャパシティープロバイダーは、以下のいずれかの状態になります。
+ **保留中**: キャパシティープロバイダーは作成中
+ **アクティブ**: キャパシティープロバイダーは使用できる状態
+ **失敗**: キャパシティープロバイダーの作成が失敗した
+ **削除**中: キャパシティープロバイダーは削除中

## クォータ
<a name="lambda-managed-instances-capacity-provider-quotas"></a>
+ **アカウントあたりの最大キャパシティープロバイダー**: 1,000
+ **キャパシティープロバイダーあたりの最大関数バージョン**: 100 (増やすことはできません)

## ベストプラクティス
<a name="lambda-managed-instances-capacity-provider-best-practices"></a>

1. **信頼レベル別で分ける**: セキュリティ要件が異なるワークロードごとに別々のキャパシティープロバイダーを作成する

1. **わかりやすい名前を使用する**: 使用目的と信頼レベルを明確に示すために、キャパシティープロバイダーに名前を付ける (例: `production-trusted`、`dev-sandbox`)

1. **複数のアベイラビリティーゾーンを使用する**: 可用性を高めるために複数のアベイラビリティーゾーンにまたがるサブネットを指定する

1. **Lambda がインスタンスタイプを選択できるようにする**: 特定のハードウェア要件がない限り、Lambda が最適なインスタンスタイプを選択して可用性を維持できるようにする

1. **使用状況をモニタリングする**: AWS CloudTrail を使用してキャパシティープロバイダーの割り当てとアクセスパターンをモニタリングする

## 次のステップ
<a name="lambda-managed-instances-capacity-provider-next-steps"></a>
+ 「[Lambda マネージドインスタンスのスケーリング](lambda-managed-instances-scaling.md)」について説明する
+ 「[Lambda マネージドインスタンスのセキュリティとアクセス許可](lambda-managed-instances-security.md)」を理解する
+ [キャパシティープロバイダーの VPC 接続](lambda-managed-instances-networking.md)を設定する
+ [Java](lambda-managed-instances-java-runtime.md)、[Node.js](lambda-managed-instances-nodejs-runtime.md)、[Python](lambda-managed-instances-python-runtime.md) のランタイム固有のガイドを確認する