AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配合使用 AWS Lambda 和 Amazon API Gateway

您可以通过 HTTPS 调用 AWS Lambda 函数。您可以通过以下方式执行此操作:使用 Amazon API Gateway 定义自定义 REST API 和终端节点,然后将各个方法(如 GETPUT)映射到特定的 Lambda 函数。或者,您可以添加名为 ANY 的特殊方法,将支持的所有方法(GETPOSTPATCHDELETE)映射到 Lambda 函数。当向该 API 终端节点发送 HTTPS 请求时,Amazon API Gateway 服务会调用相应的 Lambda 函数。有关 ANY 方法的更多信息,请参阅使用 Lambda 和 API 网关 创建简单的微服务

例 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 函数的响应。

请注意有关 Amazon API Gateway 和 AWS Lambda 集成的工作原理的以下信息:

  • 推事件模型 – 这是一个模型(请参阅AWS Lambda 事件源映射),其中 Amazon API Gateway 通过将请求正文中的数据作为参数传递到 Lambda 函数来调用 Lambda 函数。

  • 同步调用 – Amazon API Gateway 可通过将 RequestResponse 指定为调用类型来调用 Lambda 函数并实时获取响应。有关调用类型的信息,请参阅调用类型

  • 事件结构 – 您的 Lambda 函数接收的事件是来自 Amazon API Gateway 接收的 HTTPS 请求的正文,您的 Lambda 函数是为处理特定事件类型而写入的自定义代码。

请注意,设置端到端体验时有两种类型的权限策略可供选择:

  • 针对 Lambda 函数的权限 – 无论哪个对象调用 Lambda 函数,AWS Lambda 都将通过担任您在创建 Lambda 函数时指定的 IAM 角色(执行角色)来执行该函数。利用与此角色关联的权限策略,您可以向 Lambda 函数授予其所需的权限。例如,如果 Lambda 函数需要读取某个对象,您可以在权限策略中为相关 Amazon S3 操作授予权限。有关更多信息,请参阅AWS Lambda 执行角色

  • 供 Amazon API Gateway 调用 Lambda 函数的权限 – Amazon API Gateway 无法在未经您的许可的情况下调用 Lambda 函数。您通过与 Lambda 函数关联的权限策略授予此权限。