Lattice のターゲットとしての Lambda VPC 関数 - Amazon VPC Lattice

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Lattice のターゲットとしての Lambda VPC 関数

Lambda 関数をターゲットとして Lattice VPC ターゲットグループに登録し、Lambda 関数のターゲットグループにリクエストを転送するリスナールールを設定できます。サービスが Lambda 関数をターゲットとするターゲットグループにリクエストを転送すると、Lambda 関数を呼び出し、リクエストの内容を JSON 形式で Lambda 関数に渡します。詳細については、「 AWS Lambda デベロッパーガイド」の「Amazon Lattice VPC AWS Lambda での の使用」を参照してください。

制限
  • Lambda 関数とターゲットグループは、同じアカウントおよび同じリージョンにある必要があります。

  • Lambda 関数に送信できるリクエストボディの最大サイズは 6 MB です。

  • Lambda 関数JSONが送信できるレスポンスの最大サイズは 6 MB です。

  • プロトコルは HTTPまたは である必要がありますHTTPS。

Lambda 関数の準備

Lattice サービスで Lambda VPC 関数を使用している場合は、次の推奨事項が適用されます。

Lambda 関数を呼び出すアクセス許可

ターゲットグループを作成し、 AWS Management Console または を使用して Lambda 関数を登録すると AWS CLI、Lattice VPC はユーザーに代わって Lambda 関数ポリシーに必要なアクセス許可を追加します。

次のAPI呼び出しを使用して、自分でアクセス許可を追加することもできます。

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id vpc-lattice \ --principal vpc-lattice.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn
Lambda 関数のバージョニング

ターゲットグループごとに 1 つの Lambda 関数を登録できます。Lambda 関数を変更でき、Lattice VPC サービスが常に最新バージョンの Lambda 関数を呼び出すようにするには、関数エイリアスを作成し、Lambda 関数を Lattice VPC サービスに登録ARNするときに関数にエイリアスを含めます。詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda 関数のバージョン」および「Lambda 関数のエイリアスを作成する」を参照してください。

Lambda 関数のターゲットグループの作成

リクエストルーティングで使用されるターゲットグループを作成します。リクエストコンテンツがリスナールールとこのターゲットグループに転送するアクションに一致する場合、Lattice VPC サービスは登録された Lambda 関数を呼び出します。

コンソールを使用してターゲットグループを作成し、Lambda 関数を登録するには
  1. で Amazon VPCコンソールを開きますhttps://console.aws.amazon.com/vpc/

  2. ナビゲーションペインの VPCLattice で、ターゲットグループを選択します。

  3. [ターゲットグループの作成] を選択します。

  4. [ターゲットタイプの選択] で [Lambda 関数] を選択します。

  5. [ターゲットグループ名] に、ターゲットグループの名前を入力します。

  6. [Lambda イベント構造バージョン] でバージョンを選択します。詳細については、「Lattice VPC サービスからイベントを受信する」を参照してください。

  7. (オプション) タグを追加するには、[タグ] を展開し、[新しいタグを追加] を選択して、タグキーとタグ値を入力します。

  8. [Next (次へ)] を選択します。

  9. [Lambda 関数] で、次のいずれかを実行します。

    • 既存の Lambda 関数を選択します。

    • 新しい Lambda 関数を作成し、その関数を選択します。

    • Lambda 関数は後ほど登録します。

  10. [ターゲットグループの作成] を選択します。

ターゲットグループを作成し、 AWS CLIを使用して Lambda 関数を登録するには

create-target-group および register-targets コマンドを使用します。

Lattice VPC サービスからイベントを受信する

VPC Lattice サービスは、 HTTPと の両方を介したリクエストの Lambda 呼び出しをサポートしますHTTPS。サービスはイベントを JSON形式で送信し、 X-Forwarded-Forヘッダーをすべてのリクエストに追加します。

Base64 エンコード

content-encoding ヘッダーが存在し、コンテンツタイプが以下のいずれでもない場合、サービス Base64 は本文をエンコードします。

  • text/*

  • application/json

  • application/xml

  • application/javascript

content-encoding ヘッダーが存在しない場合、Base64 エンコーディングはコンテンツタイプによって異なります。上述のコンテンツタイプの場合、サービスは Base64 エンコーディングせずに本文をそのまま送信します。

イベント構造の形式

LAMBDA タイプのターゲットグループを作成または更新するときには、Lambda 関数が受け取るイベント構造のバージョンを指定できます。指定できるバージョンは V1V2 です。

例 サンプルイベント: 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、または g の場合にのみ存在しますRPC。

headers

リクエストのHTTPヘッダー。プロトコルが HTTP、HTTPS、または g の場合にのみ存在しますRPC。

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、、または gRPC でHTTPS、リクエストボディがまだ文字列でない場合のみ存在します。

method

リクエストのHTTPメソッド。プロトコルが HTTP、HTTPS、または g の場合にのみ存在しますRPC。

path

リクエストのパス。プロトコルが HTTP、HTTPS、または g の場合にのみ存在しますRPC。

queryStringParameters

HTTP クエリ文字列パラメータ。プロトコルが HTTP、HTTPS、または g の場合にのみ存在しますRPC。

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 }

Lattice VPC サービスに応答する

Lambda 関数からのレスポンスには、Base64 エンコーディングのステータス、ステータスコード、およびヘッダーが含まれます。本文は省略できます。

レスポンス本文にバイナリコンテンツを含めるには、コンテンツを Base64 でエンコードし、isBase64Encodedtrue に設定する必要があります。サービスはコンテンツをデコードしてバイナリコンテンツを取得し、HTTPレスポンスの本文でクライアントに送信します。

Lattice VPC サービスは、 Connectionや などのヘッダーを尊重し hop-by-hopません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 関数からのレスポンスをサポートします。 VPCLattice はすべての値をターゲットに渡します。

次の例では、 という名前の 2 つのヘッダーがあります。header1 異なる値を持つ 。

header1 = value1 header1 = value2

V2 イベント構造では、Lattice VPC はリスト内の値を送信します。例えば:

"header1": ["value1", "value2"]

V1 イベント構造では、Lattice VPC は値を 1 つの文字列にまとめます。例えば:

"header1": "value1, value2"

複数値のクエリ文字列パラメータ

VPC Lattice は、同じキーに対して複数の値を持つクエリパラメータをサポートします。

次の例では、 という名前のパラメータが 2 つあります。QS1 異なる値を持つ 。

http://www.example.com?&QS1=value1&QS1=value2

V2 イベント構造では、Lattice VPC はリスト内の値を送信します。例えば:

"QS1": ["value1", "value2"]

V1 イベント構造では、Lattice VPC は最後に渡された値を使用します。例えば:

"QS1": "value2"

Lambda 関数の登録解除

トラフィックを Lambda 関数に送信する必要がなくなった場合は、登録を解除できます。Lambda 関数の登録を解除すると、処理中のリクエストは HTTP 5XX エラーで失敗します。

Lambda 関数を置き換えるには、新しいターゲットグループを作成し、新しい関数を新しいターゲットグループに登録し、リスナールールを更新して既存のターゲットグループではなく新しいターゲットグループを使用することをお勧めします。

コンソールを使用して Lambda 関数を登録解除するには
  1. で Amazon VPCコンソールを開きますhttps://console.aws.amazon.com/vpc/

  2. ナビゲーションペインの VPCLattice で、ターゲットグループを選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [ターゲット] タブで、[登録解除] を選択します。

  5. 確認を求められたら、「confirm」と入力し、[登録解除] を選択します。

を使用して Lambda 関数の登録を解除するには AWS CLI

deregister-targets コマンドを使用します。