ネットワーク
実行時にネットワークコネクタリソースを MicroVM に関連付けることで AWS Lambda MicroVMs のネットワークアクセスを設定します。ネットワークコネクタは、run-microvm を呼び出すときに指定されます。MicroVM の実行中に変更することはできません。
概要
各 MicroVM は、独立した入力 (インバウンド) ネットワーク設定と出力 (アウトバウンド) ネットワーク設定を持つことができます。
-
入力ネットワークコネクタは、インバウンド接続を有効にします。クライアントはサービスマネージド HTTPS エンドポイントに接続し、Lambda は MicroVM 内で設定したポートにトラフィックを転送します。入力コネクタは AWS マネージドです (MicroVM の実行時に ARN で参照します)。
-
出力ネットワークコネクタはアウトバウンドトラフィックを有効にします。デフォルトでは、MicroVM にはパブリックインターネットアクセスがあります。カスタマーマネージド VPC 出力コネクタを作成して、VPC 経由でアウトバウンドトラフィックをルーティングすることもできます。
1 つのコネクタを複数の MicroVM で再利用できます。これは意図した使用パターンです。
インバウンド接続
各 Lambda MicroVM は、run-microvm を呼び出したときに割り当てられた一意の HTTPS エンドポイント URL でアクセスできます。クライアントは、このエンドポイントに HTTPS 経由でリクエストを送信します。Lambda は、各リクエストを MicroVM 内のポートにルーティングし、そこでアプリケーションがリクエストを受信します。
デフォルトでは、エンドポイントで受信されたリクエストは MicroVM 内のポート 8080 にルーティングされます。別のポートにルーティングするには、「ポートルーティング」を参照してください。
インバウンドエンドポイントでは、次のプロトコルがサポートされています。
-
HTTP/1.1
-
HTTP/2
-
WebSockets
-
gRPC
-
サーバー送信イベント (SSE)
注記
クライアントと MicroVM エンドポイント間のトラフィックは常に TLS で暗号化されます。アプリケーションは、内部的に HTTP または HTTPS 経由でリクエストを処理できます。
ポートルーティング
Lambda は、次の優先順位で MicroVM 内のターゲットポートを選択します。
-
X-aws-proxy-portヘッダー – 標準 HTTP リクエストの場合、このヘッダーをターゲットポート番号に含めます。 -
WebSocket サブプロトコル – WebSocket クライアントがカスタムヘッダーを設定できない場合は、ターゲットポートを
lambda-microvms.port.という名前のサブプロトコルとして指定します (NNはポート番号)。WebSocket 接続を開くときにサブプロトコルを指定します。例については、プロトコルを参照してください。 -
デフォルト (8080) – いずれも指定されていない場合、リクエストはポート 8080 にルーティングされます。
重要
ターゲットポートは、認証トークンで定義された allowedPorts 内に存在する必要があります。許可されていないポートへのリクエストには、403 Forbidden レスポンスが返されます。
認証
MicroVM エンドポイントへのすべてのリクエストには、X-aws-proxy-auth ヘッダーに有効な認証トークンが必要です。create-microvm-auth-token を使用してトークンを生成します。各トークンは、以下を対象とする暗号化された JWE (JSON Web Encryption) 文字列です。
-
特定の MicroVM (ID で識別)。
-
許可されたポートのセット (単一のポート、範囲、またはすべてのポート)。
-
有効期限 (トークンの作成時に設定)。
次の例では、トークンを作成し、それを使用して認証済みのリクエストを送信します。
aws lambda-microvms create-microvm-auth-token \ --microvm-identifiermicrovm-id\ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth:TOKEN' \ -H 'X-aws-proxy-port: 8080'
トークンの作成と MicroVM への接続 (WebSocket 接続を含む) の完全なチュートリアルについては、「MicroVM に接続する」を参照してください。
エラーレスポンス
リクエストを処理できない場合、またはアプリケーションにリクエストを配信できない場合、次の HTTP ステータスコードが MicroVM エンドポイントから返されます。これらのレスポンスは、アプリケーションからではなく、エンドポイントから送信されます。
| コード | ステータス | 原因と解決方法 |
|---|---|---|
| 400 | Bad Request | 不正な形式のリクエスト、または無効なポートヘッダーか WebSocket サブプロトコル。形式を確認してください。 |
| 403 | Forbidden | トークンがないか、期限切れであるか、無効です。またはリクエストされたポートがトークンの allowedPorts にありません。新しいトークンを生成するか、許可されたポートを使用してください。 |
| 429 | リクエストが多すぎます | レート制限を超えました (アカウントレベルまたは MicroVM あたり)。エクスポネンシャルバックオフを使用して再試行してください。 |
| 500 | Internal Server Error | 内部エラーが発生しました。リクエストを再試行します。 |
| 502 | Bad Gateway | アプリケーションが応答しないか、自動再開が最大再試行回数以内に成功しませんでした。「自動再開」を参照してください。 |
リクエストヘッダー
X-aws-proxy-* ヘッダー名前空間は、認証トークン (X-aws-proxy-auth) やターゲットポート (X-aws-proxy-port) などのリクエストメタデータ用に Lambda によって予約されています。Lambda は、リクエストをアプリケーションに転送する前に X-aws-proxy-* ヘッダーを削除します。
リクエスト/レスポンス帯域幅
各 Lambda MicroVM には、そのサイズに合わせて直線的にスケールするリクエスト/レスポンス帯域幅があります。この帯域幅は、MicroVM エンドポイント経由のすべてのトラフィック (インバウンドリクエストとアウトバウンドレスポンスの両方を含む) に適用されます。
| MicroVM のサイズ (ベースライン) | 最大帯域幅 |
|---|---|
| 0.5 GB、0.25 vCPU | 1 MB/秒 (8 Mbps) |
| 1 GB、0.5 vCPU | 2 MB/秒 (16 Mbps) |
| 2 GB、1 vCPU | 4 MB/秒 (32 Mbps) |
| 4 GB、2 vCPU | 8 MB/秒 (64 Mbps) |
| 8 GB、4 vCPU | 16 MB/秒 (128 Mbps) |
ネットワーク飽和が原因でリクエストレイテンシーが増加した場合は、リクエストの同時実行数またはペイロードサイズを減らすか、より大きな MicroVM サイズを選択して使用可能な帯域幅を増やします。
HTTP/2 サポート
Lambda MicroVMs は、インバウンドエンドポイントで HTTP/2 をサポートします。Lambda は、TLS ハンドシェイク中に ALPN (Application-Layer Protocol Negotiation) を介してプロトコルをネゴシエートし、HTTP/2 を優先して HTTP/1.1 にフォールバックします。HTTP/2 対応クライアントは、これを自動的に使用します。
MicroVM 内のエンドポイントとアプリケーションの間で HTTP/2 を使用するには:
-
アプリケーションは TLS が提供する場合 – Lambda は ALPN を介してアプリケーションと HTTP/2 をネゴシエートし、HTTP/2 がサポートされていない場合は HTTP/1.1 にフォールバックします。
-
アプリケーションがプレーンテキストの HTTP を提供する場合 – アプリケーションへの接続で HTTP/2 を使用するようにリクエストに
X-aws-proxy-force-h2: trueヘッダーを含めます。
アウトバウンド接続
デフォルトでは、Lambda MicroVMs の出力パスにはパブリックインターネットアクセスがあります。MicroVM を Direct Connect または VPN 経由でプライベート VPC 内のリソース (RDS、ElastiCache、内部 API、オンプレミスシステムなど) に接続するには、VPC 設定で Lambda ネットワークコネクタを作成します。
VPC 出力を使用する場合、アウトバウンドトラフィックには、VPC 内のトラフィックを管理するセキュリティグループルールとネットワーク ACL が適用されます。
出力ネットワークコネクタを操作する
出力ネットワークコネクタは、MicroVM からのアウトバウンドトラフィックを VPC 経由でルーティングします。run-microvm コマンドから MicroVM を起動するときにコネクタを 1 回作成して ARN で参照します。
前提条件
ネットワークコネクタを作成するには、Lambda が VPC に Elastic Network Interface (ENI) を作成することを許可する IAM ロールが必要です。このロールには以下のアクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }
ネットワークコネクタを作成する
VPC サブネット、セキュリティグループ、ネットワークプロトコル (IPv4 または DualStack) を指定してコネクタを作成します。
aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole
ネットワークコネクタの状態
run-microvm で参照するには、コネクタが ACTIVE 状態である必要があります。
| 状態 | 説明 |
|---|---|
PENDING |
コネクタは作成中です (基盤となる ENI のプロビジョニング中です)。 |
ACTIVE |
コネクタを使用する準備ができました。 |
INACTIVE |
コネクタは一時的に非アクティブです。 |
FAILED |
プロビジョニングまたは更新に失敗しました。StateReason をチェックします。 |
DELETING |
コネクタは削除中です (ENI のクリーンアップ中です)。 |
DELETE_FAILED |
削除に失敗しました。 |
ネットワークコネクタで MicroVM を実行する
MicroVM を実行するときは、コネクタの ARN を参照します。
aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectorsconnector-arn\ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
注記
コネクタを更新または削除する前に、そのコネクタを使用するすべての MicroVM が終了していることを確認してください。使用中のコネクタを変更すると、MicroVM の実行時にネットワーク接続の問題が発生する可能性があります。