翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
VPC Lattice のターゲットとしての Lambda 関数
Lambda 関数を VPC Lattice ターゲットグループのターゲットとして登録し、Lambda 関数のターゲットグループにリクエストを転送するリスナールールを設定できます。サービスが Lambda 関数をターゲットとしてターゲットグループにリクエストを転送すると、Lambda 関数を呼び出し、リクエストのコンテンツを JSON 形式で Lambda 関数に渡します。
制限
-
Lambda 関数とターゲットグループは、同じアカウントおよび同じリージョンにある必要があります。
-
Lambda 関数に送信できるリクエストボディの最大サイズは 6 MB です。
-
Lambda 関数が送信できるレスポンス JSON の最大サイズは 6 MB です。
-
プロトコルは HTTP または HTTPS である必要があります。
Lambda 関数の準備
VPC Lattice サービスで Lambda 関数を使用している場合は、以下の推奨事項が適用されます。
Lambda 関数を呼び出すアクセス許可
ターゲットグループを作成し、 AWS Management Console または を使用して Lambda 関数を登録すると AWS CLI、VPC Lattice はユーザーに代わって Lambda 関数ポリシーに必要なアクセス許可を追加します。
また、次の API 呼び出しを使用すると、自分で権限を追加できます。
aws lambda add-permission \ --function-name
lambda-function-arn-with-alias-name
\ --statement-idvpc-lattice
\ --principal vpc-lattice.amazonaws.com \ --action lambda:InvokeFunction \ --source-arntarget-group-arn
Lambda 関数のバージョニング
ターゲットグループごとに 1 つの Lambda 関数を登録できます。Lambda 関数を変更し、VPC Lattice サービスが常に現行バージョンの Lambda 関数を呼び出せるようにするには、関数のエイリアスを作成し、VPC Lattice サービスに Lambda 関数を登録するときに関数 ARN にエイリアスを含めます。詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda 関数のバージョン」および「Lambda 関数のエイリアスを作成する」を参照してください。
Lambda 関数のターゲットグループの作成
リクエストルーティングで使用されるターゲットグループを作成します。リクエストのコンテンツが、コンテンツをこのターゲットグループに転送するアクションを含むリスナールールと一致する場合、VPC Lattice サービスは登録された Lambda 関数を呼び出します。
コンソールを使用してターゲットグループを作成し、Lambda 関数を登録するには
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
ナビゲーションペインの [VPC Lattice] で [ターゲットグループ] を選択します。
-
[ターゲットグループの作成] を選択します。
-
[ターゲットタイプの選択] で [Lambda 関数] を選択します。
-
[ターゲットグループ名] に、ターゲットグループの名前を入力します。
-
[Lambda イベント構造バージョン] でバージョンを選択します。詳細については、「VPC Lattice サービスからのイベントを受け取る」を参照してください。
-
(オプション) タグを追加するには、[タグ] を展開し、[新しいタグを追加] を選択して、タグキーとタグ値を入力します。
-
[Next (次へ)] を選択します。
-
[Lambda 関数] で、次のいずれかを実行します。
-
既存の Lambda 関数を選択します。
-
新しい Lambda 関数を作成し、その関数を選択します。
-
Lambda 関数は後ほど登録します。
-
-
[ターゲットグループの作成] を選択します。
ターゲットグループを作成し、 AWS CLIを使用して Lambda 関数を登録するには
create-target-group
VPC Lattice サービスからのイベントを受け取る
VPC Lattice サービスは、HTTP と HTTPS の両方を経由するリクエストの Lambda 呼び出しをサポートします。このサービスは JSON 形式でイベントを送信し、すべてのリクエストに X-Forwarded-For
ヘッダーを追加します。
Base64 エンコード
content-encoding
ヘッダーが存在し、コンテンツタイプが以下のいずれでもない場合、サービス Base64 は本文をエンコードします。
-
text/*
-
application/json
-
application/xml
-
application/javascript
content-encoding
ヘッダーが存在しない場合、Base64 エンコーディングはコンテンツタイプによって異なります。上述のコンテンツタイプの場合、サービスは Base64 エンコーディングせずに本文をそのまま送信します。
イベント構造の形式
LAMBDA
タイプのターゲットグループを作成または更新するときには、Lambda 関数が受け取るイベント構造のバージョンを指定できます。指定できるバージョンは V1
と V2
です。
例 サンプルイベント: V2
{
"version": "2.0",
"path": "/",
"method": "GET|POST|HEAD|...",
"headers": {
"header-key
": ["header-value
", ...],
...
},
"queryStringParameters": {
"key
": ["value
", ...]
},
"body": "request-body
",
"isBase64Encoded": true|false,
"requestContext": {
"serviceNetworkArn": "arn:aws:vpc-lattice:region
:123456789012
:servicenetwork/sn-0bf3f2882e9cc805a
",
"serviceArn": "arn:aws:vpc-lattice:region
:123456789012
:service/svc-0a40eebed65f8d69c
",
"targetGroupArn": "arn:aws:vpc-lattice:region
:123456789012
:targetgroup/tg-6d0ecf831eec9f09
",
"identity": {
"sourceVpcArn": "arn:aws:ec2:region
:123456789012
:vpc/vpc-0b8276c84697e7339
",
"type": "AWS_IAM",
"principal": "arn:aws:iam::123456789012
:assumed-role/my-role
/my-session
",
"principalOrgID": "o-50dc6c495c0c9188
",
"sessionName": "i-0c7de02a688bde9f7
",
"x509IssuerOu": "string
",
"x509SanDns": "string
",
"x509SanNameCn": "string
",
"x509SanUri": "string
",
"x509SubjectCn": "string
"
},
"region": "region
",
"timeEpoch": "1690497599177430
"
}
}
body
リクエスト本文。プロトコルが HTTP、HTTPS、gRPC の場合にのみ存在します。
headers
リクエストの HTTP ヘッダー。プロトコルが HTTP、HTTPS、gRPC の場合にのみ存在します。
identity
-
ID 情報。有効なフィールドには以下のものがあります。
principal
— 認証されたプリンシパル。 AWS 認証が成功した場合にのみ表示されます。principalOrgID
— 認証されたプリンシパルの組織の ID。 AWS 認証が成功した場合にのみ表示されます。sessionName
- 認証されたセッションの名前。 AWS 認証が成功した場合にのみ表示されます。sourceVpcArn
— リクエストが発生した VPC の ARN。ソース VPC が特定できる場合にのみ表示されます。type
– 認証ポリシーが使用され、 AWS 認証が成功AWS_IAM
した場合、値は です。
Roles Anywhere の認証情報が使用され、認証が成功すると、以下のフィールドが表示される場合があります。
x509IssuerOu
— 発行者 (OU)。x509SanDns
— サブジェクト代替名 (DNS)。x509SanNameCn
— 発行者代替名 (名前/CN)。x509SanUri
— サブジェクト代替名 (URI)。x509SubjectCn
— サブジェクト名 (CN)。
isBase64Encoded
本文が base64 エンコードされているかどうかを示します。プロトコルが HTTP、HTTPS、gRPC であり、リクエスト本文がまだ文字列でない場合にのみ表示されます。
method
リクエストの HTTP メソッド。プロトコルが HTTP、HTTPS、gRPC の場合にのみ存在します。
path
リクエストのパス。プロトコルが HTTP、HTTPS、gRPC の場合にのみ存在します。
queryStringParameters
HTTP クエリ文字列パラメータ。プロトコルが HTTP、HTTPS、gRPC の場合にのみ存在します。
serviceArn
リクエストを受け取るサービスの ARN。
serviceNetworkArn
リクエストを配信するサービスネットワークの ARN。
targetGroupArn
リクエストを受け取るターゲットグループの ARN。
timeEpoch
時間 (秒単位)。
例 サンプルイベント: V1
{
"raw_path": "/path/to/resource
",
"method": "GET|POST|HEAD|...",
"headers": {"header-key
": "header-value
", ... },
"query_string_parameters": {"key
": "value
", ...},
"body": "request-body
",
"is_base64_encoded": true|false
}
VPC Lattice サービスへのレスポンス
Lambda 関数からのレスポンスには、Base64 エンコーディングのステータス、ステータスコード、およびヘッダーが含まれます。本文は省略できます。
レスポンス本文にバイナリコンテンツを含めるには、コンテンツを Base64 でエンコードし、isBase64Encoded
を true
に設定する必要があります。サービスはコンテンツをデコードしてバイナリコンテンツを取得し、そのコンテンツを HTTP レスポンスの本文でクライアントに送信します。
VPC Lattice サービスでは、Connection
や Transfer-Encoding
などのホップバイホップ方式のヘッダーは受け付けません。サービスがクライアントにレスポンスを送信する前に計算するため、Content-Length
ヘッダーは省略できます。
Lambda 関数からのレスポンスの例を次に示します。
{ "isBase64Encoded":
false
, "statusCode":200
, "statusDescription": "200 OK
", "headers": { "Set-cookie": "cookies
", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }
複数値ヘッダー
VPC Lattice は、クライアントからのリクエスト、または複数の値を持つヘッダーを含むか、同じヘッダーを複数回含む Lambda 関数からのレスポンスをサポートします。VPC Lattice はすべての値をターゲットに渡します。
次の例では、異なる値header1を持つ という名前の 2 つのヘッダーがあります。
header1 = value1
header1 = value2
V2 イベント構造では、VPC Lattice はリスト内の値を送信します。以下に例を示します。
"header1": ["value1", "value2"]
V1 イベント構造では、VPC Lattice は値を 1 つの文字列にまとめます。以下に例を示します。
"header1": "value1, value2"
複数値のクエリ文字列パラメータ
VPC Lattice は、同じキーに対して複数の値を持つクエリパラメータをサポートします。
次の例では、異なる値QS1を持つ という名前の 2 つのパラメータがあります。
http://www.example.com?&QS1=value1&QS1=value2
V2 イベント構造では、VPC Lattice はリスト内の値を送信します。以下に例を示します。
"QS1": ["value1", "value2"]
V1 イベント構造では、VPC Lattice は最後に渡された値を使用します。以下に例を示します。
"QS1": "value2"
Lambda 関数の登録解除
トラフィックを Lambda 関数に送信する必要がなくなった場合は、登録を解除できます。Lambda 関数の登録を解除すると、未処理のリクエストは HTTP 5XX エラーで失敗します。
Lambda 関数を置き換えるには、新しいターゲットグループを作成し、新しい関数を新しいターゲットグループに登録し、リスナールールを更新して既存のターゲットグループではなく新しいターゲットグループを使用することをお勧めします。
コンソールを使用して Lambda 関数を登録解除するには
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
ナビゲーションペインの [VPC Lattice] で [ターゲットグループ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[ターゲット] タブで、[登録解除] を選択します。
-
確認を求められたら、「
confirm
」と入力し、[登録解除] を選択します。
を使用して Lambda 関数の登録を解除するには AWS CLI
deregister-targets