キャパシティープロバイダー - AWS Lambda

キャパシティープロバイダー

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

キャパシティープロバイダーを作成するときは、以下を指定します。

  • VPC 設定 – インスタンスが実行されるサブネットとセキュリティグループ

  • アクセス許可 – Lambda が EC2 リソースを管理するための IAM ロール

  • インスタンス要件 (オプション) – アーキテクチャとインスタンスタイプの設定

  • スケーリング設定 (オプション) – Lambda がインスタンスをスケーリングする方法

セキュリティ境界としてのキャパシティープロバイダーについて理解する

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

主要なセキュリティの概念

  • キャパシティープロバイダー: Lambda 関数の信頼レベルを定義するセキュリティ境界

  • コンテナの分離: コンテナはセキュリティプロバイダーではありません。信頼できないワークロード間のセキュリティ対策としてコンテナに依存してはいけない

  • 信頼の分離: 異なるキャパシティープロバイダーを使用して、相互に信頼されていないワークロードを分離する

キャパシティープロバイダーの作成

キャパシティープロバイダーは、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

必須パラメータ

CapacityProviderName

  • キャパシティープロバイダーの一意の名前

  • AWS アカウント内で一意にしなければならない

VpcConfig

  • SubnetIds (必須): サブネットは最低 1 つ、最大 16 個。耐障害性を高めるため、複数のアベイラビリティーゾーンにまたがるサブネットを使用する

  • SecurityGroupIds (オプション): インスタンスのセキュリティグループ。指定しない場合、デフォルトは VPC デフォルトセキュリティグループになる

PermissionsConfig

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

任意指定のパラメータ

InstanceRequirements

キャパシティープロバイダーのアーキテクチャとインスタンスタイプを指定します。

  • アーキテクチャ: 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 マネージドキーになります。

タグ

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

キャパシティープロバイダーの管理

キャパシティープロバイダーを更新する

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

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

キャパシティープロバイダーを削除する

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

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

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

キャパシティープロバイダーの詳細の確認

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

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

キャパシティープロバイダーの状態

キャパシティープロバイダーは、以下のいずれかの状態になります。

  • 保留中: キャパシティープロバイダーは作成中

  • アクティブ: キャパシティープロバイダーは使用できる状態

  • 失敗: キャパシティープロバイダーの作成が失敗した

  • 削除中: キャパシティープロバイダーは削除中

クォータ

  • アカウントあたりの最大キャパシティープロバイダー: 1,000

  • キャパシティープロバイダーあたりの最大関数バージョン: 100 (増やすことはできません)

ベストプラクティス

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

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

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

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

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

次のステップ