是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?
Posted
技术标签:
【中文标题】是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?【英文标题】:Is it possible to set up an AWS API Gateway endpoint for a Lambda function, using the AWS API? 【发布时间】:2015-11-09 05:36:00 【问题描述】:我通过设置指向 AWS Lambda 函数的 AWS API Gateway 端点向公共 HTTP 请求公开它。
这有两个部分:
创建并上传我的 AWS Lambda 函数 设置 API Gateway 以将 HTTP 端点指向我的 Lambda 函数我想使用 API 调用而不是 Web 界面来完成这两个部分。我可以在第一部分使用 AWS 开发工具包和 AWS CLI。
但是,对于第二部分,我被卡住了。在查看 AWS SDK for node.js 或 AWS CLI 时,我没有发现 API 网关的提及
有没有办法使用 AWS API 以编程方式为 Lambda 函数设置 API Gateway 端点?
【问题讨论】:
CLI / SDK 对API Gateway
的支持尚未准备好。我个人希望在re:Invent 2015
上发布有关这些功能的更多详细信息。
另外,CloudFormation
很可能对您未来的工作有所帮助。
【参考方案1】:
是的,可以通过 AWS 的 API 为您的 AWS Lambda 函数设置您的 Amazon API Gateway 端点。
虽然 Node.js 和 AWS CLI 中的适用于 javascript 的 AWS 开发工具包尚不支持 Amazon API Gateway,但您可以使用 Amazon API Gateway REST API 设置它们而无需官方开发工具包。在这种情况下,您可能会使用这些 API:
-
restapi:创建
资源:创建
方法:放置
集成:放置
集成响应:放置
方法响应:放置
您可能希望使用第三方库将 Amazon API Gateway 与 AWS Lambda 集成,例如 jaws-stack/JAWS 或 r7kamura/fluct。
【讨论】:
【参考方案2】:是的……绝对有可能。下面是一些使用 AWS-SDK for node.js 的 node.js 代码。我在这里为方法集成做一个 POST。现在你需要一些东西。希望这会有所帮助...祝你好运!
您用于网关 API 的方法的 ResourceId
网关 API 休息 ID
能够调用您的 Lambda 函数的调用角色的 ARN
您要集成的 Lambda 函数的 ARN。
var AWS = require('aws-sdk');
api = new AWS.APIGateway();
var params =
httpMethod: 'POST',
resourceId: [YOUR RESOURCE ID],
restApiId: [YOUR REST API ID],
type: 'AWS',
uri: [YOUR LAMBDA FUNCTION ARN],
integrationHttpMethod: 'POST',
credentials : [YOUR INVOKE ROLE ARN]
;
api.putIntegration(params, function (err, data)
if (err)
console.log('AWS Error', err);
else
console.log('Put Integration Method Created', data);
);
【讨论】:
谢谢凯文! uri 不容易弄清楚,所以这里有一个更详细的描述,以防它帮助某人:--uri arn:aws:apigateway:aws-region:lambda:path/2015-03-31/functions/arn:aws :lambda:aws-region:aws-acct-id:function:your-lambda-function-name/invocations【参考方案3】:是的,这是可行的。
JAWS 项目有一个漂亮而简单的 js 实现,而且效果很好 https://github.com/jaws-stack/jaws-api-gateway-client
此外,最新的 AWS CLI(1.99 版)已完全支持 API Gateway。 http://docs.aws.amazon.com/cli/latest/reference/apigateway/index.html#cli-aws-apigateway
【讨论】:
【参考方案4】:您可以将您的 API 端点指向 Lambda 函数。在 API Gateway 中新建 HTTP 方法时,选择“集成类型”为“Lambda 函数”,然后选择需要调用的 Lambda 函数。
主要挑战是将 API 输入参数映射到 Lambda 模型对象,您可以手动定义映射或提供模型架构(使用 json-schema)。
示例映射:
"firstname" : "$input.params('firstname')",
"lastname" : "$input.params('lastname')"
有关为 Java 8 编写的分步教程,请参阅 this blog 帖子。
【讨论】:
以上是关于是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 AWS SAM 配置具有不同 lambda 版本的不同 API Gateway 阶段
重新开始继续准备AWS Dev认证考试:AWS Lambda 环境变量
AWS Lambda 和 Gateway API - 使用 cloudformation 的蓝/绿部署