AWS Lambda
開発者ガイド

AWS Lambda を Amazon API Gateway に使用する

AWS Lambda 関数を HTTPS 経由で呼び出すことができます。これを行うには、Amazon API Gateway を使用してカスタム REST API とエンドポイントを定義し (「api-gateway/」を参照)、個々のメソッド (GETPUT など) を特定の Lambda 関数にマッピングします。また、ANY という特殊なメソッドを追加して、サポートされているすべてのメソッド (GETPOSTPATCHDELETE) を Lambda 関数にマッピングすることもできます。API エンドポイントに HTTPS リクエストを送信するときに、Amazon API Gateway サービスが、対応する Lambda 関数を呼び出します。

Amazon API Gateway は、受信した HTTP リクエストに関する詳細を含むイベントを使用して、関数を同期的に呼び出します。

例 Amazon API Gateway メッセージイベント

{ "path": "/test/hello", "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, lzma, sdch, br", "Accept-Language": "en-US,en;q=0.8", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "US", "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48", "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==", "X-Forwarded-For": "192.168.100.1, 192.168.1.1", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https" }, "pathParameters": { "proxy": "hello" }, "requestContext": { "accountId": "123456789012", "resourceId": "us4z18", "stage": "test", "requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9", "identity": { "cognitoIdentityPoolId": "", "accountId": "", "cognitoIdentityId": "", "caller": "", "apiKey": "", "sourceIp": "192.168.100.1", "cognitoAuthenticationType": "", "cognitoAuthenticationProvider": "", "userArn": "", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48", "user": "" }, "resourcePath": "/{proxy+}", "httpMethod": "GET", "apiId": "wt6mne2s9k" }, "resource": "/{proxy+}", "httpMethod": "GET", "queryStringParameters": { "name": "me" }, "stageVariables": { "stageVarName": "stageVarValue" } }

Amazon API Gateway では、アプリケーションユーザーとアプリケーションロジックの間に、以下を可能にするレイヤーが追加されます。

  • 個々のユーザーやリクエストを絞り込む。

  • 分散型サービス妨害攻撃から保護する。

  • Lambda 関数からの応答をキャッシュするキャッシュレイヤーを提供する。

エンドツーエンドのエクスペリエンスを設定するときは、以下の 2 タイプのアクセス権限ポリシーを使用します。

  • Lambda 関数のアクセス権限 – Lambda 関数の呼び出し元にかかわらず、AWS Lambda は、Lambda 関数の作成時に指定された IAM ロール (実行ロール) を引き受けることで、その関数を実行します。このロールに関連付けられたアクセス権限ポリシーを使用して、Lambda 関数に必要なアクセス権限を付与します。たとえば、Lambda 関数にオブジェクトの読み取りが必要である場合は、アクセス権限ポリシーで、関連する Amazon S3 アクションのためのアクセス権限を付与します。詳細については、「AWS Lambda 実行ロール」を参照してください。

  • Amazon API Gateway が Lambda 関数を呼び出すためのアクセス権限 – アクセス権限が付与されていない場合、Amazon API Gateway は Lambda 関数を呼び出すことができません。Lambda 関数に関連付けられるアクセス権限ポリシーによって、このアクセス権限を付与します。