Lambda 関数 URL の呼び出し
関数 URL は、Lambda 関数のための専用 HTTP エンドポイントです。関数 URL の作成と設定には、Lambda コンソールまたは Lambda API を使用します。関数 URL を作成すると、一意の URL エンドポイントが Lambda により自動的に生成されます。関数 URL を作成した後に、その URL エンドポイントが変更されることはありません。関数 URL のエンドポイントでは、次の形式を使用します。
https://
<url-id>
.lambda-url.<region>.on.aws
注記
関数 URL がサポートされていない AWS リージョン は、アジアパシフィック (ハイデラバード) (ap-south-2
)、アジアパシフィック (メルボルン) (ap-southeast-4
)、アジアパシフィック (マレーシア) (ap-southeast-5
)、カナダ西部 (カルガリー) (ca-west-1
)、欧州 (スペイン) (eu-south-2
)、欧州 (チューリッヒ) (eu-central-2
)、イスラエル (テルアビブ) (il-central-1
)、および中東 (UAE) (me-central-1
) です。
関数 URL はデュアルスタックに対応しており、IPv4 と IPv6 をサポートしています。関数 URL の設定が完了すると、ウェブブラウザ、curl、Postman、または任意の HTTP クライアントからの、HTTP エンドポイントを介した関数の呼び出しが可能になります。関数 URL を呼び出すには、アクセス許可 lambda:InvokeFunctionUrl
が必要です。詳しくは、「アクセスコントロール」を参照してください。
関数 URL 呼び出しの基本
関数 URL が認証タイプに AWS_IAM
を使用している場合、各 HTTP リクエストには、AWS Signature Version 4 (SigV4) による署名が必要です。awscurl
関数 URL への HTTP リクエストの署名にツールを使用しない場合は、各リクエストには、SigV4 を使用して手動で署名する必要があります。関数 URL がリクエストを受信すると、Lambda が Sigv4 署名の処理を行います。署名が一致した場合のみ、Lambda によりリクエストが処理されます。SigV4 を使用してリクエストに手動で署名する方法については、Amazon Web Services 全般のリファレンス ガイドの「署名バージョン 4 を使用した AWS リクエストへの署名」を参照してください。
関数 URL が認証タイプに NONE
を使用している場合は、リクエストには Sigv4 を使用した署名の必要はありません。ウェブブラウザ、curl、Postman、または任意の HTTP クライアントを使用して関数を呼び出すことができます。
関数へのシンプルな GET
リクエストをテストするには、ウェブブラウザを使用します。例えば、関数 URL が https://abcdefg.lambda-url.us-east-1.on.aws
で文字列パラメータ message
を取り込む関数の場合、リクエストする URL は次のようになります。
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
POST
リクエストなど、他の HTTP リクエストをテストする場合は、curl などのツールが利用できます。例えば、関数 URL への POST
リクエストに一定の JSON データを含めたい場合には、次の curl コマンドを使用します。
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'
リクエストとレスポンスのペイロード
クライアントが関数の URL を呼び出すと、Lambda は、まずこのリクエストをイベントオブジェクトにマップしてから、関数に受け渡します その関数の応答は、Lambda が関数 URL を介してクライアントに返信する HTTP レスポンスにマッピングされます。
このリクエストとレスポンスのイベント形式は、Amazon API Gateway ペイロード形式バージョン 2.0 と同じスキーマに従います。
リクエストペイロードの形式
リクエストペイロードは次の構造を持ちます。
{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", "cookies": [ "cookie1", "cookie2" ], "headers": { "header1": "value1", "header2": "value1,value2" }, "queryStringParameters": { "parameter1": "value1,value2", "parameter2": "value" }, "requestContext": { "accountId": "123456789012", "apiId": "<urlid>", "authentication": null, "authorizer": { "iam": { "accessKey": "AKIA...", "accountId": "111122223333", "callerId": "AIDA...", "cognitoIdentity": null, "principalOrgId": null, "userArn": "arn:aws:iam::111122223333:user/example-user", "userId": "AIDA..." } }, "domainName": "<url-id>.lambda-url.us-west-2.on.aws", "domainPrefix": "<url-id>", "http": { "method": "POST", "path": "/my/path", "protocol": "HTTP/1.1", "sourceIp": "123.123.123.123", "userAgent": "agent" }, "requestId": "id", "routeKey": "$default", "stage": "$default", "time": "12/Mar/2020:19:03:58 +0000", "timeEpoch": 1583348638390 }, "body": "Hello from client!", "pathParameters": null, "isBase64Encoded": false, "stageVariables": null }
パラメータ | 説明 | 例 |
---|---|---|
|
このイベントでのペイロード形式のバージョン。現在 Lambda 関数 URL では、ペイロード形式バージョン 2.0 をサポートしています。 |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、プレースホルダーとしてこの値に |
|
|
リクエストパス。例えば、リクエスト URL が |
|
|
リクエストのクエリ文字列パラメータを含む raw 文字列。サポートされている文字は、 |
|
|
リクエストの一部として送信されたすべての Cookie を含む配列。 |
|
|
キーと値のペアで表されるリクエストヘッダーのリスト。 |
|
|
リクエストに対するクエリパラメータです。例えば、リクエスト URL が |
|
|
リクエストに関する追加的な情報 ( |
|
|
関数所有者の AWS アカウント ID。 |
|
|
関数 URL ID。 |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda では |
|
|
関数 URL で |
|
|
発信者 ID のアクセスキー。 |
|
|
発信者アイデンティティの AWS アカウント ID。 |
|
|
発信者の ID (ユーザー ID)。 |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、この値に |
|
|
発信者の身元に関連付けられているプリンシパル組織 ID。 |
|
|
発信者の身元のユーザー Amazon リソースネーム (ARN)。 |
|
|
発信者の身元のユーザー ID。 |
|
|
関数 URL のドメイン名。 |
|
|
関数 URL のドメインプレフィックス。 |
|
|
HTTP リクエストの詳細を含むオブジェクト。 |
|
|
リクエストで使用されている HTTP メソッド。有効な値には、 |
|
|
リクエストパス。例えば、リクエスト URL が |
|
|
リクエストのプロトコル。 |
|
|
リクエストを発行した即時 TCP 接続のソース IP アドレス。 |
|
|
User-Agent リクエストヘッダー値。 |
|
|
呼び出しリクエストの ID。この ID は、関数に関連する呼び出しログをトレースするために使用できます。 |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、プレースホルダーとしてこの値に |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、プレースホルダーとしてこの値に |
|
|
リクエストのタイムスタンプです。 |
|
|
リクエストのタイムスタンプ (Unix エポック秒)。 |
|
|
リクエスト本文。リクエストのコンテンツタイプがバイナリの場合、本文は base64 でエンコードされます。 |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、この値に |
|
|
ボディがバイナリペイロードで base64 でエンコードされている場合は |
|
|
関数 URL ではこのパラメーターを使用しません。Lambda は、この値に |
|
レスポンスペイロードの形式
関数からレスポンスが返されると、Lambda はそのレスポンスを解析し HTTP の形式に変換します。関数レスポンスペイロードの形式は以下のとおりです。
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": "{ \"message\": \"Hello, world!\" }", "cookies": [ "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT", "Cookie_2=Value2; Max-Age=78000" ], "isBase64Encoded": false }
Lambda は自動的にレスポンス形式を推定します。関数が有効な JSON を返し、かつ statusCode
を返さない場合、Lambda は以下のような想定を立てます。
-
statusCode
は200
。 -
content-type
はapplication/json
。 -
body
は関数のレスポンス。 -
isBase64Encoded
はfalse
。
次の例は、Lambda 関数の出力がレスポンスペイロードにどのようにマッピングされるか、また、レスポンスペイロードが最終的な HTTP レスポンスにどのようにマッピングされるかを示しています。関数の URL を呼び出したクライアントには、HTTP 応答が表示されます。
文字列によるレスポンスの出力例
Lambda 関数出力 | インタプリティングされたレスポンス出力 | HTTP レスポンス (クライアントに表示されるもの) |
---|---|---|
|
|
|
JSON によるレスポンスの出力例
Lambda 関数出力 | インタプリティングされたレスポンス出力 | HTTP レスポンス (クライアントに表示されるもの) |
---|---|---|
|
|
|
カスタムレスポンスの出力例
Lambda 関数出力 | インタプリティングされたレスポンス出力 | HTTP レスポンス (クライアントに表示されるもの) |
---|---|---|
|
|
|
cookie
関数から Cookie を返す場合、手動で set-cookie
ヘッダーを追加しないでください。代わりに、レスポンスペイロードオブジェクトに Cookie を含めます。Lambda はこれを自動的に解釈し、次の例のように HTTP レスポンスの set-cookie
ヘッダーとして追加します。
Lambda 関数出力 | HTTP レスポンス (クライアントに表示されるもの) |
---|---|
|
|