是否可以使用 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 类似于 Haskell 函数的执行

AWS Lambda 和 Gateway API - 使用 cloudformation 的蓝/绿部署

HTTP/2 推送 AWS API Gateway + Lambda

我是不是需要在 Lambda 和 API 网关中验证 AWS Cognito 令牌?